二、用户身份与文件权限( 五 )


[root@LB-nginx-01 ~]# ls -l /etc/shadow---------- 1 root root 632 1月12 20:17 /etc/shadow[root@LB-nginx-01 ~]# ls -l /bin/passwd -rwsr-xr-x. 1 root root 27856 8月9 2019 /bin/passwd
SGID:让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置);
在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置) 。SGID 的第一种功能是参考 SUID 而设计的,不同点在于执行程序的用户获取的不再是文件所有者的临时权限,而是获取到文件所属组的权限 。
每个文件都有其归属的所有者和所属组,当创建或传送一个文件后,这个文件就会自动归属于执行这个操作的用户(即该用户是文件的所有者) 。如果现在需要在一个部门内设置共享目录,让部门内的所有人员都能够读取目录中的内容,那么就可以创建部门共享目录后,在该目录上设置 SGID 特殊权限位 。这样,部门内的任何人员在里面创建的任何文件都会归属于该目录的所属组,而不再是自己的基本用户组 。此时,我们用到的就是 SGID 的第二个功能,即在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)
[root@LB-nginx-01 ~]# cd /tmp/[root@LB-nginx-01 tmp]# mkdir txtdir[root@LB-nginx-01 tmp]# ls -ld txtdir/drwxr-xr-x 2 root root 6 1月13 16:10 txtdir/[root@LB-nginx-01 tmp]# chmod -R 777 txtdir/[root@LB-nginx-01 tmp]# chmod g+s txtdir/[root@LB-nginx-01 tmp]# ls -ld txtdir/drwxrwsrwx 2 root root 6 1月13 16:10 txtdir/
在使用上述命令设置好目录的 777 权限(确保普通用户可以向其中写入文件),并为该目录设置了 SGID 特殊权限位后,就可以切换至一个普通用户,然后尝试在该目录中创建文件,并查看新创建的文件是否会继承新创建的文件所在的目录的所属组名称:
[root@LB-nginx-01 tmp]# su - yu[yu@LB-nginx-01 ~]$ cd /tmp/txtdir/[yu@LB-nginx-01 txtdir]$ echo 123456 > txt[yu@LB-nginx-01 txtdir]$ ls -l txt -rw-rw-r-- 1 yu root 7 1月13 16:13 txt
SBIT:SBIT 特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件 。当对某个目录设置了 SBIT 粘滞位权限后,那么该目录中的文件就只能被其所有者执行删除操作了 。当目录被设置 SBIT 特殊权限位后,文件的其他人权限部分的 x 执行权限就会被替换成 t 或者 T,原本有 x 执行权限则会写成 t,原本没有 x 执行权限则会被写成T 。
[root@LB-nginx-01 ~]# su - yu上一次登录:三 1月 13 16:12:52 CST 2021pts/0 上[yu@LB-nginx-01 ~]$ ls -ld /tmpdrwxrwxrwt. 15 root root 4096 1月13 16:42 /tmp[yu@LB-nginx-01 ~]$ cd /tmp/[yu@LB-nginx-01 tmp]$ ls -alddrwxrwxrwt. 15 root root 4096 1月13 17:15 .[yu@LB-nginx-01 tmp]$ echo 123456 > test[yu@LB-nginx-01 tmp]$ chmod 777 test [yu@LB-nginx-01 tmp]$ ll test -rwxrwxrwx 1 yu yu 7 1月13 17:15 test
其实,文件能否被删除并不取决于自身的权限,而是看其所在目录是否有写入权限 。为了避免现在很多读者不放心,为了测试还是赋予了这个 test文件最大的 777 权限() 。切换到另外一个普通用户,然后尝试删除这个其他人创建的文件就会发现,即便读、写、执行权限全开,但是由于 SBIT 特殊权限位的缘故,依然无法删除该文件:
[yu@LB-nginx-01 tmp]$ su - lei上一次登录:三 1月 13 16:02:30 CST 2021pts/2 上[lei@LB-nginx-01 ~]$ cd /tmp/[lei@LB-nginx-01 tmp]$ rm -rf test rm: 无法删除"test": 不允许的操作
如果也想对其他目录来设置 SBIT 特殊权限位,用 chmod 命令就可以了 。对应的参数 o+t 代表设置 SBIT 粘滞位权限:
[root@LB-nginx-01 ~]# mkdir linux[root@LB-nginx-01 ~]# chmod -R o+t linux/[root@LB-nginx-01 ~]# ls -ld linux/drwxr-xr-t 2 root root 6 1月13 17:20 linux/