shell - 如何从 POSIX shell 脚本中删除 root 权限?

标签 shell root

确实存在哪些可移植选项来删除 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-linuxsetpriv , 可以通过以下方式使用:
    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/

    相关文章:

    linux - 用于安装 AWS CLI 工具的 Bash 脚本

    linux - 我应该如何从非 root Debian Linux 守护进程登录?

    ubuntu - 如何在 Amazon EC2 实例上设置 root 密码?

    java - 已 root 的 Droid 上的 AsyncTask 问题

    python - Snakemake 将多个命令行集成在一个规则中

    python - 使用 shell 保存包含日期和时间的文件

    python - 如何在 x 时间后重新启动 python 脚本?

    bash - shell可以在 'command not found'之后运行特定的命令吗

    android - 如何打开/关闭飞行模式,即使是在新的 Android 版本上(甚至是 root 用户)?

    python - linux 目录权限检查和/或 dir 是否存在