***linux系统中的特殊权限之SUID(Set UID)***
***linux系统中的特殊权限之SGID(Set GID)***
***linux系统中的特殊权限之SBIT(Sticky BIT)***
前言
之前,我用2篇文章分别展示了SUID和SGID的用法。今天,我接着之前的SGID来介绍今天的主角—SBIT。想对之前的SUID和SGID有所了解的朋友可以查看上面的3个相关链接。
SBIT(Set BIT)(粘滞位)
SBIT的作用
之前已经提到了,当一个目录对于属组可写(或者全局可写)时,组内的所有用户(或者所有其他用户)都可以在此该目录内创建新文件和删除所有的文件,这样的权限是致命的;如果此时我们为此类目录设置了SBIT权限,则属组内的每个用户(或者所有其他用户)都只能创建新文件和删除自己的文件,但是不能删除其他用户的文件。
实例讲解
默认情况(不使用SBIT)
当一个目录的属组拥有w权限后,属组中的用户可以在这个目录中创建文件;但是,这又一个重要的问题,那就是一个用户可以随意删除其他用户创建的文件。
- #下面的示例中,用tom可以任意删除jerry创建的文件,这是非常危险的。
[tom@centos7u6 tmp]$ ls -ld /tmp/test_SGID/
drwxrwsr-x 2 root workgroup 58 Mar 30 17:38 /tmp/test_SGID/
[tom@centos7u6 tmp]$ ls -l /tmp/test_SGID/
total 16
-rw-rw-r-- 1 jerry workgroup 24 Mar 30 13:45 jerry2.test
-rw-rw-r-- 1 jerry jerry 6 Mar 30 13:27 jerry.test
-rw-rw-r-- 1 tom workgroup 21 Mar 30 13:48 tom2.test
-rw-rw-r-- 1 tom tom 4 Mar 30 13:14 tom.test
[tom@centos7u6 tmp]$ rm /tmp/test_SGID/jerry.test
rm: remove write-protected regular file ‘/tmp/test_SGID/jerry.test’? y
[tom@centos7u6 tmp]$ ls -l /tmp/test_SGID/
total 12
-rw-rw-r-- 1 jerry workgroup 24 Mar 30 13:45 jerry2.test
-rw-rw-r-- 1 tom workgroup 21 Mar 30 13:48 tom2.test
-rw-rw-r-- 1 tom tom 4 Mar 30 13:14 tom.test
至此,最后一个特殊权限,SBIT隆重登场。
使用SBIT权限
- #先为之前的/tmp/test_SGID目录设置SBIT,权限
注意:此时目录的other的x权限位,变成了小t
[root@centos7u6 test_SGID]# chmod o+t /tmp/test_SGID/
[root@centos7u6 test_SGID]# ls -ld /tmp/test_SGID/
drwxrwsr-t 2 root workgroup 58 Mar 30 17:38 /tmp/test_SGID/
- #设置完成后,tom用户只能删除自己的文件,但是不能删除jerry的文件。这样,在提供了共享目录的同时,又在一定程度上保证了数据的安全性。
[tom@centos7u6 test_SGID]$ rm -rf /tmp/test_SGID/tom
tom2.test tom.test
[tom@centos7u6 test_SGID]$ rm -rf /tmp/test_SGID/tom.test
[tom@centos7u6 test_SGID]$ rm -rf /tmp/test_SGID/jerry2.test
rm: cannot remove ‘/tmp/test_SGID/jerry2.test’: Operation not permitted
[tom@centos7u6 test_SGID]$ ls -l /tmp/test_SGID/
total 8
-rw-rw-r-- 1 jerry workgroup 24 Mar 30 13:45 jerry2.test
-rw-rw-r-- 1 tom workgroup 21 Mar 30 13:48 tom2.test
SBIT的用法
- 第一种方法:
chmod o+|-t DIRCTORYNAME- 设置权限:chmod o+t /tmp/test
- 取消:chmod o-t /tmp/test
- 第二种方法:
使用8进制赋权- 设置权限:chmod 1755 /tmp/tet
- 取消:chmod 755 /tmp/test
SUID | SGID | SBIT | 八进制权限 |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 |
0 | 1 | 0 | 2 |
0 | 1 | 1 | 3 |
1 | 0 | 0 | 4 |
1 | 0 | 1 | 5 |
1 | 1 | 0 | 6 |
1 | 1 | 1 | 7 |
判断是否有SBIT权限
SBIT的权限展示位,在other用户的x权限位上。
- 如果有SBIT
- 属组原本有执行权限,则属组的执行权限位,显示为小t
- 属组原本没有执行权限,则属组的执行权限位,显示为大写T
- 如果没有SBIT
- 属组的执行权限位,仍然按其基本权限,显示为x或者-
加点小料:/tmp目录
其实用linux系统的/tmp目录就是使用SBIT权限.
其中/tmp目录的基本权限为777,这保证了所有用户都可以在目录中创建和删除文件。
同时,由于/tmp设置了SBIT,所以保证了每个用户都只能删除自己的文件(老流氓root除外)
[root@centos7u6 test_SGID]# ls -ld /tmp
drwxrwxrwt. 11 root root 269 Mar 30 17:18 /tmp
使用SBIT的注意事项
- SBIT权限只针对目录有效
- 用户对该目录w和x有效