Linux特殊位SUID、SGID、SBIT
前言
Linux中的文件权限一般有x、w、r,在某个情况下有需要用到s、t,即特殊位。
进程运行时能够访问哪些资源或文件,不取决于进程文件的属主属组,而是取决于运行该命令的用户身份的uid/gid,以该身份获取各种系统资源。
SUID
SUID即setuid,作用就是让执行该命令的用户,以该命令的拥有者的权限去执行,比如普通用户执行passwd时会拥有root的权限;
例子:
[syz@m01 ~]$ ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
说明:该文件/usr/bin/passwd的属主权限带有s;且属主和属组都是root,如果syz该用户是怎么进行密码更改的呢?首先这个文件带有的s;即是setuid权限位,表示允许普通用户
以/usr/bin/passwd属主root的权限来执行普通用户无法执行的功能。
设置和取消SUID
设置:
chmod 4xxx 文件名 例如:chmod 4551 syz.txt
chmod u+s 文件名 chmod u+s syz.txt
取消
chmod xxx 文件名
chmod u-s 文件名
SGID
SGID即setgid,作用就是即让执行文件的用户以该文件所属组的权限去执行。
设置和取消SGID
设置:
chmod 2xxx 文件名 例如:chmod 2551 syz.txt
chmod g+s 文件名 chmod g+s syz.txt
取消
chmod xxx 文件名
chmod g-s 文件名
SBIT
SBIT即Stick Bit,粘滞位,作用就是只对目录有效,普通用户对该目录有w和x权限,若没有粘滞位,则普通用户可以对目录下的文件/子目录进行删除操作(因为普通用户对目录具有w权限),包括其它用户建立的目录/文件;但若赋了SBIT,则普通用户只能删除自己创建的文件/目录,而不能删除不属于自己的文件/目录!
设置和取消SBIT
设置:
chmod 1xxx 文件名 例如:chmod 1551 syz.txt
chmod o+s 文件名 chmod o+s syz.txt
取消
chmod xxx 文件名
chmod o-s 文件名
例子:
[syz@m01 ~]$ ll -d /tmp/
drwxrwxrwt. 3 root root 4096 Feb 18 22:16 /tmp/
/tmp目录的权限other部分为rwt,这个t就是我们设置的粘滞位
#首先在syz用户下创建两个文件
[syz@m01 tmp]$ ll
total 4
drwxrwxr-x 2 syz syz 4096 Feb 18 23:14 test-dir
-rw-rw-r-- 1 syz syz 0 Feb 18 23:14 test-file
#然后切换到在leo用户下删除这两个文件
[leo@m01 tmp]$ ll
total 4
drwxrwxr-x 2 syz syz 4096 Feb 18 23:14 test-dir
-rw-rw-r-- 1 syz syz 0 Feb 18 23:14 test-file
[leo@m01 tmp]$ rm -rf test-dir/ test-file
rm: 无法删除"test-dir/": 不允许的操作
#显示无法删除,然后切换到root下,去除/tmp/的的t,即粘滞位
[leo@m01 tmp]$ su -
Password:
[root@m01 ~]# chmod o-t /tmp/
[root@m01 ~]# ll -d /tmp
drwxrwxrwx. 4 root root 4096 Feb 18 23:14 /tmp
#然后切换到leo用户,即可删除syz用户创建的那两个文件
[leo@m01 tmp]$ rm -rf test-dir/ test-file
[leo@m01 tmp]$ ll /tmp/
总用量 0