![当给出一个实际上不需要“sudo”的命令时,sudo 如何决定是否要求输入密码?](https://linux22.com/image/132952/%E5%BD%93%E7%BB%99%E5%87%BA%E4%B8%80%E4%B8%AA%E5%AE%9E%E9%99%85%E4%B8%8A%E4%B8%8D%E9%9C%80%E8%A6%81%E2%80%9Csudo%E2%80%9D%E7%9A%84%E5%91%BD%E4%BB%A4%E6%97%B6%EF%BC%8Csudo%20%E5%A6%82%E4%BD%95%E5%86%B3%E5%AE%9A%E6%98%AF%E5%90%A6%E8%A6%81%E6%B1%82%E8%BE%93%E5%85%A5%E5%AF%86%E7%A0%81%EF%BC%9F.png)
当应用于sudo
实际不需要的命令时sudo
,
有时它不会询问我的密码。例如在我的
$HOME
,sudo ls
.但我记得它适用于其他一些命令,尽管我忘记了是哪一个。
所以我想知道sudo
当给出实际上不需要的命令时如何决定是否要求密码sudo
?有什么规则可以/etc/sudoers
指定吗?
我真正的问题是,当我使用 时du
,它有时会显示某些目录的“权限被拒绝”,有时则不会,可能是因为我对某些目录没有权限?我申请sudo
了du
无论如何,并认为无论如何都会要求我输入密码,但实际上不是在我自己的目录上。
答案1
sudo
不知道要求运行的命令是否需要以其他用户(通常是 root)身份运行,它所知道的只是其配置。这决定了哪些用户可以运行sudo
,哪些用户作为“目标”,以及执行哪些命令;它还确定是否需要密码、需要哪个密码以及是否保留身份验证令牌。
如果您使用默认的 Debian 配置,则这里很可能涉及后者:sudo
第一次在任何给定终端中使用密码时会询问您密码,然后它将在一定时间内保留身份验证令牌。如果您在该时间内在同一终端中重复使用sudo
,它不会提示您输入密码。
答案2
在典型配置中,该命令是无关紧要的。第一次使用 sudo 时需要输入密码,并且在接下来的 15 分钟内不需要在该特定 shell 中输入密码。
从计算机的角度来看,不存在“需要sudo的命令”这样的东西。任何用户都可以尝试运行任何命令。结果可能只是一条错误消息,例如“权限被拒绝”或“没有这样的文件或目录”,但始终可以运行该命令。
例如,如果您du
在包含您无权访问的内容的目录树上运行,您将收到权限错误。这就是“许可被拒绝”的意思。如果您运行sudo du
, sudo 将以du
root 身份运行,因此您不会收到权限错误(这就是 root 帐户的要点:root 始终拥有权限)。当您运行时sudo du
,du
以root身份运行,并且在启动sudo
后根本不参与。 du
du是否遇到权限错误与sudo如何操作完全无关。
有一些命令需要sudo做一些有用的事情。有用性是人类的概念。如果该命令在以 root 身份运行但在您的帐户下运行时不起作用,则需要使用 sudo (或其他一些方法以 root 身份运行该命令)。
sudo 是否要求您输入密码取决于两件事。
- sudo 根据配置决定是否需要进行身份验证。默认情况下,sudo 需要密码。可以通过多种方式关闭此功能,包括将
authenticate
选项设置为 false 以及为标签设置适用的规则NOPASSWD
。 - 如果 sudo 需要您的密码,它可能会满足使用缓存的值。没关系,因为 sudo 需要您的密码的原因不是为了验证谁在调用它(sudo 知道哪个用户调用了它),而是为了确认仍然是您在执行命令,而不是控制您键盘的人。默认情况下,如果您在 15 分钟内输入密码(可以使用该
timeout
选项更改),则 sudo 愿意相信您仍在执行命令。您需要在同一终端中输入密码(这样,如果您在一个终端上保持登录状态,然后让该终端无人看管,然后使用另一个终端,则其他人无法利用此在另一个终端上使用 sudo — 但是这是一个非常弱的优势,可以通过将该选项设置为 false 来关闭它tty_tickets
)。
几乎,但这超出了本线程的范围。
答案3
到一个实际上不需要 sudo 的命令
这不是一个命令需要或者不需要须藤。当你跑步时
sudo -u user command
系统执行command
为user
.
调用是否成功,是否要求密码,取决于安全策略sudoers
(通常在 中配置/etc/sudoers
)。