我正在编写一个安装外部依赖项的脚本(实际上是脚本和 makefile 的组合):一些apt-get命令,一些git克隆,构建,安装,将用户添加到组,......
这些脚本中的某些操作需要超级用户权限,有些则不需要。
到目前为止,我已经使用 sudo 运行了整个 make 过程,但它有一些缺点:
git我克隆的回购root作为所有者,这意味着我无法在没有sudo或的情况下修改它们chownwhoami返回root仅以超级用户身份运行需要它的命令的最佳方式是什么?理想情况下,该过程仍需要我输入sudo密码,但仅在安装过程开始时输入一次。它会在最后忘记它,但一直保留它直到那时(可能需要几个小时)。
我在网上找到的解决方案包括:
sudo -v在脚本的开头,但如果我理解正确,这会超时。我的脚本可能会运行几个小时sudo,但那些命令并不需要超级用户使用sudo -u $(logname) <command>。这就是我现在所做的,但感觉应该是相反的。理想情况下,我希望我的脚本:
sudo -k 关闭超级用户会话既然你有 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)