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

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

1.SUID

SUID(Set User ID)使用小写字母 s 表示,出现在属主可执行权限位,具有 SUID 权限的文件会在其执行时,使调用者的有效身份临时变为该文件的拥有者,用于临时提升权限,使调用者暂时获得该文件拥有者的权限。

例如命令 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)调用者对该文件有执行权;
(2)在执行过程中,调用者会暂时获得该文件的所有者权限;
(3)该权限只在程序执行的过程中有效。

2.SGID

SGID(Set Group ID)与 SUID类似,使用小写字母 s 表示,出现在用户组可执行权限位,具有 SETGID 权限的文件会在其执行时,使调用者的有效用户组临时变为该文件属主的用户组,用于临时提升权限,使调用者暂时获得该文件所属用户组的权限。

当 SGID 作用于可执行文件时,在执行该文件时,用户将获得该文件所属组的权限。

当 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 具有 SBIT 权限。

注意,同样的,如果目录的其他用户的权限执行位是 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+s test
ll test
-rws--x--x 1 root root 0 Oct 30 16:10 test

5.小结

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

SUID、SGID、SBIT 权限都是为了实现特殊功能而设计的,其目的是弥补 ugo 权限无法实现的一些使用场景。

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

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


参考文献

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值