真实用户 ID、有效用户 ID 和已保存用户 ID 之间的区别

新手上路,请多包涵

我已经知道 真实的用户 id 。它是系统中用户的唯一编号。

在我的系统上,我的 uid

$ echo $UID
1014
$

其他两个 ID 代表什么?

有效用户ID保存的用户ID 有什么用,我们在系统中的什么地方使用它们?

原文由 mohangraj 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 364
1 个回答

区分真实用户 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 的用途。

原文由 Damon 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题