为什么设置 NOPASSWD 时 sudo 时间戳不更新?

为什么设置 NOPASSWD 时 sudo 时间戳不更新?

我已通过编辑 sudoers 文件将 sudo 设置为不提示输入密码:

myuser ALL=(ALL:ALL) NOPASSWD: ALL

它工作正常,运行 sudo 且没有密码提示。但进入时sudo -v我注意到它只提示输入密码一次。我sudo -v从手册中知道了什么:

如果给出 -v(验证)选项,sudo 将更新用户的时间戳,并在必要时提示输入用户密码。这会将 sudo 超时再延长 15 分钟(或 sudoers 中设置的任何超时),但不运行命令。

而且我知道我无论如何都不需要使用它(或者我错了?)。

问题是,sudo -v当 sudo 配置为不询问该用户密码时,为什么会提示输入密码?尤其是在另一个 sudo 命令之后运行时:为什么除非显式运行,sudo -v否则时间戳不会更新?sudo -v

如果重要的话,我的机器正在运行 Ubuntu Server 11.10。

编辑:运行sudo sudo -v不需要密码,但似乎不会更新时间戳,因为紧随其后sudo -v,它会再次提示输入密码。

更新 sudo 时间戳的机制是什么?为什么运行任何 sudo 命令然后运行时时间戳没有更新sudo -v

答案1

几乎可以肯定是因为默认选项认证被设定为。从 sudoers 手册页:

认证如果设置,用户必须通过密码验证自己,然后才能运行命令。此默认值可能会被 PASSWD 和 NOPASSWD 标记覆盖。该标志默认打开。

换句话说,您的 NOPASSWD 标志会覆盖密码要求仅适用于指定的命令。在任何其他情况下,都需要密码。添加此默认值是为了消除该命令引起的安全漏洞sudo -l

答案2

考虑到 sudoers 文件是可以更改的,从用户中删除 NOPASSWORD 参数是一个可能在 -v 调用后 15 分钟内发生的选项,因此为了创建一个时间戳文件(不存在/不存在)相关,除非您输入密码),系统会要求您输入密码。

如果您想检查是否能够运行某些内容,我建议您运行一个程序来检查它,例如 id、test 或任何适合您的用例的程序。

编辑:如果您在 sudo 下运行 sudo -v 或在 sudo 下运行任何其他命令,则仅当您输入密码或以其他方式(指纹、指纹、智能卡、私钥等...)。
在最近的 Ubuntu 版本中(也许在其他发行版中),默认情况下,root 可以在没有密码的情况下运行 sudo。

相关内容