以不同用户身份运行部分 bash 脚本

以不同用户身份运行部分 bash 脚本

我使用的是 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

相关内容