3.文件管理
本章同步视频:https://edu.51cto.com/sd/e4874
3.3.3 SUID、SGID、SBIT
l SUID 权限仅对二进制程序(binary program)有效;
l 本权限仅在执行该程序的过程中有效 (run-time);
-rw-r-----. 1 root root 10 Mar 13 21:42 aaa
[root@localhost tmp]# su - calf
Last login: Fri Mar 13 21:26:08 CST 2020 on pts/0
[root@localhost ~]# ll /bin/cat
-rwxr-xr-x. 1 root root 54048 Jan 25 2014 /bin/cat
[root@localhost ~]# chmod 4755 /bin/cat
[root@localhost ~]# ll /bin/cat
-rwsr-xr-x. 1 root root 54048 Jan 25 2014 /bin/cat
[root@localhost tmp]# chmod u+s /bin/cat
Last login: Fri Mar 13 22:01:39 CST 2020 on pts/0
[root@localhost tmp]# chmod u-x /bin/cat
[root@localhost tmp]# ll /bin/cat
-rwSr-xr-x. 1 root root 54048 Jan 25 2014 /bin/cat
#注:1.S表示文件拥有者无x权限,s表示文件拥有者有x权限。
2.命令执行者必须具有x权限,不受文件拥有者是否有x权限的影响。
#注:效果和SUID一样,只是SUID是获得拥有者的权限,而SGID是获得群组的权限。
l 用户若对于此目录具有 r 与 x 的权限时,该用户能够进入此目录;
l 用户在此目录下的有效群组(effective group)将会变成该目录的群组;
l 若用户在此目录下具有 w 的权限(可以新建档案),则使用者所建立的新档案,该新档案的群组与此目录的群组相同。
[root@localhost tmp]# mkdir dir
[root@localhost tmp]# chmod 2777 dir
#设置SGID,同时开通满权限
[root@localhost tmp]# ll -d dir/
drwxrwsrwx. 2 root root 17 Mar 13 22:20 dir/
[root@localhost tmp]# touch dir/root
#root账号创建了文件root
[root@localhost tmp]# su - calf
Last login: Fri Mar 13 22:05:04 CST 2020 on pts/0
[calf@localhost ~]$ touch /tmp/dir/calf
#calf账号创建了文件calf
-rw-rw-r--. 1 calf root 0 Mar 13 22:26 calf
-rw-r--r--. 1 root root 0 Mar 13 22:20 root
#注:不同用户创建的文件都属于root组,即父目录dir所属的组。
[root@localhost tmp]# chmod g-x dir/
[root@localhost tmp]# ll -d dir/
drwxrwSrwx. 2 root root 41 Mar 13 22:30 dir
2.文件的创建者必须对该目录有w权限,与同组用户是否具有w权限无关。
l 当用户对于此目录具有 w, x 权限,亦即具有写入的权限时;
l 当用户在该目录下建立档案或目录时,仅有自己与 root 才有权力删除该档案。
[root@localhost tmp]# mkdir dir
[root@localhost tmp]# chmod 1777 dir
[root@localhost tmp]# ll -d dir
drwxrwxrwt. 2 root root 6 Mar 13 22:47 dir
#注:只加SBIT的命令也可以写成:chmod o+t dir
[root@localhost tmp]# su - calf #切换到calf
Last login: Fri Mar 13 22:37:37 CST 2020 on pts/0
[calf@localhost ~]$ touch /tmp/dir/calf{1,2,3} #创建3个文件
[root@localhost tmp]# su - stu #切换到stu
Last login: Thu Mar 5 10:56:32 CST 2020 on pts/2
[stu@localhost ~]$ touch /tmp/dir/stu{1,2,3} #创建3个文件
-rw-rw-r--. 1 calf calf 0 Mar 13 22:50 calf1
-rw-rw-r--. 1 calf calf 0 Mar 13 22:50 calf2
-rw-rw-r--. 1 calf calf 0 Mar 13 22:50 calf3
-rw-rw-r--. 1 stu stu 0 Mar 13 22:51 stu1
-rw-rw-r--. 1 stu stu 0 Mar 13 22:51 stu2
-rw-rw-r--. 1 stu stu 0 Mar 13 22:51 stu3
[calf@localhost ~]$ cd /tmp/dir/
calf1 calf2 calf3 stu1 stu2 stu3
[calf@localhost dir]$ rm -f calf1 #测试删除文件
calf2 calf3 stu1 stu2 stu3 #文件确实被删除
[calf@localhost dir]$ rm -f stu1
rm: cannot remove ‘stu1’: Operation not permitted
#但不能删除别人的文件
#注:用户对目录具有w权限,即可删除该目录下的文件。但此例中,用户只能删除拥有者是自己的文件,不能删除拥有者是其他用户的文件。这就是SBIT的效果。
[root@localhost tmp]# chmod o-x dir/
[root@localhost tmp]# ll -d dir
drwxrwxrwT. 2 root root 63 Mar 13 22:54 dir
#注:1.T表示其他用户不具有x权限,t表示其他用户具有x权限。