如果我尝试使用 command 切换到用户sudo su - kshitiz
。它工作正常并且无需输入密码即可切换。
但是,如果我尝试以该用户身份运行脚本,它会要求我输入密码。
sudo -u kshitiz bash << EOF
> cat /home/ri/secret.txt
> EOF
为什么会这样呢?
更新:
User ksh may run the following commands on this host:
(root) NOPASSWD: /bin/su - kshitiz
答案1
正如您所确定的,sudo
设置为仅允许sudo su - kshitiz
,因此您的第二个命令必然会失败。
无论如何,您都不会经历相同的用户转换。
sudo su - kshitiz
运行su - kshitiz
为root
;如果您可以sudo
不root
使用密码,则根本不会要求输入密码,因为更改用户su -
时root
不会要求输入密码。
sudo -u kshitiz
要求直接sudo
切换kshitiz
,如果您不希望它要求输入密码,则需要其自己的配置。
如果允许用户运行任何东西,
sudo su - kshitiz -c bash ...
会工作。您还可以配置sudo
为允许
sudo -u kshitiz ...
没有密码。
答案2
问题是您有一个 sudo 配置,它允许运行登录 shell,但不能直接运行任意程序。
如果用户有一个受限制的帐户,即如果用户的登录shell是一个只执行少数特定命令的程序,那么这是一个安全限制;允许您运行 bash 将绕过该安全限制。
如果用户的登录 shell 是普通命令 shell(例如 bash),那么此配置很愚蠢,因为无论如何您都可以运行任意命令。您只需通过 运行所需的命令sudo
,并且由于它会运行 shell,因此请将要运行的命令传递给该 shell。
sudo /bin/su - kshitiz <<'EOF'
cat /home/ri/secret.txt
EOF
答案3
确保 /etc/sudoers 未使用 secure_path 或 env_reset。您也可以尝试使用:
sudo -E -u user # -E overrides env_reset.
我不明白“sudo su ..”的广泛使用,它是多余的。
- sudo -i :运行交互式登录 shell(读取 /root/.bashrc 和
- /root/.profile) sudo -s : 运行非登录交互式 shell (读取 /root/.bashrc)