6

在 Unix 中,当执行

如果真实用户 ID与文件所有者不同,并且设置用户 ID位为 on,则将有效用户 ID更改为文件所有者,并保存设置用户 ID
因为exec 时 将有效用户 ID复制到Saved set user ID 。

这个时候,为什么需要保存的set userID呢?

因为安全问题?如果是对的,尤其是什么情况?

4

2 回答 2

12

拥有一个保存的用户 id 可以让您放弃您的权限(通过将有效的 uid 切换为真实的),然后仅在需要时重新获得它们(通过将有效的 uid 切换为保存的)。

于 2011-04-14T15:52:52.127 回答
5

当文件被访问时,系统会查看进程的有效 UID、它的 GID 集并将它们与文件权限(可能还有文件上的 ACL)相匹配。

创建文件时,系统在决定是否可以创建文件时查看相同的进程值,但使用有效 UID 设置文件的 UID,并使用有效 GID 或目录的 GID(如果 SGID 位是在目录上设置的,或者如果您在 MacOS X 上)。

系统调用检查真实的access()UID 和真实的 GID(而不是有效的 UID 和 GID)是否可以访问文件。

如果您有一个 SUID (setuid) 程序,那么它可以使用其 EUID 来访问其用户无法访问的文件。但是,如果它想代表用户(运行它的人的 RUID)创建文件,则需要删除 SUID 权限,以便 EUID 与 RUID 相同。很久以前,一旦你放弃了 SUID 特权,它就永远失去了;你无法取回它。保存的 UID 值允许您切换回来,这简化了 SUID 程序的权限管理。

于 2011-04-14T18:00:22.483 回答