前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于SUID、SGID、SBIT,我们必须了解的几个关键点

关于SUID、SGID、SBIT,我们必须了解的几个关键点

作者头像
耕耘实录
发布2018-12-20 14:39:31
8370
发布2018-12-20 14:39:31
举报
文章被收录于专栏:耕耘实录耕耘实录

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

一、概述

在日常运维中,细心的小伙伴可能已经注意到,在某些目录下的文件权限不仅仅有rwx,还有s和t。s权限我们在/bin目录下最为常见,在/tmp目录下,-rwxrwxrwxt这类文件也偶尔能够看到。这到底是怎么回事呢?让我们来深入探讨一下吧!

二、SUID
  • SUID 对二进制文件有效。
  • 执行者对该程序需要具有x可执行权限。
  • 权限仅在程序执行的过程中有效。
  • 执行者将具有程序的所有者权限。
  • 数字设置权限的值为4。

使用举例

代码语言:javascript
复制
[suid@GeekDevOps ~]$ ll /bin/passwd 
-rwsr-xr-x. 1 root root 27832 6月  10 2014 /bin/passwd
[suid@GeekDevOps ~]$ exit
exit
[root@GeekDevOps ~]# chmod u-s /bin/passwd 
[root@GeekDevOps ~]# ll /bin/passwd 
-rwxr-xr-x. 1 root root 27832 6月  10 2014 /bin/passwd
[root@GeekDevOps ~]# su suid
[suid@GeekDevOps root]$ passwd
更改用户 suid 的密码 。
为 suid 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
重新输入新的 密码:
passwd: 鉴定令牌操作错误
[suid@GeekDevOps root]$ exit
exit
[root@GeekDevOps ~]# chmod u+s /bin/passwd 
[root@GeekDevOps ~]# su suid
[suid@GeekDevOps root]$ passwd
更改用户 suid 的密码 。
为 suid 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

在我们去除suid用户的SUID权限时,命令执行错误。去除SUID权限之后我们还能执行passwd命令是因为文件passwd的权限是755。

代码语言:javascript
复制
[root@GeekDevOps ~]# chmod 4700 /bin/passwd
[root@GeekDevOps ~]# ll /bin/passwd 
-rws------. 1 root root 27832 6月  10 2014 /bin/passwd
[root@GeekDevOps ~]# su suid
[suid@GeekDevOps root]$ passwd
bash: /usr/bin/passwd: 权限不够
[root@GeekDevOps ~]# chmod o+x /bin/passwd 
[root@GeekDevOps ~]# ll /bin/passwd 
-rws-----x. 1 root root 27832 6月  10 2014 /bin/passwd
[root@GeekDevOps ~]# su suid
[suid@GeekDevOps root]$ passwd
更改用户 suid 的密码 。
为 suid 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

上面的操作中,如果其他用户没有执行权限,即使文件具备SUID权限,这个文件也是不能被执行的,至少这个文件对其他用户要有x权限才行。

三、SGID
  • SGID对二进制文件和目录有效。
  • 执行者对该程序、目录需要具有x可执行权限。
  • 执行者(包括组员,其他用户)具有程序的组权限。
  • 用户在此目录下的有效组群将会变成目录的组群。
  • 若用户在此目录下有w权限,则使用者所建立的新文件的组群与该目录的组群相同。
  • 数字设置权限的值为2。

使用举例

代码语言:javascript
复制
[root@GeekDevOps ~]# groupadd sgid
[root@GeekDevOps ~]# useradd -g sgid sgid1
[root@GeekDevOps ~]# useradd -g sgid sgid2
[root@GeekDevOps ~]# useradd sgid3
[root@GeekDevOps ~]# mkdir /sgid
[root@GeekDevOps ~]# chgrp sgid /sgid
[root@GeekDevOps ~]# chmod 2775 /sgid/
[root@GeekDevOps ~]# ll / |grep sgid
drwxrwsr-x.   2 root sgid    6 3月  21 12:52 sgid
[root@GeekDevOps ~]# su - sgid1
[sgid1@GeekDevOps ~]$ cd /sgid/
[sgid1@GeekDevOps sgid]$ touch sgid1.txt
[sgid1@GeekDevOps sgid]$ ll
总用量 0
-rw-r--r--. 1 sgid1 sgid 0 3月  21 13:14 sgid1.txt
[sgid3@GeekDevOps sgid]$ exit
[root@GeekDevOps ~]# chmod o+w /sgid
[root@GeekDevOps ~]# su - sgid3
[sgid3@GeekDevOps ~]$ cd /sgid/
[sgid3@GeekDevOps sgid]$ touch GeekDevOps.txt
[sgid3@GeekDevOps sgid]$ ll
总用量 0
-rw-rw-r--. 1 sgid3 sgid 0 3月  21 14:13 GeekDevOps.txt

