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

文章详细解释了Linux文件系统中的SUID、SGID和StickyBit特殊权限。SUID允许执行者在运行时获得文件所有者的权限,如passwd命令修改密码。SGID可让用户在执行程序时获得文件所属组的权限,常用于目录以保持新文件的组所有权。StickyBit则限制用户只能删除自己在特定目录中创建的文件。这些权限可通过数字或符号形式设置,并影响着系统安全和用户交互。
摘要由CSDN通过智能技术生成

83fd6ea5d5ad487890237a8753c42648.png

我们从上图中可以发现除了rwx这三个权限以外,还有s跟t这两个权限,这两个权限的意义与系统的账号和系统的进程管理较为相关 

Set UID

当s这个标志出现在文件拥有者的x权限上时,就被称为Set UID 简称SUID的特殊权限

基本上SUID有这样的限制与功能:

  • SUID权限仅对二进制(binary program)有效
  • 执行者对于该程序需要具有x的可执行权限
  • 本权限仅在执行该程序时的过程中有效(run-time)
  • 执行者将具有该程序拥有者(owner)的权限

举例说明理解:

Linux系统中,所有账号的密码都记录在/etc/shadow这个文件里面,这个文件的权限为【---------- 1 root root】,此权限的意思为这个文件仅有root可读且仅有root可以强制写入,但是这个文件仅有root用户可以修改,那为什么一般账号也能只用passwd命令来修改自身的密码呢?

这就是SUID的功能,通过上面的功能说明,我们可以理解成:

  • 一般账号对于/usr/bin/passwd这个程序是具有x权限的,表示一般账号能执行passwd
  • passwd的拥有者是root
  • 一般账号执行passwd的过程中,会暂时获得root的权限
  • /etc/shadow就可以被一般账号所执行的passwd所修改

如果我们使用一般账号利用cat去读取/etc/shadow时,它是不能读取的,因为cat不具备SUID的权限

SUID仅可用在二进制程序上,不能够用于shell脚本上面。这是因为shell脚本只是将很多的二进制文件调用执行而已。所以SUID的权限部分,还是要看shell脚本调用进来的程序的设置,而不是shell脚本本身。SUID对于目录也是无效的

Set GID

当s标志在用户组的x时,则称为Set GID(SGID)

0e50e72351144943aa2981ddde09b07f.png

 与SUID不同的是,SGID可以针对文件或目录来设置

对于文件来说,SGID有如下功能:

  • SGID对二进制程序有用
  • 程序执行者对于该程序来说需要具备x权限
  • 执行者在执行的过程中将会获得该程序用户组的支持

举例说明理解:
上图的/usr/bin/locate程序可以去查找/var/lib/mlocate/mlocate.db这个文件的内容

40a9abe662fd4242bb47570b3ac2fe92.png

与SUID类似,当我们使用一般账号去执行locate时,那一般账号就会取得slocate用户组的支持,因此就能去读取mlocate.db

除了二进制程序外,事实上SGID也能够用于目录中,这是非常常见的一种用途,当目录设置了SGID权限后,它会有如下功能:

  • 用户若对于此目录具有r与x权限时,则该用户能够进入此目录
  • 用户在此目录下的有效用户组(effective group)将会变成该目录的用户组
  • 用途:若用户在此目录下具有w权限(可以新建文件),则用户所建立的新文件的用户组与此目录的用户组是相同的

Sticky Bit

Sticky Bit目前只针对目录有效,对于文件已经没有效果了,它对于目录的作用是:

  • 当用户对于此目录具有w、x权限,即具有写入的权限
  • 当用户在该目录下建立文件或目录时,仅有自己与root才有权力删除该文件

换句话说,当甲这个用户对于A目录具有用户组或其他人的身份,并且拥有该目录的w权限,这表示甲用户对该目录内任何人建立的目录或文件均可进行删除、改名、移动等操作。不过,如果将A目录加上了SBIT的权限选项时,则甲只能够针对自己建立的文件或目录进行删除、更名、移动等操作,而无法删除其他人的文件

举例说明理解:

我们可以查看一下我们的/tmp权限,它的权限是777

d7c69894c5eb47ae907819d767dfb100.png

在这样的权限内容下,任何人都可以在此目录下新增、修改文件,但仅有该文件/目录的建立者与root能够删除自己的文件或目录

SUID/SGID/SBIT 权限设置

我们明白权限是可以使用数字形式来表示 即权限为三个数字的组合,当我们要配置SUID、SGID、SBIT权限时,可以在这三个数字前再添加一个数字,使之成为四个数字的组合

  • SUID:4
  • SGID:2
  • SBIT:1

举例说明理解:

当我们想要添加一个SUID时,权限设置为【-rwsr-xr-x】时,需要在原先755的组合前中再加入一个4,权限变更为4755,也就是使用【chmod 4755 filename】来设置

99fbabd48238492db97b3c4729c49e08.png

设置SUID与SGID:

1673544d18294fbe9f45543dc766c5f7.png 

设置SBIT:

11c8a02cd27d42b8ac20ccb9a51566dd.png

设置SUID、SGID、SBIT:
ef1bfdffa601497e870e30461d53b8d7.png

需要注意的是大写的S与大写的T,这代表的是空的SUID与SGID权限

3ee07ee6855c4a649a7488257a24bc0b.png

设置7666权限时,我们可以发现所有人都没有x这个权限了,所以S与T都代表了空这个意思

除了数字形式,我们还可以使用符号法来处理:

  • SUID为u+s
  • SGID为g+s
  • SBIT为0+t

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魏大橙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值