在Unix中,当 exec
时如果真实用户ID 与文件所有者不同,并且设置用户ID 位已启用,则有效用户ID 会更改提交所有者和已保存的设置用户ID 因为有效用户ID 在exec时被复制到已保存的设置用户ID 。
此时,为什么需要保存set userID?
由于安全问题?如果是对的,尤其是什么情况?
答案 0 :(得分:8)
拥有已保存的用户ID可让您放弃权限(通过将有效uid切换为真实的uid),然后仅在需要时重新获得(通过将有效uid切换为已保存的uid)。
答案 1 :(得分:3)
当访问文件时,系统会查看进程的有效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程序特权的管理。