我无法设置其他人的 setuid 位。为什么?有安全锁吗?
$ ls -l
-rwxrwxr-x 1 allexj allexj 16784 Mar 11 17:30 a.out
$ chmod o=+s a.out
$ ls -l
-rwxrwx--- 1 allexj allexj 16784 Mar 11 17:30 a.out
答案1
man chmod
有一个专门的章节是关于 setuid 和 setgid 的。
但首先,仔细看看名称:set你编号,设置GID。
对于其他的应该设置哦id 位。但它并不存在,因为拥有这样的一点是没有意义的。
答案2
传统的 Unix 权限由 12 位组成
user group other extra
0 0 0 0 0 0 0 0 0 0 0 0
r w x r w x r w x s s t
这些额外的位允许您启用三个“附加模型”[1]:
- 第一个位(通常描述为小写 s 字母)是设定值位,当您使用它运行可执行文件时,允许任何用户拥有他们的欧盟用户识别码[2]设置为可执行文件所有者的 UID。
- 第二位(也表示为小写 s 字母)是设置gid位,它与 setuid 位具有相同的效果和含义,但是与 setuid 不同,它适用于组和EGID有效地允许任何用户运行可执行文件,就好像他们将其组设置为文件所有者的组一样。
- 最后第三位是粘性位[3](也称为限制删除标志)。它几乎总是用于目录,允许任何人在其中创建文件,并确保文件“粘住”其所有者,不允许任何人(root 除外)删除它们。在现代系统上,它最常见的用途是与/tmp目录。每个人都可以在其中创建文件,并且只有他们才可以删除它们,这确保每个人都可以共享一个目录,同时保证任何用户都不能弄乱其他用户的文件。对于目录来说,该位在大多数 Unix(和类 Unix)系统上具有基本相同的行为。然而,它对文件的使用在不同的 Unix(和类 Unix)系统中并不统一,例如,现代 Linux 内核完全忽略它,而其他系统可能有一些特殊用途[4]
因此,既然我们知道了这些位在现代系统上的运行方式,请问自己一个问题:如果第 12 位不是专门用于上述行为,那么如果我们将其应用于“其他”用户,setuid 位的行为会是什么样子?对于 setuid 和 setgit 来说这是显而易见的,但是“允许任何用户拥有其有效用户 ID 作为任何其他用户的 ID”是什么意思?对我来说,它看起来像是被零除,没有逻辑意义,因为答案可能是“有效用户 ID 将同时是任何和所有其他可能的用户 ID”。没有安全锁或暗示,拥有这样的东西没有任何意义。最初的 Unix 设计者可能认为拥有这样一个愚蠢的东西没有多大意义,并决定为它找到一个更好的应用程序(他们也可以只使用 11 位进行权限,但我喜欢认为他们实际上认为他们需要所有12,因为他们可以用它来做一些有用的事情,他们也最终做到了,使用偶数位也更容易)。
希望这可以帮助。