假设我有一个脚本,它将在具有 root 权限的各种计算机上执行,但我想在没有 root 的情况下执行该脚本中的某些命令。
那可能吗?
答案1
答案2
sudo
导出环境变量SUDO_COMMAND
、SUDO_GID
、 SUDO_UID
和SUDO_USER
。
您可以使用SUDO_USER
或SUDO_UID
返回调用用户:
sudo -u "$SUDO_USER" an_unprivileged_command
答案3
sudo
su
是具有更好访问控制的增强版本。如果您已经以 身份运行root
,su
则可以毫不费力地执行此操作:
#!/bin/sh -e
echo -n "Script User: " && id -un
echo -n "Other user: " && su blrfl -c "id -un"
echo -n "Back to script user: " && id -un
运行时,你会得到这个:
Script User: root
Other user: blrfl
Back to script user: root
答案4
我同意亚历克斯·P的回答您通常应该以非 root 身份运行,并且仅对需要它的命令调用 sudo。白名单总是比黑名单更安全。
除了 AlexP 的回答之外:您可能希望sudo
在脚本的最顶部调用,以确保在意识到用户不允许运行之前不会执行大量操作sudo
,并创建一个损坏的状态。因此,我建议将以下内容放在sudo
有时需要的脚本顶部:
#!/bin/bash
sudo true || exit 1
# … other code …
这将立即要求输入密码(如果需要)并在失败时中止执行脚本sudo
。