【问题标题】:run specific command without sudo inside script running with sudo bash在使用 sudo bash 运行的脚本中运行没有 sudo 的特定命令
【发布时间】:2016-12-28 16:27:01
【问题描述】:

我有一个 bash 脚本,我正在使用 sudo 运行它:sudo NewScript

在脚本中,我有一个git 命令,我不想用sudo 运行它。目前,由于整个脚本使用sudo 运行,因此该命令也使用sudo 运行,这就是我想要禁止的。

这样的事情可能吗,还是我需要在没有sudo 的情况下运行脚本并为脚本中除git 命令之外的每个命令添加sudo

【问题讨论】:

  • 当您使用sudo 运行脚本时,该脚本基本上就像由root 用户运行一样运行。所以我能想到的唯一解决方案是使用特定用户的权限运行 git 命令,如下所示:sudo -S [username] [git command]
  • 如果是后一种方法,如果sudo 需要密码,系统将提示您输入所有此类命令的密码。

标签: git bash shell ubuntu sudo


【解决方案1】:

请注意sudo不同 用户身份运行程序,不一定以root 身份运行程序; root 只是默认值。因此,您的目标可能不是在没有 sudo 的情况下运行特定的 git 命令,而是以与其他用户不同的用户身份运行它。

如果你想让你的 git 命令由硬编码用户 the_user 运行,只需输入

sudo -u the_user <your git command>

在您的脚本中(当脚本以 root 身份运行时,这不会提示您输入密码)。

如果您事先不知道用户,但希望 git 命令由调用 sudo newScript 的人运行,请使用

sudo -u $SUDO_USER <your git command>

改为(感谢@thatotherguy 的提示)。

【讨论】:

    【解决方案2】:

    一种使用方法是使用su 切换到普通用户权限并动态运行它,而不是实际更改访问权限。

    使用脚本内的普通$USER 权限运行git 命令。

    su - "$USER" -c "git_command1; git_command2;"
    

    -c 标志用于将命令传递给 shell,根据 man su 页面,

    -c, --command=command 使用 -c 选项将命令传递给 shell。

    【讨论】:

      最近更新 更多