我在下面观察这个问题:
abc@ubuntu:~$ sudo - i
[sudo] password for abc:
sudo: -: command not found
abc@ubuntu:~$ sudo -i
root@ubuntu:~#
sudo 命令似乎失败并出现错误“未找到命令”,但是对于使用正确选项的下一次 sudo 尝试,它获得了 root 登录,但这次它没有要求输入密码。为什么会有这种奇怪的行为?
我是从安全角度问这个问题的。请注意,在“找不到命令”之后,用户仍然是“abc”,可能不是管理员。他/她甚至不需要知道 sudo 密码,只需在 15 分钟(缓存密码时间)内发出“sudo -i”即可获得“root”权限。不是吗?
答案1
在第一种情况下,shell 认为sudo
您尝试运行 之后有一个命令-
,因为没有这样的命令,shell 告诉您未找到该命令。当运行前面带有 的命令时sudo
,默认情况下,它会询问您的密码。
在第二种情况下,shell 识别出您正在运行带有选项sudo
的命令-i
。不会再次询问密码,因为您在尝试运行第一个命令时刚刚正确输入了密码。 (默认情况下,它会缓存凭据 15 分钟)
答案2
$man sudo
...
Security policies may support credential caching
to allow the user to run sudo again for a period
of time without requiring authentication. The sudoers
policy caches credentials for 15 minutes, unless
overridden in sudoers(5). By running sudo with
the -v option, a user can update the cached credentials
without running a command.