SUID、SGID 让我感到困惑 [已关闭]

SUID, SGID are confusing me [closed]

提问人:joe 提问时间:1/7/2023 更新时间:1/8/2023 访问量:114

问:


这个问题似乎不是关于特定的编程问题、软件算法或程序员主要使用的软件工具。如果您认为该问题在另一个 Stack Exchange 站点上是主题,您可以发表评论以解释该问题可能在哪里得到回答。

11个月前关闭。

我注意到 SUID 和 SGID 也有大写字母,这意味着文件或目录没有执行权限。S

如果我将二进制文件的权限更改为 ,为什么用户仍然可以用来更改其密码?在这种情况下,用户将被提升为以所有者身份执行二进制文件。但是 root 没有执行权限。/usr/bin/passwd-rwSr-xr-xpasswdroot

Linux SUID

评论

1赞 mtraceur 1/8/2023
也许应该将其转移到软件工程或其他更适合归结为软件设计原则的问题的堆栈上,而不是关闭它?(在某种程度上,“为什么这不能像我所理解的那样工作?”在这里是不合适的,这似乎是一个很好的问题,“如果有任何客观原因让它按照它的方式而不是我期望的方式进行设计/工程呢?”方式。也许经过一些编辑后,可以更明确地说出后一个问题。

答:

1赞 mtraceur 1/7/2023 #1

在将有效用户 ID 更改为文件所有者的用户 ID 之前,首先检查权限。

这可能是这样设计的,因为它更有用:如果 SUID 位在检查权限之前生效,那么 SUID 程序实际上只有一个执行权限位 - 要么每个人都可以执行它们,要么没有人可以执行它们。

实际上,更准确地说,组执行权限仍将独立工作,因此:

  • ??s??????如果 SUID 位在检查权限之前生效,则每个人都可以执行
  • ??S??-???如果 SUID 位在检查权限之前生效,则任何人都无法执行。
  • ??S??x???如果 SUID 位在检查权限之前生效,则只能由所属组中的人员执行。

通过首先检查权限,我们可以有其他有用的可能性,因为“组”和“其他”位仍然可以完全独立地控制行为。

这也意味着,对于任何给定的文件,您实际上可以回答“这个组中的人可以执行这个吗?”和“其他人可以执行这个吗?”,只需查看“组”和“其他”执行位(vs和vs),而不必总是想“等等,SUID位是否设置好了?”——如果SUID位首先生效,则必须始终检查它,以确定“组”或“其他”位是否确实如此什么。?????x????????-???????????x????????-