仅以 sudo 身份运行脚本的一部分,仅输入一次密码

Gau*_*ier 14 sudo scripts

我正在编写一个安装外部依赖项的脚本(实际上是脚本和 makefile 的组合):一些apt-get命令,一些git克隆,构建,安装,将用户添加到组,......

这些脚本中的某些操作需要超级用户权限,有些则不需要。

到目前为止,我已经使用 sudo 运行了整个 make 过程,但它有一些缺点:

  • git我克隆的回购root作为所有者,这意味着我无法在没有sudo或的情况下修改它们chown
  • 将用户添加到组的脚本不知道要添加哪个用户,因为whoami返回root

仅以超级用户身份运行需要它的命令的最佳方式是什么?理想情况下,该过程仍需要我输入sudo密码,但仅在安装过程开始时输入一次。它会在最后忘记它,但一直保留它直到那时(可能需要几个小时)。

我在网上找到的解决方案包括:

  • sudo -v在脚本的开头,但如果我理解正确,这会超时。我的脚本可能会运行几个小时
  • 运行的脚本sudo,但那些命令并不需要超级用户使用sudo -u $(logname) <command>。这就是我现在所做的,但感觉应该是相反的。

理想情况下,我希望我的脚本:

  1. 要求提供超级用户凭据
  2. 以登录用户身份运行普通命令
  3. 使用在步骤 1 中输入的凭据运行 sudo 命令
  4. sudo -k 关闭超级用户会话

gle*_*man 7

既然你有 sudo 访问权限,就为自己创建一个 sudoers 文件,然后在脚本完成后将其删除:

# grant this user access to the sudo commands without passwords
# add all required cmds to the CMDS alias
sudo tee /etc/sudoers.d/$USER <<END
$USER $(hostname) = NOPASSWD: /usr/bin/apt-get, /usr/sbin/adduser, /bin/rm, ...
END

# your script goes here
sudo apt-get install ...
git clone ...
sudo adduser group2 $USER
sudo adduser group1 $USER
: ...

# then, remove the sudo access
sudo /bin/rm /etc/sudoers.d/$USER
sudo -k
Run Code Online (Sandbox Code Playgroud)