专栏首页C/C++基础Linux文件特殊权限SUID、SGID与SBIT

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

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目录文件权限的区别

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Linux 命令(81)—— chmod 命令

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    Dabelv
  • Linux基础知识点

    文件(包括目录)权限分为三类别,从左至右依次是:文件所属主的权限、文件所属所在用户组的权限和其他用户的权限。

    Dabelv
  • Linux命令(50)——date命令

    date命令用于按照指定格式显示当前时间或者指定的时间,也可以设置系统时间。很多Shell脚本里面需要打印不同格式的时间或日期,以及要根据时间和日期执行操作,此...

    Dabelv
  • 【JS】413- JavaScript中的位运算和权限设计

    在讲位运算之前,首先简单看下 JavaScript 中的 Number,下文需要用到。在 JavaScript 里,数字均为基于 IEEE 754 标准的双精度...

    pingan8787
  • JavaScript 中的位运算和权限设计

    在讲位运算之前,首先简单看下 JavaScript 中的 Number,下文需要用到。

    ConardLi
  • Linux文件权限的总结详解

    张琳兮
  • Linux 文件基本属性 转

    在当前目录下使用命令: ls -l,即可列出该目录下的所有文件,其第一列的第一个字母就包含了该文件的文件类型:

    wuweixiang
  • mysql权限与安全

    程序员同行者
  • 记一次诡异的故障排查经历

    管理员通过Jenkins调用“发布程序(代号varian,以下简称varian)”,发布程序会进行一系列的初始化操作,完成后生成Docker镜像上传到Docke...

    37丫37
  • 6.0 运行时权限处理

    佛系编码

扫码关注云+社区

领取腾讯云代金券