我正在编写一个脚本(实际上是脚本和makefile的组合),该脚本安装了外部依赖项:一些apt-get
命令,一些git
克隆,构建,安装,将用户添加到组中,...
这些脚本中的某些操作需要超级用户权限,而某些则不需要。
到目前为止,我已经使用sudo运行了整个make过程,但是它有一些缺点:
git
我克隆root
以所有者身份获取的回购协议,这意味着以后如果没有sudo
或chown
- 自
whoami
返回以来,将用户添加到组的脚本不知道要添加哪个用户root
以超级用户身份仅运行需要超级命令的命令的最佳方法是什么?理想情况下,该过程仍然需要我输入sudo
密码,但在安装过程的开始阶段仅输入一次即可。然后,它会在最后忘记它,但要一直保留到那时(可能要花几个小时)。
我在网上找到的解决方案包括:
sudo -v
在脚本开始时,但如果我理解正确,则超时。我的脚本可能会运行几个小时- 运行的脚本
sudo
,但那些命令并不需要超级用户使用sudo -u $(logname) <command>
。这就是我现在要做的,但是感觉应该相反。
理想情况下,我希望脚本执行以下操作:
- 要求超级用户凭证
- 以登录用户身份运行常规命令
- 使用在步骤1中输入的凭据运行sudo命令
sudo -k
关闭超级用户会话
...或以root用户身份运行所有内容,并
—
Rmano
su $SUDO_USER -c command
以普通用户身份运行命令。
SUDO_USER
环境变量。如果存在,它将包含调用sudo的用户的用户名。因此,您可以(以root用户身份)添加$ SUDO_USER:$ SUDO_GID $ your_files。同样,您可以检查这些变量,以便您的adduser命令知道要添加的用户。