对于linux下文件权限的s位和t位的理解
作用:创建s和t权限,是为了让一般用户在执行某些程序时,能够暂时拥有改程序拥有者的权限。
SUID是Set User Id
SGID是Set Group Id
ls -l查看文件格式一共有10位
9 8 7 6 5 4 3 2 1 0
- r w x r - x r - x
这10位中8-6位是文件所有者权限
5-3位是同组用户权限
2-0位其他用户权限
形式为rwx
r表示可读,可以读出文件的内容
w表示可写,可以修改文件的内容
x表示可执行,可运行文件
第9位表示文件类型:
p表示命名管道文件
d表示目录文件
l表示符号链接文件
-表示普通文件
s表示socket文件
c表示字符设备文件
b表示块设备文件
其实在unix下,文件权限用12个二进制位表示
11 10 9 8 7 6 5 43 2 1 0
S G T r w x r w x r w x
第11位为SUID位
第10位为SGID位
第9位为sticky位
给文件加SUID和SGID的方法:
1. 使用命令:
chmod u+s filename 设置SUID位
chmod u-s filename去掉SUID位
chmod g+s filename 设置SGID位
chmod g-s filename 去掉SGID位
2.使用数字表示:
4为SUID
2为SGID
1为Sticky bit
# ll
-rw-r--r-- 1 root root 37 Aug 21 04:17 test1
# chmod 4755 test1
# ll test1
-rwsr-xr-x 1 root root 37 Aug 21 04:17 test1
# chmod 6755 test1
# ll test1
-rwsr-sr-x 1 root root 37 Aug 21 04:17 test1
# chmod 7666 test1
# ll test1
-rwSrwSrwT 1 root root 37 Aug 21 04:17 test1
为什么给test文件赋予权限为7666之后,s和t变成大写的呢?
因为7666表示user、group以及others都没有执行权限,所以S、T表示空的
SUID 是表示该文件在执行时,具有文件拥有者的权限,然而,连拥有者都没有执行的权限时,其他人就更没有执行权限了。