以上是针对目录sgid权限的举例,接下来我们看一下针对二进制文件的例子。

代码语言:javascript
复制
[root@GeekDevOps sgid]# ll /usr/bin/write 
-rwxr-sr-x. 1 root tty 19536 12月  2 07:28 /usr/bin/write
[root@GeekDevOps ~]# write root pts/1
I am GeekDevOps!

在终端pts/1显示如下:

代码语言:javascript
复制
[root@GeekDevOps ~]# 
Message from root@GeekDevOps on pts/0 at 19:50 ...
I am GeekDevOps!
EOF

去除SGID权限观察:

代码语言:javascript
复制
[root@GeekDevOps ~]# ll /usr/bin/write 
-rwxr-sr-x. 1 root tty 19536 12月  2 07:28 /usr/bin/write
[root@GeekDevOps ~]# chmod g-s /usr/bin/write 
[root@GeekDevOps ~]# ll /usr/bin/write 
-rwxr-xr-x. 1 root tty 19536 12月  2 07:28 /usr/bin/write
[root@GeekDevOps ~]# write root pts/1
write: you have write permission turned off
[root@GeekDevOps ~]# chmod o-x /usr/bin/write 
[root@GeekDevOps ~]# write root pts/1
hello
^C[root@GeekDevOps ~]# chmod g-x /usr/bin/write 
[root@GeekDevOps ~]# ll /usr/bin/write 
-rwxr-Sr--. 1 root tty 19536 12月  2 07:28 /usr/bin/write
[root@GeekDevOps ~]# chmod g+x /usr/bin/write 
[root@GeekDevOps ~]# ll /usr/bin/write 
-rwxr-sr--. 1 root tty 19536 12月  2 07:28 /usr/bin/write

二进制文件write所有者是root,属于tty组,这个命令主要用于向其他用户的tty发送信息。

四、SBIT
  • 针对目录有效。
  • 任何人都可以在此目录拥有写权限,但是不能删除、修改、移动别人拥有的文件。
  • 除了root和目录所有者,其他任何用户均不能删除具有该权限的目录。
  • 数字设置权限的值为1。

使用举例

代码语言:javascript
复制
[root@GeekDevOps ~]# ll / |grep tmp
drwxrwxrwt.   9 root root 4096 3月  22 18:51 tmp
[root@GeekDevOps tmp]# su sbit1
[sbit1@GeekDevOps tmp]$ touch sbit1
[sbit1@GeekDevOps tmp]$ exit
exit
[root@GeekDevOps tmp]# su sbit2
[sbit2@GeekDevOps tmp]$ ll
总用量 0
-rw-rw-r-- 1 sbit1 sbit1 0 3月  22 19:58 sbit1
[sbit2@GeekDevOps tmp]$ rm -rf sbit1 
rm: 无法删除"sbit1": 不允许的操作
五、一个小问题

有时候我们也会在权限列看到“S”或“T”,这是因为无论是SUID、SGID还是SBIT,都需要对应的文件或目录必须在权限列对应位置要有执行权限,如果没有执行权限,则会出现这种情况,表示权限为空。请看下面例子:

代码语言:javascript
复制
[root@GeekDevOps ~]# chmod 7666 test.sh 
[root@GeekDevOps ~]# ll test.sh 
-rwSrwSrwT 1 root root 666 3月  22 19:24 test.sh
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年03月22日,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
  • 二、SUID
  • 三、SGID
  • 四、SBIT
  • 五、一个小问题
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档