# 不,我不会把这个给艾萝拉

问题描述 投票:0回答:1

不,我不会把这个给艾哈哈

artificial-intelligence
1个回答
3
投票

首先,基础知识:每个进程都有一个用户 ID 和一个组 ID(我将忽略附加属性,例如附加组 ID)。

用户 ID 0 是 root。就这样,故事结束。

当你有一个用户ID为0的进程时,它是一个根进程。故事结束。

进程如何获取其用户 ID 0 并不重要。如果进程的 userid 为 0,则它是根进程,仅此而已。

当您完成设置 setuid 进程的动作时,

setuid(0)
本身,您就完成了。你是一个根进程。就是这样。没什么可说的了。

setsuid() 和 getuid() 文档,似乎没有 有关密码验证的任何信息。

正确。他们所做的只是调整/更新用户 ID。就是这样。没有什么更多的了。

su
sudo
进程执行以下操作:

  1. 它们是 setuid 可执行文件。
$ ls -al /bin/su /bin/sudo
-rwsr-xr-x. 1 root root  57504 Aug 17 04:59 /bin/su
---s--x--x. 1 root root 185440 Aug  7 13:17 /bin/sudo

你觉得这很熟悉吗?你手工制作的 setuid 程序的权限看起来与此相同,不是吗?

  1. 但在他们进一步进行之前,他们要求您提供可接受的密码(或以某种形式或方式满足其他一些标准,可接受的身份验证标准的确切细节是什么并不重要,
    su
    中的密码)情况,或
    sudo
    配置中可接受的匹配)。如果您不这样做,他们将终止且不会采取进一步行动。

涉及 PAM 或其他身份验证框架的所有密码验证逻辑均由

su
sudo
进程本身实现。除非您提供可接受的身份验证凭据(无论它对
su
sudo
意味着什么),它们都会终止,并且不会发生进一步的操作。成功的身份验证会生成 shell 或执行的命令,但这是出于非常简单、基本的原因,
su
sudo
程序本身使用 setuid(权限位和系统调用)来获取 root 权限,如下所示第一笔生意。

© www.soinside.com 2019 - 2024. All rights reserved.