我已经知道 真实的用户 id 。它是系统中用户的唯一编号。
在我的系统上,我的 uid
是
$ echo $UID
1014
$
其他两个 ID 代表什么?
有效用户ID 和 保存的用户ID 有什么用,我们在系统中的什么地方使用它们?
原文由 mohangraj 发布,翻译遵循 CC BY-SA 4.0 许可协议
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答800 阅读✓ 已解决
2 回答3.2k 阅读
区分真实用户 ID 和有效用户 ID 是因为您可能需要临时获取另一个用户的身份(大多数情况下,这将是
root
,但它可以是任何用户)。如果您只有一个用户 ID,那么之后将无法更改回您的原始用户 ID(除了认为您的话是理所当然的,如果您是root
,请使用root
更改为任何用户的权限)。所以,真正的用户 id 是你的真实身份(拥有进程的人),而有效的用户 id 是操作系统用来决定是否允许你做某事的东西(大多数时候,也有一些例外)。
当您登录时,登录 shell 会将真实用户 ID 和有效用户 ID 设置为密码文件提供的相同值(您的真实用户 ID)。
现在,您还执行了一个 setuid 程序,并且除了作为另一个用户运行(例如
root
)之外,setuid 程序 也 应该代表您做一些事情。这是如何运作的?执行 setuid 程序后,它将拥有您的真实 id(因为您是进程所有者)和文件所有者的有效用户 id(例如
root
),因为它是 setuid。该程序使用超级用户权限执行它需要做的任何事情,然后想代表您做一些事情。这意味着,尝试做一些你不应该做的事情 _应该会失败_。它是如何做到的?好吧,显然是通过将其有效用户 ID 更改为真实用户 ID!
现在 setuid 程序无法切换回来,因为所有内核都知道你的 id 和…… 你的 id 。砰,你死定了。
这就是保存的 set-user id 的用途。