Linux文件特殊权限SUID、SGID、SBIT(sticky)
Linux文件普通权限rwx
“r”表示“读取”,对应进制数字4
"w"表示”写入“,对应八进制数字2
"x"表示“执行”,对应八进制数字1
常见文件权限表示”777“对应二进制表示为0~8位
9 8 7 6 5 4 3 2 1 0
-r w x r w x r w x
三个二进制位为一个用户权限表示
如:r-x的二进制表示为101,八进制为5
-wx的二进制表示为011,八进制为3
rwx的二进制表示为111,八进制为7
0~2表示其他用户权限;
3~5表示组用户权限;
6~8表示所有用户权限;
9表示文件类型:
p表示命名管道文件
d表示目录文件
l表示符号连接文件
-表示普通文件
s表示socket文件
c表示字符设备文件
b表示块设备文件
Linux文件特殊权限SUID、SGID、SBIT(sticky)
SUID权限作用于文件属主
SGID权限作用于文件属组
SBIT权限作用于其他用户上
在实现上述特殊权限位为9~11位
11 10 9 8 7 6 5 4 3 2 1 0
S G T r w x r w x r w x
第11位为SUID位,表示SUID权限,八进制为4
第10位为SGID位,表示SGID权限,八进制为2
第9位为SBIT位,表示SBIT权限,八进制为1
如只设置SUID位为4777
只设置SGID位为2777
只设置SBIT位为1777
同时设置SUID、SBIT为数字之和“6777”依此类推
SUID权限
-rwsrwxrwx
当s这个标志出现在文件所有者的x权限上时,表示所有者用户暂时对这个文件有了拥有者权限。
作用:
-
SUID权限仅对二进制可执行文件有效
-
执行者对于该可执行文件需要具有x权限
-
在执行过程中,调用者会暂时获得该文件的拥有者权限
-
该权限只在程序执行的过程中有效
SUID权限中的s有大小写之分,如果强行给普通文件添加s权限,那么显示的是大写的S,因为普通文件没有x权限,这样显示的suid其实没什么用,因为它并不是可执行文件。只有给文件添加了x权限后,suid才有效
SUID权限使用s表示,增加权限u+s,移除权限u-s; SUID权限也可以使用数字形式表示,0表示去除SUID权限,4表示添加SUID权限,而且是在原权限的数字表达形式开头加0或4,如:0755移除SUID权限,4755添加SUID权限
SGID权限
-rwxrwsrwx当s出现在文件的所属组x权限位置上时,表示文件使用者用户暂时有了该文件的所属组权限。
作用:
-
既可以作用于目录,也可以作用于可执行文件
-
只要父目录有SGID权限,所有的子目录都会递归继承
-
执行者对于该可执行文件需要具有x权限
-
在执行过程中,调用者会暂时获得该文件的所属组权限
同样SGID的s权限也是分大小写的,当所属组没有x权限的时候,设置SGID后就会变成大写的S,这点跟SUID一样。
SGID权限使用s表示,增加权限g+s,移除权限g-s; SGID权限也可以使用数字形式表示,0表示去除SGID权限,2表示添加SGID权限,而且是在原权限的数字表达形式开头加0或4,如:0755移除SGID权限,2755添加SGID权限
SBIT权限(sticky)
-rwxrwxrwt
当t出现在其他组的x权限位置时,表示其他组具有SBIT的权限。
作用:
-
当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除。
-
只针对目录有效
最具有代表的就是/tmp目录,任何人都可以在/tmp内增加、修改文件(因为权限全是rwx),但仅有该文件/目录建立者与 root能够删除自己的目录或文件。
权限t也有大小写之分,大写说明没有x权限,小写说明有x权限,这点和权限s是一样的。
SBIT权限使用t表示,增加权限o+t,移除权限o-t; SBIT权限也可以使用数字形式表示,0表示去除权限,1表示添加权限,而且是在原权限的数字表达形式开头加0或1,如下:如:0755移除SBIT权限,1755添加SBIT权限。
注意:
SUID虽然很好了解决了一些问题,但是同时也会带来一些安全隐患。 因为设置了 SUID 位的程序如果被攻击(通过缓冲区溢出等方面),那么hacker就可以拿到root权限。 因此在安全方面特别要注意那些设置了SUID的程序。
通过以下的命令可以找到系统上所有的设置了SBIT的文件:
find / -perm -04000 -type f -ls
对于这里为什么是4000,大家可以看一下前面的八进制代表的意义就明白了。
在这些设置了SBIT 的程序里,如果用不上的,就最好取消该程序的SBIT 位。