为什么我可以切换到用户但不能运行脚本

为什么我可以切换到用户但不能运行脚本

如果我尝试使用 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 - kshitizroot;如果您可以sudoroot使用密码,则根本不会要求输入密码,因为更改用户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)

相关内容