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


10

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

  • 有时它不要求我输入密码。例如我的$HOMEsudo ls

  • 但是我记得它对其他命令有用,尽管我忘记了哪个命令。

所以我想知道sudo当给出实际上不需要的命令时,如何决定是否要求输入密码sudo?是否有规定的/etc/sudoers规定?

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


15
决定程序是否尝试执行只有root用户才能执行的操作,或者决定在不实际运行程序的情况下访问调用用户被禁止访问的文件,这是变相的停机问题。因此,您可以确定这不是sudo在做什么。
zwol

2
+1是因为尽管该问题是基于错误的观念,但可以清楚地解释症状,并且可以得到一个明确的答案。
dcorking

Answers:


22

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

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

例如,如果您du在目录树上运行的目录内容无权访问,则会出现权限错误。这就是“拒绝权限”的含义。如果运行sudo du,sudo du将以root身份运行,因此不会出现权限错误(这就是root帐户的要点:root¹始终具有权限)。当您运行时sudo dudu它将以root身份运行,并且sudodu启动后完全不参与。du是否遇到权限错误与sudo的操作完全无关。

有些命令需要sudo 才能执行有用的操作。有用性是人类的观念。如果该命令在以root身份运行时执行了一些有用的操作,而在以您的帐户运行时却没有执行有用的操作,则需要使用sudo(或其他方法以root身份运行该命令)。

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

  1. sudo根据配置确定是否需要进行身份验证。默认情况下,sudo需要密码。可以通过多种方式将其关闭,包括将authenticate选项设置为false以及对NOPASSWD标签使用适用的规则。
  2. 如果sudo需要您的密码,则可以使用缓存的值。没关系,因为sudo需要密码的原因不是要验证谁在调用它(sudo知道用户是由谁调用的),而是要确认命令仍然是您,而不是有人控制了您的键盘。默认情况下,如果您在不到15分钟之前输入密码,sudo会认为您仍然在使用命令(可以使用该timeout选项进行更改)。您需要在同一终端上输入密码(这样,如果您仍然在一个终端上登录,则不用理会该终端,然后再使用另一终端,则有人可以tty_tickets

¹ 差不多,但这超出了本线程的范围。


可能有一些文件的可执行位仅设置为root,而不是其他。这可能落在“需要执行的根”上。(只是挑剔。)
PaŭloEbermann

@PaŭloEbermann我写了“任何用户都可以尝试运行任何命令”,以避免挑剔这种罕见的情况。总是有一个挑剔的人:(
吉尔斯'SO-不要再邪恶了'

45

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

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


谢谢。您是说sudo du /path/to/some/dir应该总是需要我的密码,还是永远不需要/path/to/some/dir
蒂姆(Tim)

12
是。它将始终需要您的密码(或不需要密码)。显然,如果它需要您的密码但已经将其存储在缓存中,则不会提示您输入密码。
dr_

5
严格来说,它可能取决于路径,因为/etc/sudoers可以指定命令及其参数。但是,如果您还没有添加任何类似的东西sudoers(如果有的话,我希望您会意识到这一点),则参数将无关紧要(如果您可以通过 常规访问root 则命令也将无关紧要sudo)。
斯蒂芬·基特

19
sudo不会将您的密码存储在高速缓存中,仅将您的身份已经通过密码检查验证过的信息。由于sudo是setuid-root程序,因此它已经具有以任何人身份运行任何东西所需的所有权限-但值得信赖的是,它仅允许用户完全按照文件中的指定使用它sudoers,并拒绝所有其他使用它的尝试。 。这就是为什么sudo如此小而又经过充分研究的程序很重要。
telcoM '18年

6

到实际上不需要sudo的命令

这不是命令需要还是不需要 sudo。当你跑步

sudo -u user command

系统执行commanduser

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.