为什么“ chmod 1777”和“ chmod 3777”都设置了粘性位?


15

要在目录上设置粘性位,为什么命令chmod 1777chmod 3777两者都起作用?


2
您正在提议一个可能有风险的操作。粘稠位和rwx组合使用都是不好的做法。任何人都可以更改和执行该文件,并且s位允许在没有密码的情况下切换到root用户。
jippie

1
如果修改了文件,@ jippie setuid和setgid位将消失,因此您无法以这种方式获得root访问权限。
凯尔·琼斯

@KyleJones,这仍然很危险。如果passwd二进制文件是世界可写的,那么您将无法通过修改它来获得root用户访问权限,但是您可以将其替换为以后所有人都可以运行的其他二进制文件,以为是passwd
通配符

@Wildcard同意。
凯尔·琼斯

Answers:


29

该分组中的每个数字(也称为八进制,因为它是base8)代表3位。如果将其转换为二进制文件,将使其变得更加容易。

1 = 0 0 1
3 = 0 1 1
5 = 1 0 1
7 = 1 1 1

因此,如果您执行了1777、3777、5777或7777,则将设置粘性位,因为第三列将是1。但是,对于3777、5777和7777,您还需要设置其他位(第一列的SUID,以及第二列的SGID)。

相反,该位置上的任何其他数字(最多7个)都不会设置粘性位,因为最后一列不是1或“ on”。

2 = 0 1 0
4 = 1 0 0
6 = 1 1 0


3
+1可以很好地说明八进制数字的工作方式以及如何将其应用于文件权限位。
CVn

1
它称为“位掩码”,而+1也用于说明/显示其设置方式以及clear“所有者组和其他”列。
克里斯·K

16

将作为参数传递给chmod的权限指定为八进制值。值中的每个数字代表三个位。如果给出了三个数字,则说明您正在为文件的所有者,组和其他(其他所有人)设置读取,写入和执行位。如果给出四个数字,则最左边的数字将设置setuid,setgid和sticky位。八进制1设置粘性位。八进制2设置setgid位。八进制2 +八进制1是八进制3,它同时设置setgid位和粘滞位。


1
是八进制2 | 八进制1而不是八进制2 +八进制1?在这种情况下,这些运算碰巧具有相同的结果,但总的来说,这是按位进行的,还是很重要,不是吗?
gerrit

1
@gerrit是的,在一般情况下,您应该看一下binary or操作员。但是,正如您所指出的,在这种情况下,它可以达到相同的结果,并且有更多的人熟悉加法。
CVn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.