我试图完全掌握 setuid 和 setgid 的概念,但我不太确定实际上以何种方式提升权限。让我举个例子:
用户
userA (groups: userA groupA)
userB (groups: userB groupB GroupC)
可执行文件
Permission owner group filename
-rws-----x userA groupD file
-rwsrws--x userA groupD file2
如果 userB 执行file
和file2
,可执行文件将具有什么组权限?我不完全确定可执行文件是否获得了用户/组权限两个都调用者和文件所有者,或者权限是否被“替换”。
我知道这是一个愚蠢的示例,因为 setuid 和 setgid 通常用于调用“全能”应用程序,但我希望这个示例能够更好地实际概念化 setuid 和 setgid 的工作原理。
答案1
setuid
设置有效uid尤伊德。
setgid
设置有效gid埃吉德。
在这两种情况下,调用者 uids 和 gids 都将保留在原处。因此,粗略地说,除了调用者 uid 和(活动)gid 之外,您还将获得该 uid/gid。
有些程序可以很好地区分这一点。
如果您登录系统,然后su
root,然后发出a,who am i
您将看到您的“旧”帐户。
su
是这些 suid 二进制文件之一,它将改变尤伊德。
答案2
据我所知:
可执行
setuid
文件以可执行文件的所有者和调用者的组身份执行。您没有可执行文件所有者的组权限。可执行
setgid
文件作为调用者执行。组集包含调用者的组和可执行文件的组。
(可以肯定的是,我刚刚在 Ubuntu 10.04 中测试了这一点)