有没有办法让脚本的一部分以不同的(非 root)用户身份运行?如果有帮助,将作为不同用户运行的部分出现在脚本的末尾。
编辑:
操作系统-> Ubuntu 9.04
pca*_*mic 47
在脚本中使用 sudo 命令。
在形式:
sudo -u username command
Run Code Online (Sandbox Code Playgroud)
sudo 命令以用户username运行命令。
如果脚本以 root 身份运行,我认为它不会提示输入密码。否则,本文将讨论如何在一个命令行中使用带密码的 sudo?,本文讨论如何在没有密码的情况下使用sudo?
# 我=喜欢:
#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)
这个答案很好,但是 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 次 |
| 最近记录: |