【问题标题】:Disable sudo for a single command in a sh file on macOS Sierra为 macOS Sierra 上的 sh 文件中的单个命令禁用 sudo
【发布时间】:2017-02-15 23:22:30
【问题描述】:

我一直在寻找一些东西来禁用这个命令的 sudo 访问,同时为脚本的其余部分维护 sudo。 使用 sudo 调用脚本,例如“sudo ./install.sh”。有问题的 sn-p 是这样的(我目前正试图让一个新用户调用该命令,但没有用):

echo >&2 "Installing Homebrew"
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

我只希望第 2 行的命令以非 root/非 sudo 身份运行。我是一个菜鸟,因此任何指导/替代方法(不包括创建新用户)都将不胜感激。

【问题讨论】:

  • 为什么不直接从第 4 行删除 sudo -u USERNAME
  • 对不起,我应该指定,但脚本是使用 sudo 运行的,所以每一行都是 sudo。并且 Homebrew 的安装脚本禁止 sudo 安装。
  • 考虑脚本实际需要 sudo,以及是否更适合使用sudo in脚本必要而不是使用 sudo 运行整个脚本。

标签: linux bash macos sh sudo


【解决方案1】:

如果脚本使用sudo 运行,那么您可以使用$SUDO_USER 获取原始用户名:

echo >&2 "Installing Homebrew"
sudo -u "$SUDO_USER" /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

(并且不要在脚本中的其他命令上使用sudo -- 如果脚本本身使用sudo 运行,那完全是多余的。)

顺便说一句,如果脚本没有使用 sudo 运行,这将完全失败——例如,如果有人以 root 身份登录并运行它,使用 su 切换到 root 并运行它等等。它可能最好先检查一下,如下所示:

if [ -n "$SUDO_USER" ]; then
    echo >&2 "Installing Homebrew"
    sudo -u "$SUDO_USER" /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
else
    echo "No original user found to install Homebrew under" >&2
fi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    相关资源
    最近更新 更多