前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux文件的特殊权限[SUID&SGID&SBIT]

Linux文件的特殊权限[SUID&SGID&SBIT]

作者头像
张旭博客
发布2022-12-29 15:19:08
2.1K0
发布2022-12-29 15:19:08
举报
文章被收录于专栏:zxbkzxbk

在复杂多变的生产环境中,单纯设置文件的 rwx 权限无法满足我们对安全和灵活性的需求,因此便有了 SUID、SGID 与 SBIT 的特殊权限位。这是一种对文件权限进行设置的特殊功能,可以与一般权限同时使用,以弥补一般权限不能实现的功能。

其实,SUID、SGID 与 SBIT 也有对应的数字表示法,分别为 4、2、1。也就是说 777 还不是最大权限,最大权限应该是 7777,其中第 1 个数字代表的是特殊权限位。rwxr-xr-x 即 755,而 SBIT 特殊权限位是 1,则合并后的结果为 1755。 如果权限是“rwsrwSr--”呢?大写 S 表示原先没有执行权限,因此一般权限为 rwxrw-r--,将其转换为数字表示法后结果是 764。带有的 SUID 和 SGID特殊权限的数字法表示是 4 和 2,心算得出结果是 6,合并后的结果为 6764。

权限

数字表示

SBIT

1

SGID

2

SUID

4

SUID

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

例如,所有用户都可以执行 passwd 命令来修改自己的用户密码,而用户密码保存在/etc/shadow 文件中。仔细查看这个文件就会发现它的默认权限是 000,也就是说除了 root 管理员以外,所有用户都没有查看或编辑该文件的权限。但是,在使用 passwd 命令时如果加上 SUID 特殊权限位,就可让普通用户临时获得程序所有者的身份,把变更的密码信息写入到 shadow 文件中。

查看 passwd 命令属性时发现所有者的权限由 rwx 变成了 rws,其中 x 改变成 s 就意味着该文件被赋予了 SUID 权限。如果原先权限位上没有 x 执行权限,那么被赋予特殊权限后将变成大写的 S。

代码语言:javascript
复制
[root@servera ~]# ls -l /etc/shadow
    ----------. 1 root root 1309 Sep 19 15:04 /etc/shadow
[root@servera ~]# ls -l /bin/passwd 
    -rwsr-xr-x. 1 root root 34512 Aug 12  2018 /bin/passwd

一定要小心这个权限,因为一旦某个命令文件被设置了 SUID 权限,就意味着凡是执行该文件的人都可以临时获取到文件所有者所对应的更高权限。因此,千万不要将 SUID 权限设置到 vim、cat、rm 等命令上面!!!

代码语言:javascript
复制
[root@servera ~]# chmod -R u+s /usr/sbin/reboot    #添加SUID权限
[root@servera ~]# chmod -R u-s /usr/sbin/reboot    #删除SUID权限

SGID

SGID 特殊权限有两种应用场景:

  • 当对二进制程序进行设置时,能够让执行者临时获取文件所属组的权限;
  • 当对目录进行设置时,则是让目录内新创建的文件自动继承该目录原有用户组的名称。

即在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)

代码语言:javascript
复制
[root@servera ~]# mkdir /test
[root@servera ~]# ls -l / | grep test
    drwxr-xr-x.   2 root root    6 Sep 24 22:08 test
[root@servera ~]# chmod -R 777 /test    #给所有者,所属组和其他人全部权限
[root@servera ~]# chmod -R g+s /test    #给属组添加继承属组权限
[root@servera ~]# ls -l / | grep test
    drwxrwsrwx.   2 root root    6 Sep 24 22:08 test

切换至普通用户在该目录中创建文件,并查看新创建文件是否会继承新创建的文件所在的目录的所属组名称:

代码语言:javascript
复制
[zhangxu@servera /]$ cd /test/
[zhangxu@servera test]$ touch zhangxumk
[zhangxu@servera test]$ ls -l
    -rw-rw-r--. 1 zhangxu root 0 Sep 24 22:13 zhangxumk

SBIT

SBIT 特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件。

简单说当对某个目录设置了 SBIT 粘滞位权限后,那么该目录中的文件就只能被其所有者执行删除操作了。

与前面所学的 SUID 和 SGID 权限显示方法不同,当目录被设置 SBIT 特殊权限位后,文件的其他用户权限部分的 x 执行权限就会被替换成 t 或者 T—原本有 x 执行权限则会写成 t,原本没有 x 执行权限则会被写成 T。

RHEL 8 系统中的/tmp 作为一个共享文件的目录,默认已经设置了 SBIT 特殊权限位,因此除非是该目录的所有者,否则无法删除这里面的文件。由下可知,/tmp 目录上的 SBIT 权限默认已经存在,这体现为“其他用户”权限字段的权限变为 rwt:

代码语言:javascript
复制
[root@servera ~]# ls -ld /tmp/
    drwxrwxrwt. 20 root root 4096 Sep 24 22:28 /tmp/

在以下情况下任何用户都可创建,删除,修改文件。

代码语言:javascript
复制
[root@servera ~]# mkdir /net
[root@servera ~]# chmod -R 777 /net
[root@servera ~]# ls -ld /net/
    drwxrwxrwx. 2 root root 6 Sep 24 22:34 /net/

添加 o+s 后,切换到普通用户下,删除这个由其他人创建的文件,这时就会发现,即便读、写、执行权限全开,但是由于 SBIT 特殊权限位的缘故,依然无法删除该文件:

代码语言:javascript
复制
[root@servera /]# chmod o+t /net
[root@servera /]# ls -ld /net/
drwxrwxrwt. 2 root root 19 Sep 24 22:40 /net/
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SUID
  • SGID
  • SBIT
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档