`sudo` 要求哪个用户的密码?

`sudo` 要求哪个用户的密码?
$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 136808 Jul  4  2017 /usr/bin/sudo

sosudo可由任何用户运行,并且任何运行的用户都将 root 作为进程的有效用户 ID,因为设置了sudoset-user-id 位。/usr/bin/sudo

https://unix.stackexchange.com/a/11287/674

sudo 和 su 之间最明显的区别是sudo 需要用户密码su 需要 root 的密码。

  1. 要求哪个用户的密码sudo?是进程的真实用户ID所代表的用户吗?

    如果是,是否任何用户都可以通过运行sudo然后提供自己的密码来获得超级用户权限? Linux 可以限制某些用户吗?

  2. sudo要求输入密码是否正确 execve()开始执行main()?/usr/bin/sudo

    既然进程的euid已经改为root(因为设置了/usr/bin/sudo的set-user-id位),那么稍后sudo询问密码有什么意义呢?

谢谢。

我读过了https://unix.stackexchange.com/a/80350/674,但它并不能回答上面的问题。

答案1

  1. 在最常见的配置中,sudo要求用户输入密码跑步 sudo(正如你所说,与进程的真实用户ID对应的用户)。要点sudo是向特定用户授予额外的权限(由 中的配置确定sudoers),而这些用户无需提供除其自己的身份验证之外的任何其他身份验证。然而,sudo 检查运行的用户sudo是否确实是他们声称的身份,它通过询问他们的密码(或为其设置的任何身份验证机制sudo,通常使用 PAM - 因此这可能涉及指纹或双因素身份验证等来实现这一点。 )。

    sudo不一定授予成为 root 的权利,它可以授予各种权限。任何允许成为 root 的用户都sudoers可以仅使用自己的身份验证来完成此操作;但用户不允许,不能(至少不能使用sudo)。这不是由 Linux 本身强制执行的,而是由sudo(及其身份验证设置)强制执行的。

  2. sudo开始运行后确实要求输入密码;否则它不能做(IE它无能为力它开始运行)。sudo询问密码(即使是 root)的目的是验证正在运行的用户的身份(在其典型配置中)。

答案2

sudo不过,通常会询问运行它的用户的密码这个可以配置

与 不同的是su(1),当 sudoers需要身份验证时,它会验证调用用户的凭据,而不是目标用户(或根用户)的凭据。这可以通过rootpwtargetpwrunaspw标志进行更改,稍后将对此进行描述。

设置rootpw始终sudo询问 root 的密码,targetpw询问sudo最终运行程序的用户的密码,并runaspw询问在 中设置的用户的密码runas_default

像这样设置的二进制文件sudo确实可以由任何用户以 root 权限启动。假设sudo其身份验证代码没有任何错误,那么这本身并不重要。

类似地,任何进程也可以通过调用任何系统调用(例如 )在内核模式下执行代码open()。 (这与 root 的用户空间代码不同。)不过,只要内核没有错误,它们就无法运行任意代码。

答案3

从第一行开始man sudo

说明
sudo 允许允许的用户作为超级用户或安全策略指定的其他用户执行命令。调用用户的真实(非有效)用户 ID 用于确定用于查询安全策略的用户名。

所以:

  1. 使用调用用户的真实(无效)用户 ID ...
  2. 是的,任何(允许的) 用户可以通过运行 sudo 然后提供 (配置好的) 需要身份验证。允许的和配置的都在 sudoers 文件中设置。

  3. Linux 可以限制某些用户吗?
    是的,可以,但事实并非如此。 Linux 设置为允许 sudo 二进制文件根据 sudo 程序和文件内的规则集(安全策略)做出决定/etc/sudoers。通常,可以使用其他文件(也/替代)。

man setresuid

说明
setresuid() 设置调用进程的真实用户 ID、有效用户 ID 和保存的 set-user-ID。

  1. 获得内核授予的超级用户权限的唯一方法是运行一个程序suid。不可能不是这样。这是 Linux 选择授予超级用户权限的方式。

  2. 内核加载了一个不能被任何其他用户修改的可执行文件(文件和目录由root拥有并且只能由root写入)可执行文件本身(sudo)通过询问其密码(或配置的其他内容)来验证用户身份决定是否授予权限以及授予哪些权限。

答案4

除了其他好的答案之外sudo

su让您有效地成为不同的用户。在我自己的计算机上,我不以管理员身份运行日常使用 - 这意味着,除其他外,我不能(直接)使用sudo.如果我确实想使用sudo,我可以使用su来“成为”管理员用户,然后在该角色中使用sudo。在这种情况下,我最终输入了两次管理员帐户的密码 - 一次是在运行时su,一次是在运行时sudo

相关内容