6.4.3 文件特殊权限: SUID, SGID, SBIT

简介: 6.4.3 文件特殊权限: SUID, SGID, SBIT

Set UID

当 s 这个标志出现在文件拥有者的 x 权限上时,例如刚刚提到的 /usr/bin/passwd 这个文件的权限状态:“-rwsr-xr-x”,此时就被称为 Set UID,简称为 SUID 的特殊权限。 基本上SUID有这样的限制与功能:


SUID 权限仅对二进制程序(binary program)有效;


执行者对于该程序需要具有 x 的可执行权限;


本权限仅在执行该程序的过程中有效 (run-time);


执行者将具有该程序拥有者 (owner) 的权限。


Linux 系统中,所有帐号的密码都记录在 /etc/shadow 这个文件里面,这个文件的权限为:“---------- 1 root root”,意思是这个文件仅有root可读且仅有root可以强制写入而已。


1.dmtsai 对于 /usr/bin/passwd 这个程序来说是具有 x 权限的,表示 dmtsai 能执行passwd;


2.passwd 的拥有者是 root 这个帐号;


3.dmtsai 执行 passwd 的过程中,会“暂时”获得 root 的权限;


4. /etc/shadow 就可以被 dmtsai 所执行的 passwd 所修改。


cat 不具有 SUID 的权限,所以 dmtsai 执行 “cat /etc/shadow” 时,是不能读取 /etc/shadow 的。


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


Set GID


当 s 标志在文件拥有者的 x 项目为 SUID,那 s 在群组的 x 时则称为 Set GID, SGID。可以用下面的指令来观察到具有 SGID 权限的文件:

与 SUID 不同的是,SGID 可以针对文件或目录来设置!如果是对文件来说, SGID 有如下的功能:


SGID 对二进制程序有用;


程序执行者对于该程序来说,需具备 x 的权限;


执行者在执行的过程中将会获得该程序群组的支持!


举例来说,上面的 /usr/bin/locate 这个程序可以去搜寻 /var/lib/mlocate/mlocate.db 这个文件的内容 (详细说明会在下节讲述), mlocate.db 的权限如下:

与 SUID 非常的类似,若我使用 dmtsai 这个帐号去执行 locate 时,那 dmtsai 将会取得slocate 群组的支持, 因此就能够去读取 mlocate.db。


除了 binary program 之外,事实上 SGID 也能够用在目录上,这也是常见的一种用途。当一个目录设置了SGID的权限后,他将具有如下的功能:


使用者若对于此目录具有 r 与 x 的权限时,该使用者能够进入此目录;


使用者在此目录下的有效群组(effective group)将会变成该目录的群组;


用途:若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同。


Sticky Bit


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


当使用者对于此目录具有 w, x 权限,亦即具有写入的权限时;


当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件


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


举例来说,我们的 /tmp 本身的权限是“drwxrwxrwt”, 在这样的权限内容下,任何人都可以在/tmp 内新增、修改文件,但仅有该文件/目录创建者与 root 能够删除自己的目录或文件。这个特性也是挺重要的。你可以这样做个简单的测试:


1. 以 root 登陆系统,并且进入 /tmp 当中;


2. touch test,并且更改 test 权限成为 777 ;


3. 以一般使用者登陆,并进入 /tmp;


4. 尝试删除 test 这个文件!


SUID/SGID/SBIT 权限设置


相关文章
|
资源调度 前端开发 NoSQL
ruoyi-nbcio版本从RuoYi-Flowable-Plus迁移过程记录
ruoyi-nbcio版本从RuoYi-Flowable-Plus迁移过程记录
239 1
|
Linux
BUU [安洵杯 2019]easy_web
BUU [安洵杯 2019]easy_web
223 0
黑神话:悟空中的音效设计与音乐制作
【8月更文第26天】在《黑神话:悟空》这款游戏中,音效和背景音乐是构建沉浸式游戏体验的重要组成部分。本文将探讨游戏音效和背景音乐的创作过程,以及它们如何增强游戏氛围。
1182 0
|
JavaScript 前端开发 索引
JavaScript中实现页面跳转的七种方法
JavaScript中实现页面跳转的七种方法
1072 0
|
机器学习/深度学习 人工智能 算法
|
网络安全 开发者 Docker
探索 Docker Machine:打造无缝多平台容器部署的利器
探索 Docker Machine:打造无缝多平台容器部署的利器
313 0
|
编解码 前端开发 UED
【专栏:HTML 与 CSS 移动端开发篇】CSS 媒体查询与移动端特定样式
【4月更文挑战第30天】CSS媒体查询在移动端开发中至关重要,它基于设备特性(如屏幕尺寸、分辨率、方向)应用特定样式,实现响应式设计。通过`@media`规则定义条件,如`(max-width: 600px)`,当屏幕宽度小于或等于600px时应用相应样式。常见条件包括屏幕宽度、高度、方向和分辨率。媒体查询可用于响应式布局、导航菜单优化、图片加载及字体调整。在实践中,需注意保持查询简洁,充分测试,渐进增强,并提前规划。掌握媒体查询能提升移动端用户体验,创造更优秀的网页设计。
430 3
|
机器学习/深度学习 数据可视化 算法
umap:一个小巧而强大的Python库,探索高维数据的降维与可视化
umap:一个小巧而强大的Python库,探索高维数据的降维与可视化
641 0
|
存储 编解码 安全
探索FFmpeg复用:深入理解媒体数据的组织与封装(二)
探索FFmpeg复用:深入理解媒体数据的组织与封装
268 0
|
安全 算法 测试技术
什么是灰盒测试?
什么是灰盒测试?
767 1