当给出一个实际上不需要“sudo”的命令时,sudo 如何决定是否要求输入密码?

当给出一个实际上不需要“sudo”的命令时,sudo 如何决定是否要求输入密码?

当应用于sudo实际不需要的命令时sudo

  • 有时它不会询问我的密码。例如在我的$HOMEsudo ls.

  • 但我记得它适用于其他一些命令,尽管我忘记了是哪一个。

所以我想知道sudo当给出实际上不需要的命令时如何决定是否要求密码sudo?有什么规则可以/etc/sudoers指定吗?

我真正的问题是,当我使用 时du,它有时会显示某些目录的“权限被拒绝”,有时则不会,可能是因为我对某些目录没有权限?我申请sudodu无论如何,并认为无论如何都会要求我输入密码,但实际上不是在我自己的目录上。

答案1

sudo不知道要求运行的命令是否需要以其他用户(通常是 root)身份运行,它所知道的只是其配置。这决定了哪些用户可以运行sudo,哪些用户作为“目标”,以及执行哪些命令;它还确定是否需要密码、需要哪个密码以及是否保留身份验证令牌。

如果您使用默认的 Debian 配置,则这里很可能涉及后者:sudo第一次在任何给定终端中使用密码时会询问您密码,然后它将在一定时间内保留身份验证令牌。如果您在该时间内在同一终端中重复使用sudo,它不会提示您输入密码。

答案2

在典型配置中,该命令是无关紧要的。第一次使用 sudo 时需要输入密码,并且在接下来的 15 分钟内不需要在该特定 shell 中输入密码。

从计算机的角度来看,不存在“需要sudo的命令”这样的东西。任何用户都可以尝试运行任何命令。结果可能只是一条错误消息,例如“权限被拒绝”或“没有这样的文件或目录”,但始终可以运行该命令。

例如,如果您du在包含您无权访问的内容的目录树上运行,您将收到权限错误。这就是“许可被拒绝”的意思。如果您运行sudo du, sudo 将以duroot 身份运行,因此您不会收到权限错误(这就是 root 帐户的要点:root 始终拥有权限)。当您运行时sudo dudu以root身份运行,并且在启动sudo后根本不参与。 dudu是否遇到权限错误与sudo如何操作完全无关。

有一些命令需要sudo做一些有用的事情。有用性是人类的概念。如果该命令在以 root 身份运行但在您的帐户下运行时不起作用,则需要使用 sudo (或其他一些方法以 root 身份运行该命令)。

sudo 是否要求您输入密码取决于两件事。

  1. sudo 根据配置决定是否需要进行身份验证。默认情况下,sudo 需要密码。可以通过多种方式关闭此功能,包括将authenticate选项设置为 false 以及为标签设置适用的规则NOPASSWD
  2. 如果 sudo 需要您的密码,它可能会满足使用缓存的值。没关系,因为 sudo 需要您的密码的原因不是为了验证谁在调用它(sudo 知道哪个用户调用了它),而是为了确认仍然是您在执行命令,而不是控制您键盘的人。默认情况下,如果您在 15 分钟内输入密码(可以使用该timeout选项更改),则 sudo 愿意相信您仍在执行命令。您需要在同一终端中输入密码(这样,如果您在一个终端上保持登录状态,然后让该终端无人看管,然后使用另一个终端,则其他人无法利用此在另一个终端上使用 sudo — 但是这是一个非常弱的优势,可以通过将该选项设置为 false 来关闭它tty_tickets)。

几乎,但这超出了本线程的范围。

答案3

到一个实际上不需要 sudo 的命令

这不是一个命令需要或者不需要须藤。当你跑步时

sudo -u user command

系统执行commanduser.

调用是否成功,是否要求密码,取决于安全策略sudoers(通常在 中配置/etc/sudoers)。

相关内容