确实存在哪些可移植选项来删除 root 权限并以与 shell 脚本不同的用户身份执行给定命令?
在做了一些研究之后,这里有一些非选项:
su $USER -c "$COMMAND"
使用 PAM 堆栈并创建一个新的 cgroup(在 systemd 下运行时)。它在用户命名空间中也失败了,因为审计调用在旧版本的 Linux 上返回 -EPERM。 sudo -u $USER $COMMAND
在许多系统上默认不安装。 start-stop-daemon --pidfile /dev/null --start --chuid $USER --startas /bin/sh -- -c "$COMMAND"
很难使用,仅在 Debian 系统上可用。 chpst -u $USER $COMMAND
许多系统都缺少。 runuser -u $USER -- $COMMAND
工作地点su
没有,但需要最近的 util-linux。 最佳答案
对于在“POSIX shell 脚本”的相关含义是“POSIX sh 脚本,在任意 Linux 系统上运行”而不是“sh 脚本,在保证只有工具的系统上运行”的上下文中阅读本文的人由 POSIX 保证”,还有更多可用选项。
借用 UNIX & Linux 的出色答案问题 How do I drop root privileges in shell scripts :
util-linux
有 setpriv
, 可以通过以下方式使用:setpriv --reuid=user --regid=group --init-groups --inh-caps=-all yourcommand
@JdeBP 的优秀文章Don't Abuse
su
For Dropping Privileges也值得一读。
关于shell - 如何从 POSIX shell 脚本中删除 root 权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24251474/