如果系统上只有 1 个具有 sudo 权限的用户,那么该用户运行的另一个程序是否可以在用户不知道的情况下获得 root 权限(如果该程序具有 sudo 密码)?
答案1
如果您的帐户配置为sudo
操作不需要密码,那么您将几乎看不到显示程序正在运行的信息sudo
。
例如
#!/bin/bash
read -p "Please enter your name: " n
echo "Thank you"
sudo cp -p /etc/shadow "$HOME/.shadow" # Copy the encrypted list of passwords
sudo chown "$USER" "$HOME/.shadow" # And make it readable for me
~/.shadow
请注意,如果您实际运行此脚本,您几乎肯定会想要删除。
日志文件中会有条目(请参阅目录中的文件/var/log
),但“聪明”的程序可能会尝试删除这些条目。至少是本地编写的。
答案2
这是关于确保不安装恶意代码的一个很好的教训。有一些棘手的行为sudo
可能会让黑客更难利用……但也不是太难。
环境变量SUDO_ASKPASS
(参见https://linux.die.net/man/8/sudo)允许您通过命名程序来从用户处获取密码来指定输入密码的方式。这在 GUI 世界中非常有用,在 GUI 世界中,您通常不希望看到命令行密码输入,而是看到一个友好的窗口(即使在命令行上工作时)。
因此,具有您的用户密码的程序可以创建自己的“askpass”程序,并进行硬编码,以便在您不知情的情况下响应您的密码。它可以设置SUDO_ASKPASS
环境变量并调用sudo
,而您永远不会收到通知。
除此之外,许多系统都有一种机制,允许 sudo 在从最近使用 sudo 进行身份验证的会话运行时跳过询问密码。
理论上,脚本可以留意这一点(如果它从活动用户会话运行),并在您输入密码后立即调用 sudo,以利用不会再次询问的事实。
简而言之...小心你安装的东西