我使用的是 Ubuntu 9.04。有没有办法让脚本的一部分以不同的(非 root)用户身份运行?如果有帮助,那么以不同用户身份运行的部分会出现在脚本的末尾。
答案1
在脚本中使用 sudo 命令。
形式为:
sudo -u username command
sudo 命令运行命令作为用户用户名。
如果脚本以 root 身份运行,我认为它不会提示输入密码。否则,本文将讨论如何使用在一个命令行中使用密码进行 sudo 吗?,本文讨论了如何使用sudo 不需要密码吗?
答案2
# 我喜欢:
#test if running bash as a different user works
sudo -u nobody bash -c : && RUNAS="sudo -u nobody"
echo 1: $USER
#Runs bash with commands between '_' as nobody if possible
$RUNAS bash<<_
echo 2: \$USER
_
echo 3: $USER
# 。/跑步
1: root
2: nobody
3: root
答案3
这个答案很好,但是 serverfault 的建议有点危险 - 允许任何人以 root 身份运行任何东西!所以我在这里发帖,因为我无法格式化评论。
我建议使用 visudo 尽可能精确地授予您所需的权限。输入visudo
并添加如下行:
username hostname = NOPASSWD: /full/path/to/command1, full/path/to/command2
如果你确实需要在许多主机上运行同一件事,你可以这样打开它:
username ALL = NOPASSWD: /full/path/to/command1, full/path/to/command2
但是我不会使用以下任何一个:
username ALL=(ALL) NOPASSWD: ALL
或用户名主机名 = ALL
这sudoer 手册页有很多血腥细节
答案4
对于sonarqube:
sudo -u sonar /usr/bin/sonar start
sonar
用于运行该命令的用户名在哪里/usr/bin/sonar start