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

Man*_*hai 41 linux bash user

有没有办法让脚本的一部分以不同的(非 root)用户身份运行?如果有帮助,将作为不同用户运行的部分出现在脚本的末尾。

编辑:
操作系统-> Ubuntu 9.04

pca*_*mic 47

在脚本中使用 sudo 命令。

在形式:

sudo -u username command
Run Code Online (Sandbox Code Playgroud)

sudo 命令以用户username运行命令

如果脚本以 root 身份运行,我认为它不会提示输入密码。否则,本文将讨论如何在一个命令行中使用带密码的 sudo?,本文讨论如何在没有密码的情况下使用sudo?

  • 这很好也很容易,但是有没有办法对一组命令而不是一次执行一个命令? (6认同)
  • 编写一个 bash 脚本,使其可执行“chmod +x script.sh”,然后只需“sudo -u username script.sh” (2认同)

AXE*_*abs 8

# 我=喜欢:

#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
Run Code Online (Sandbox Code Playgroud)

# 。/跑

1: root
2: nobody
3: root
Run Code Online (Sandbox Code Playgroud)

  • 你能添加一些解释性文字吗? (14认同)

Dav*_*llo 7

这个答案很好,但是 serverfault 建议有点危险 - 允许任何人以 root 身份运行任何东西!所以我在这里发帖是因为我无法格式化评论。

我建议使用 visudo 尽可能精确地授予您所需的权限。键入visudo并添加如下一行:

username hostname = NOPASSWD: /full/path/to/command1, full/path/to/command2
Run Code Online (Sandbox Code Playgroud)

如果你确实需要在多台主机上运行同样的事情,你可以打开它:

username ALL = NOPASSWD: /full/path/to/command1, full/path/to/command2
Run Code Online (Sandbox Code Playgroud)

但我 ** 不* 使用:

username ALL=(ALL) NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)

或用户名主机名 = ALL

sudoer手册页有很多血淋淋的细节


小智 5

这样,脚本的结尾将由不同的用户(root)执行。请注意$[LINENO+2]exit $?来电。这些是使脚本末尾仅执行一次并保留sudo调用的退出代码所必需的。

#!/bin/bash                                                                                                                                                                                                                                  
echo $USER                                                                                                                                                                                                                                      

# pipe the rest of this script via a sudo call                                                                                                                                                                                                                                         
tail -n +$[LINENO+2] $0 | exec sudo bash                                                                                                                                                                                                     
exit $?                                                                                                                                                                                                                                     
echo $USER
exit 1
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

149142 次

最近记录:

6 年,10 月 前