sudo`要求哪个用户密码?


10
$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root 136808 Jul  4  2017 /usr/bin/sudo

因此sudo,任何用户都可以运行该用户,并且运行的任何用户都sudo将以root作为该进程的有效用户ID,因为已设置了set-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,但未回答上述问题。


3
它不是任何用户,而是仅包含在sudoers列表中的那些用户。
罗德里戈

1
@Rodrigo听起来像是一个答案,将它放在答案中而不是评论。
菲利普·肯德尔

2
@PhilipKendall那只回答了OP的部分疑问。
罗德里戈

Answers:


22
  1. 在其最常见的配置中,sudo要求输入运行 用户的密码sudo(如您所说,该用户对应于进程的真实用户ID)。关键sudo是要向特定用户授予额外的特权(由中的配置确定sudoers),而这些用户不必提供自己的身份验证即可。然而,sudo 检查运行的用户sudo确实是他们声称自己是谁,它是通过询问他们的密码(或任何身份验证机制设立sudo,通常采用PAM -所以这可能涉及到指纹,或双因素身份验证等)。

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

  2. sudo确实在开始运行后要求输入密码;它无法执行其他操作(开始运行之前无法执行任何操作)。点sudo要求输入密码,即使它的根,是验证运行用户的身份(其典型配置)。


12

sudo通常可以要求输入运行它的用户的密码,尽管可以配置

与不同su(1),当 sudoers需要身份验证时,它将验证调用用户的凭据,而不是目标用户(或根用户)的凭据。这可以通过该被改变rootpwtargetpwrunaspw标志,后面叙述。

设置rootpwsudo始终是root的密码要求,targetpw要求用户的密码sudo将最终运行程序,并runaspw要求在用户设定的密码runas_default

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

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


8

从的第一行开始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根和可写的拥有)的可执行文件本身(须藤)被修改的可执行通过询问其密码(或者根据配置的东西)对用户进行认证并确定是否以及要授予哪些权限。


-1

其他有关sudo以下方面的好答案:

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

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.