为什么需要保存set userID?

man*_*utd 6 c unix exec userid

在Unix中,当exec

如果Real用户ID与文件所有者不同,并且Set user ID位为on,则有效用户ID将更改为文件所有者,并且也会保存设置的用户ID.
因为exec时将有效用户ID复制到已保存的设置用户ID.

此时,为什么需要保存set userID?

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

APr*_*mer 9

拥有已保存的用户ID允许您删除您的权限(通过将有效uid切换到真实的uid),然后仅在需要时重新获得它们(通过将有效uid切换到保存的uid).


Jon*_*ler 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 程序的权限管理。