我已经知道真正的用户 ID。它是系统中用户的唯一编号。
在我的系统上,我的 uid

$ echo $UID
1014
$
另外两个ID代表什么?
有效用户ID和保存的用户ID有什么用,我们在系统中的什么地方使用它们?

最佳答案

区分真实用户 ID 和有效用户 ID 是因为您可能需要临时获取另一个用户的身份(大多数情况下,这将是 root ,但它可以是任何用户)。如果您只有一个用户 ID,那么此后将无法更改回您的原始用户 ID(除了将您的话视为理所当然,如果您是 root ,则使用 root 的权限更改为任何用户) .

因此,真正的用户 id 是您的真实身份(拥有该进程的人),而有效的用户 id 是操作系统在决定是否允许您做某事(大多数情况下)时所查看的,也有一些异常(exception))。

当您登录时,登录 shell 会将真实和有效用户 ID 设置为密码文件提供的相同值(您的真实用户 ID)。

现在,你也执行了一个 setuid 程序,除了作为另一个用户运行(例如 root )之外,setuid 程序还应该代表你做一些事情。这是如何运作的?
执行 setuid 程序后,它将拥有您的真实 ID(因为您是进程所有者)和文件所有者的有效用户 ID(例如 root),因为它是 setuid。

该程序使用 super 用户权限执行它需要做的任何魔法,然后想代表您做一些事情。这意味着,尝试做一些你不应该做的事情应该会失败。它是如何做到的?好吧,显然是通过将其有效用户 ID 更改为真实用户 ID!

现在 setuid 程序无法切换回来,因为所有内核都知道你的 id 和...你的 id。砰,你死了。

这就是保存的 set-user id 的用途。

关于linux - 真实用户名、有效用户名和保存用户名的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32455684/

10-13 09:35
查看更多