3.文件治理

本章同步视频https://edu.51cto.com/sd/e4874

3.3.3 SUID、SGID、SBIT

1.SUID

(1)SUID

l  SUID 权限仅对二进制程序(binary program)有用;

l  执行者对于该程序需要具有 x 的可执行权限;

l  本权限仅在执行该程序的过程中有用 (run-time);

l  执行者将具有该程序拥有者 (owner) 的权限。

(2)无SUID的效果

[root@localhost tmp]# ll aaa

-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

[calf@localhost ~]$ cd /tmp/

[calf@localhost tmp]$ cat aaa

cat: aaa: Permission denied

#注:注重账号切换

(3)设置SUID

[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

注:设置SUID的另外一种方式:

[root@localhost tmp]# chmod u+s /bin/cat

(4)设置SUID后的效果

[root@localhost ~]# su - calf

Last login: Fri Mar 13 22:01:39 CST 2020 on pts/0

[calf@localhost ~]$ cd /tmp/

[calf@localhost tmp]$ cat aaa

aaaa

bbbb

#注:注重账号切换

(5)S与s的区别

[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权限的影响。

2.SGID

(1)SGID对文件的效果

l  SGID 对二进制程序有用;

l  程序执行者对于该程序来说,需具备 x 的权限;

l  执行者在执行的过程中将会获得该程序群组的支持!

#注:效果和SUID一样,只是SUID是获得拥有者的权限,而SGID是获得群组的权限。

(2)SGID对目录的效果

l  用户若对于此目录具有 r 与 x 的权限时,该用户能够进入此目录;

l  用户在此目录下的有用群组(effective group)将会酿成该目录的群组;

l  若用户在此目录下具有 w 的权限(可以新建档案),则使用者所确立的新档案,该新档案的群组与此目录的群组相同。

(3)SGID对目录效果测试

[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

[root@localhost tmp]# ll dir

total 0

-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所属的组。

(4)s与S的寄义

[root@localhost tmp]# chmod g-x dir/

[root@localhost tmp]# ll -d dir/

drwxrwSrwx. 2 root root 41 Mar 13 22:30 dir

#注:1.S示意同组用户无x权限,s示意同组用户有x权限。

         2.文件的建立者必须对该目录有w权限,与同组用户是否具有w权限无关。

3.SBIT

(1)SBIT的效果

l  当用户对于此目录具有 w, x 权限,亦即具有写入的权限时;

l  当用户在该目录下确立档案或目录时,仅有自己与 root 才有权力删除该档案。

(2)设置SBIT

[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

(3)准备环境

[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个文件

[root@localhost tmp]# ll dir

total 0

-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

(4)测试删除

[calf@localhost ~]$ cd /tmp/dir/

[calf@localhost dir]$ ls

calf1  calf2  calf3  stu1  stu2  stu3

[calf@localhost dir]$ rm -f calf1     #测试删除文件

[calf@localhost dir]$ ls

calf2  calf3  stu1  stu2  stu3           #文件确实被删除

[calf@localhost dir]$ rm -f stu1

rm: cannot remove ‘stu1’: Operation not permitted    

#但不能删除别人的文件

#注:用户对目录具有w权限,即可删除该目录下的文件。但此例中,用户只能删除拥有者是自己的文件,不能删除拥有者是其他用户的文件。这就是SBIT的效果。

(5)T和t的区别

[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权限。

         2.操作者需要对目录具有w权限。