CentOS 文件特殊权限SUID,SGID,SBIT

时间:2021-05-21 14:39:34

1、SUID ,是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有所有者的权限(仅对拥有执行权限的二进制程序有效)。

(1)SUID权限仅对二进制程序有效;
(2)本权限仅在执行该程序的过程中有效;
(3)执行者将具有该程序所有者的权限。

场景1:在Linux中,所有账号的密码记录在/etc/shadow这个文件中,并且只有root可以读和强制写入这个文件。那么,如果另一个账号需要修改自己的密码,就需要访问/etc/shadow这个文件,但是只有root能访问/etc/shadow这个文件?但是其他用户可以通过passwd命令修改/etc/shadow这个文件内的密码的,这就是SUID的功能。

[es@bigdata-senior01 ~]$ ll /etc/shadow
---------- 1 root root 2302 1月 11 14:04 /etc/shadow [es@bigdata-senior01 ~]$ ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 6月 10 2014 /usr/bin/passwd passwd的所有者x位值是s,说明是SUID权限,普通用户在使用passwd命令的过程中,可以获得passwd命令所有者的权限,即root权限,仅限passwd命令执行过程。

2、SGID,用户组特殊权限。

2.1 当s标志出现在文件所有者的x权限时称为SUID,那么s出现在用户组的x权限时称为SGID。(U表示user,G表示group)。SGID有如下功能:

(1)SGID对二进制程序有用;
(2)程序执行者对该程序需具备x权限;
(3)执行者在执行过程中会获得该程序用户组的支持。

场景1:/usr/bin/locate这个程序可以去查询/var/lib/mlocate/mlocate.db这个文件的内容

[es@bigdata-senior01 ~]$ ll /usr/bin/locate
-rwx--s--x 1 root slocate 40520 4月 11 2018 /usr/bin/locate [es@bigdata-senior01 ~]$ sudo ls -l /var/lib/mlocate/mlocate.db
-rw-r----- 1 root slocate 3522235 1月 11 10:31 /var/lib/mlocate/mlocate.db locate命令在用户组的x位上是s权限,mlocate.db在用户组上是读权限,所以es用户通过locate命令获取了slocate组的临时权限,即读取权,
那么es用户就可以正常读取mlocate.db的数据来查找文件。

2.2 SGID也可以用目录上。当一个目录设置了SGID权限后,它具有如下功能:

(1)用户若对此目录具有r和x权限,该用户能够进入该目录;
(2)用户在此目录下的有效用户组将变成该目录的用户组;
(3)若用户在此目录下拥有w权限,则用户所创建的新文件的用户组与该目录的用户组相同。

场景2:需要在一个部门内设置共享目录,让部门内的所有人员都能够读取目录中的内容,那么就可以创建部门共享目录后,在该目录上设置 SGID 特殊权限位。

这样,部门内的任何人员在里面创建的任何文件都会归属于该目录的所属组,而不再是自己的基本用户组。

[es@bigdata-senior01 tmp]$ mkdir myshare

[es@bigdata-senior01 tmp]$ ll myshare -d
drwxrwxr-x 2 es es 6 1月 11 16:14 myshare [es@bigdata-senior01 tmp]$ chmod -R 777 myshare
[es@bigdata-senior01 tmp]$ ll myshare -d
drwxrwxrwx 2 es es 6 1月 11 16:14 myshare [es@bigdata-senior01 tmp]$ chmod -R g+s myshare
[es@bigdata-senior01 tmp]$ ll myshare -d
drwxrwsrwx 2 es es 6 1月 11 16:14 myshare [es@bigdata-senior01 tmp]$ cd myshare
[es@bigdata-senior01 myshare]$ ls
[es@bigdata-senior01 myshare]$ su
密码:
[root@bigdata-senior01 myshare]# touch 1.txt
[root@bigdata-senior01 myshare]# ll
总用量 0
-rw-r--r-- 1 root es 0 1月 11 16:18 1.txt
[root@bigdata-senior01 myshare]# su xu.dm
[xu.dm@bigdata-senior01 myshare]$ touch 2.txt
[xu.dm@bigdata-senior01 myshare]$ ll
总用量 0
-rw-r--r-- 1 root es 0 1月 11 16:18 1.txt
-rw-rw-r-- 1 xu.dm es 0 1月 11 16:18 2.txt 可以看到新建的文件用户组都是es组

3、SBIT 特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件,只对目录有效。

(1)当用户对此目录具有w和x权限时,即具有写入权限时;
(2)当用户在该目录下创建新文件或目录时,仅有自己和root才有权力删除。

场景:共享目录里,只能删除自己创建或上传的文件,除了root其他人不能删除

[es@bigdata-senior01 tmp]$ chmod o+t myshare
[es@bigdata-senior01 tmp]$ ll myshare -d
drwxrwsrwt 2 es es 32 1月 11 16:18 myshare [xu.dm@bigdata-senior01 myshare]$ rm 1.txt
rm:是否删除有写保护的普通空文件 "1.txt"?y
rm: 无法删除"1.txt": 不允许的操作 rm:是否删除有写保护的普通空文件 "1.txt"?y
[es@bigdata-senior01 myshare]$ ll
总用量 0 目录的所有者es,可以删除被保护的文件,其他用户(非root)不能删除。

4、关于SUID,SGID,SBIT权限设置

和rwx的421类似,suid,sgid,sbit也是421
SUID->4
SGID->2
SBIT->1

假设要将一个文件权限修改为“-rwsr-xr-x”,由于s在用户权限中,所以是SUID,因此,原先的755前面还要加上4,也就是4755,所以,
用命令chmod 4755 filename 设置就可以了。如果文件同时具备SUID和SGID,则权限变成4+2=6,即chmod 6755 filename。

此外,还可能出现S和T的情况。
s和t是替代x这个权限的,但是,如果它本身没有x这个权限,修改为s或t时就会变成大S或大T。

例如:
执行chmod 7666 filename。 因为666表示“-rw-rw-rw”,均没有x权限,所以最后变成“-rwSrwSrwT”。

另外也可以使用chmod u+s filename ,chmod g+s filename ,chmod o+t filename的方式来添加权限。