2011-04-14 61 views
5

在Unix中,当EXEC为什么需要保存的设置用户ID?

如果真实的用户ID不一样有文件所有者,并设置用户ID位上,然后,有效用户ID改为文件所有者,和已保存的用户ID了。
由于有效用户ID被复制到保存的设置用户ID当EXEC键。

此时,需要保存的,为什么设置用户ID?

由于安全问题的?如果是对的,特别是什么情况?

+1

另请参阅http://stackoverflow.com/questions/205070/whats-the-deal-with-all-the-different-uids-a-process-can-have – Andy 2011-04-14 15:43:18

回答

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

8

有一个保存的用户ID,您可以仅在需要的时候放下你的权限(通过有效uid切换到真实的),然后恢复它们(通过有效uid切换到保存的一个)。

相关问题