Linux文件特殊权限SUID、SGID与SBIT

版权声明:感谢您对博文的关注!校招与社招,有需要内推腾讯的可以QQ(1589276509)or 微信(louislvlv)联系我哈,期待您的加入。 https://blog.csdn.net/K346K346/article/details/87280503

Linux使用9个权限位来标识文件权限,三大权限分别是r、w、x(读、写、执行)。除此之外,还有特殊权限SUID,SGID,SBIT。

1.SUID

SUID全称Set User ID,当小写字母s出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。例如查看命令passwd的权限:

ll /usr/bin/passwd
-rwsr-xr-x 1 root root 27832 Jun 10  2014 /usr/bin/passwd

可以看到,在文件拥有者的执行位上出现为s而不是x,所以说passwd这个程序是具有SUID权限的。我们直到在修改用户密码的时候,用的就是passwd这个命令,而我们又知道在linux下面,用户密码是存储在/etc/shadow这个文件里面的。首先查看一下/etc/shadow这个文件的权限:

ll /etc/shadow
---------- 1 root root 853 Jan  4 14:56 /etc/shadow

可见root没有读写权限,但是为什么root实际上可以读取和修改shadow呢?因为Linux的权限管理机制不能够限制神一样的root。从shadow的权限列表可以看出,root组用户和其他用户对shadow没有读写权限的,也就是只有root才能进行强制的读写操作。但是实际上普通用户是可以自行修改自己的密码的,这就是为什么呢?因为/usr/bin/passwd的属主root对其权限是rws,而且其他用户的使用权限为r-x,也就是说,别人在执行passwd时会暂时获得passwd的所有者即root的权限。这就是Linux特有的SUID权限机制。

注意,如果在浏览文件时,发现文件所有者权限的第三位是一个大写的“S”则表明该文件的SUID属性无效,比如将SUID属性给一个没有执行权限的文件。

Linux中特有的SUID权限机制,其过程如下图所示:
在这里插入图片描述

使用SUID需要满足以下几点:
(1)SUID只对二进制文件有效,不能作用于目录或Shell脚本;
(2)调用者对该文件有执行权;
(3)在执行过程中,调用者会暂时获得该文件的所有者权限;
(4)该权限只在程序执行的过程中有效。

2.SGID

SGID全称Set Group ID,当小写字母s出现在文件用户组的执行权限位上,它对普通二进制文件和目录都有效。当它作用于普通文件时,和SUID类似,在执行该文件时,用户将获得该文件所属组的权限。当SGID作用于目录时,当用户对某一目录有写和执行权限时,该用户就可以在该目录下建立文件,如果该目录用SGID修饰,则该用户在这个目录下建立的文件都是属于这个目录所属的组。

注意,如果在浏览文件时,发现用户组权限第三位是一个大写的“S”则表明该文件的SGID属性无效,比如给一个不可执行的文件设置SGID属性。

3.SBIT

SBIT全称Sticky Bit(粘滞位),它出现在其他用户权限的执行位上,只能用来修饰一个目录。当某一个目录拥有SBIT权限时,则任何一个能够在这个目录下建立文件的用户,该用户在这个目录下所建立的文件,只有该用户自己和root可以删除,其他用户均不可以。例如目录/tmp的权限如下:

ll -d /tmp
drwxrwxrwt 14 root root 147456 2月  14 16:01 /tmp

可以看到最后一位为t,这说明目录/tmp就是这种文件。

注意,同样的,如果目录的其他用户的权限执行位是T,则表示SBIT权限无效。发生的情况是权限的执行位不是x。

4.SUID,SGID,SBIT权限的设置

可以通过数字方式来设置这三个特殊权限。三个权限对应的数字分别是:

SUID:4
SGID:2
SBIT:1

假设要为一个文件设置权限”-rwsr-xr-x”时,由于s在所有者权限的执行位上,所以是SUID,因此在原先的755之前加上4即可,即使用chmod 4755 filename来设置。

此外,也可以通过符号法来设置三个特殊权限,其中SUID为u+s,SGID为g+s,SBIT则是o+t,来看看如下的范例:

chmod u=rwxs,go=x test
ll test
-rwsr-sr-t 1 root root 0 Feb 14 15:51 haha

5.小结

Linux特殊权限可总结如下。
在这里插入图片描述
如果本来在x位上设置了x的时候,设置这些位将会显示小写的(s,s,t),否则会显示为大写的(S,S,T),即无效。这三位如果转化为8进制表示的话,分别对应 的是4(SUID),2(SGID),1(sticky bit),0(什么也不是)[2][2]。

6.附:关于目录的rwx的权限的理解

(1)目录读权限位意味着可以列出其中的内容;
(2)目录写权限位意味着可以在该目录中创建、删除、更名或移动文件,前提是目录需要有执行权限;
(3)目录执行权限位则意味着可以搜索、cd进入该目录。因此在创建目录的时候一般都是具有可执行权限。


参考文献

[1]linux中SUID,SGID和SBIT的奇妙用途
[2]linux目录文件权限的区别

猜你喜欢

转载自blog.csdn.net/K346K346/article/details/87280503