Linux 文件的特殊权限—Sticky Bit(SBIT)权限
本文为Ubuntu Linux操作系统- 第十九期~~
其他特殊权限: 【SUID 权限】和【SGID 权限】
更多Linux 相关内容请点击👉【Linux专栏】~
主页:【练小杰的CSDN】

文章目录
- Sticky(SBIT)权限基本概念
- Sticky Bit 的表示方式
- 举例
- 设置和取消 SBIT 权限
- 设置 SBIT 权限
- 取消 SBIT 权限
- 有关 SBIT 权限的实例
- 运用场景
- 第一步:在`/`目录下创建一个目录`share_dir`做为测试
- 第二步:设置`share_dir`的`Sticky`位
- ⚠️ SBIT 权限注意事项
- 特殊权限SUID,SGID,SBIT归纳
- 数字设置规则总结
- 举例
- 综合案例
- 建立组project和用户userA,userB
- 建立公用的工作目录为`/user/com_project`并设置权限为:`drwx rwx — root project`
- 在目录`/user/com_project`下分别以userA和userB的身份创建两个空文件fileA和fileB
- 再将`SGID`权限设置到目录/user/com_project中并观察结果
- ⚠️注意

Sticky(SBIT)权限基本概念
-
SBIT只对目录有效,对文件却是无效的,它的作用就是防止别人删除对方的资料。
-
当用户在该目录下创建新文件或目录时,只有以下的用户可以删除或重命名该目录中的文件:
- 文件的所有者
- 目录的所有者
- 超级用户(root)
在
ContOS Linux系统中,最具有代表性的就是/tmp目录。任何人都可以在/tmp内增加、修改文件(“drwxrwxrwt. 25 root root 4096 Jul 1 06:58 tmp”),但仅有该文件/目录建立者与 root能够删除自己的目录或文件。
Sticky Bit 的表示方式
- Sticky Bit 通常用字母
t或T表示:
小写
t:表示目录的其他人(other)执行权限位被设置,并且 Sticky Bit 被设置。
大写T:表示目录的其他人执行权限位未被设置,但 Sticky Bit 被设置。
举例
drwxrwxrwt # t 表示 Sticky Bit 被设置。drwxrwxrwT#T 表示 Sticky Bit 被设置,但其他人没有执行权限。
设置和取消 SBIT 权限
- 使用
chmod命令的符号模式 或八进制模式来设置和取消Sticky Bit权限
设置 SBIT 权限
- 字符设置法
chmod +t 目录名
- 八进制设置模式
Sticky Bit对应的八进制值是1,通常放在权限的最前面
chmod 1777 目录名
上面的 1 表示 Sticky Bit,777 是目录的常规权限。
取消 SBIT 权限
- 字符模式
chmod -t 目录名
- 八进制模式
chmod 0777 目录名
有关 SBIT 权限的实例
运用场景
共享目录里,只能删除自己创建或上传的文件,除了root其他人不能删除。
第一步:在/目录下创建一个目录share_dir做为测试
将
share_dir设置777权限。创建文件file_a,将file_a的所属用户以及所属组都改成myuser1
然后进入myuser2用户,测试是否可以删除file_a文件
- 创建目录
share_dir并设置777权限
[root@openstack01 /]# mkdir share_dir
[root@openstack01 /]# chmod 777 share_dir
- 创建文件
file_a并把该文件的所属用户以及所属组都改成myuser1
[root@openstack01 /]# touch file_a
[root@openstack01 /]#chown myuser1:myuser1 file_a
- 切换普通用户myuser2,并尝试删除
file_a文件
[root@openstack01 share_dir]# su myuser2
[myuser2@openstack01 share_dir]$ rm –r f file_a
这时,我们发现,用户myuser2可以删除在公共目录share_dir里其他用户的文件!!这是有很大安全隐患的,不应该让其他用户删除你的文件!!
第二步:设置share_dir的Sticky位
创建文件
file_b,将file_b的所属用户以及所属组都改成myuser1
然后进入myuser2用户,测试是否可以删除file_b
- 设置目录
share_dir的SBIT权限
[root@openstack01 /]# chmod o+t share_dir | ll
drwxrwxrwt. 2 root root 20 Jun 5 22:13 share_dir
- 创建文件
file_b,并将该文件的所属用户以及所属组都改成myuser1
[root@openstack01 share_dir]# touch file_b
[root@openstack01 /]#chown myuser1:myuser1 file_b
- 切换普通用户myuser2,并尝试删除
file_b文件
[root@openstack01 share_dir]# su myuser2
[myuser2@openstack01 share_dir]$ rm -rf file_b
rm: cannot remove ‘file_b’: Operation not permitted
可以看到,设置共享目录share_dir的SBIT权限后,只能删除自己创建或上传的文件,除了
root其他人不能删除
⚠️ SBIT 权限注意事项
-
安全性:
虽然 Sticky Bit 可以防止文件被删除,但它不防止文件被读取或修改。要进一步保护文件,需要设置适当的文件权限。 -
兼容性:
大多数现代Linux系统都支持 Sticky Bit,但在某些特殊环境下可能需要额外配置。
特殊权限SUID,SGID,SBIT归纳
数字设置规则总结
与设置文件或目录的rwx的数字法规则421类似,
suid,sgid,sbit的数字设置法也是421规则:
SUID->4
SGID->2
SBIT->1
举例
假设一个文件的基本权限是“
-rwxr-xr-x”,若将其权限修改为“-rwsr-xr-x”,因为s在用户权限中,就是要设置这个文件的SUID,所以原先的基本权限755前面还要加上4,也就是4755
- 执行以下命令:
chmod 4755 filename
若是想把该文件既要设置SUID又要设置SGID,则两个权限相加变成
4+2=6
- 使用以下命令就可以了
chmod 6755 filename
-rwSrwSrwT 1 root root 0 Feb 6 21:49 filename
可以发现,还有可能会出现大写S和大写T的情况。
这是因为s和t是替代x这个权限的,但是,如果它本身没有x这个权限,修改为s或t时就会变成大写的S或大写的T。
综合案例
- 实现需求:进行项目开发时,往往需要多人合作在同一环境下进行工作,要求能互相访问和编辑彼此的文件,那么项目组所有成员就构成一个组(group)
下面我们以项目组成员由A与B两个用户组成的情况说明:
假设系统管理员将他们放到project组,同时给他们分配了一个公用的工作目录为/user/com_project,并设置该工作目录的权限为 :drwx rwx — root project
说句话来说,就是除了root用户和project组内用户,其它用户是不能访问这个目录的。
建立组project和用户userA,userB
[root@localhost /]# groupadd project
[root@localhost /]# useradd -G project userA
[root@localhost /]# useradd -G project userB
[root@localhost /]# id userA
uid=1003(userA) gid=1004(userA) groups=1004(userA),1003(project)
[root@localhost /]# id userB
uid=1004(userB) gid=1005(userB) groups=1005(userB),1003(project
建立公用的工作目录为/user/com_project并设置权限为:drwx rwx — root project
[root@localhost /]# mkdir -p user/com_project
drwxr-xr-x. 2 root root 6 Jul 2 20:13 com_project
[root@localhost user]# chgrp project com_project
[root@localhost user]# chmod 770 com_project | ls -l
drwxrwx---. 2 root project 6 Jul 2 20:13 com_project
可以看到,修改后的
com_project权限为drwxrwx---
在目录/user/com_project下分别以userA和userB的身份创建两个空文件fileA和fileB
[root@localhost user]# su userA
[userA@localhost user]$ cd com_project
[userA@localhost com_project]$ touch fileA
[userA@localhost com_project]$ exit
[root@localhost user]# su userB
[userB@localhost user]$ cd com_project
[userB@localhost com_project]$ touch fileB
[userB@localhost com_project]$ exit
分别查看文件fileA和fileB的基本权限
-rw-rw-r--. 1 root userA 0 Dec 27 20:31 fileA
-rw-rw-r--. 1 root userB 0 Dec 27 20:32 fileB
- 从上面可以发现,用户userA和userB虽然在同一组里,但他们创建的文件所属的组并不是project,文件fileA所属组为userA,而fileB所属组为userB。
- 这样,userA和userB相对于对方还是属其它用户(other),并没有因为是同一个项目组而改变文件间的操作权限!!
- 同时,两个文件的权限与所在的目录
/user/com_project也没什么联系,实现不了同一个项目组对同组文件的权限设置的初衷。- 所以单纯使用基本权限
rwx对于项目的管理还是不够的。
再将SGID权限设置到目录/user/com_project中并观察结果
[root@localhost /]# chmod g+s /user/com_project
drwxrws---. 2 root project 32 Dec 27 21:32 com_project
- 目录
/user/com_project下分别以userA和userB的身份各自创建一个空文件fileA、fileB以及一个目录dirA和dirB,比较设置SGID后的基本权限有什么不同
[root@localhost com_project]# su userA
[userA@localhost com_project]$ touch fileA
[userA@localhost com_project]$ mkdir dirA
[userA@localhost com_project]$ exit
[root@localhost com_project]# su userB
[userB@localhost com_project]$ touch fileB
[userB@localhost com_project]$ mkdir dirB
[userB@localhost com_project]$ exit
- 比较设置完目录
/user/com_project的SGID前后创建的文件权限
目录dirA和dirB的权限
drwxrwsr-x. 2 userA project 6 Dec 27 22:13 dirA
drwxrwsr-x. 2 userB project 6 Dec 27 22:14 dirB
文件fileA、fileB的权限比较
#fileA设置SGID权限前
-rw-rw-r--. 1 root userA 0 Dec 27 20:31 fileA
#fileA设置权限之后
-rw-rw-r--. 1 root project 0 Dec 27 22:13 fileA
#fileB设置SGID权限前
-rw-rw-r--. 1 root userB 0 Dec 27 20:32 fileB
#fileB设置权限之后
-rw-rw-r--. 1 root project 0 Dec 27 22:14 fileB
这时,我们可以看到当目录/user/com_project拥有SGID权限后,在这个目录下建立的文件所属的组都会强制变为
project。 而且,所创建的子目录会继承它的SGID权限。
同一项目组的成员就能够互相访问和编辑彼此的文件了,从而达到协同工作的目的!!!
⚠️注意
- 这时目录
/user/com_project的基本权限为:drwxrws--- - 除了root用户和project组成员外,其它用户是无法访问目录
/user/com_project下的文件的!!
至此,Linux系统的三种特殊文件权限已经讲完了😆
如果还想了解更多,查看主页【练小杰的CSDN】!!!
2024年还有4天就结束了,下周再见,各位🧍♂️大佬们~~
相关文章:
Linux 文件的特殊权限—Sticky Bit(SBIT)权限
本文为Ubuntu Linux操作系统- 第十九期~~ 其他特殊权限: 【SUID 权限】和【SGID 权限】 更多Linux 相关内容请点击👉【Linux专栏】~ 主页:【练小杰的CSDN】 文章目录 Sticky(SBIT)权限基本概念Sticky Bit 的表示方式举例 设置和取…...
MIPI D-PHY/C-PHY/M-PHY 高速串行接口标准
MIPI D-PHY、C-PHY和M-PHY都是MIPI联盟制定的高速串行接口标准。它们都具有低功耗、高速传输速率等特点,但各有侧重: ➢MIPI D-PHY:适用于手机与其他设备之间的数据传输。 ➢MIPI C-PHY:专为手机摄像头而设计。 ➢MIPI M-PHY&am…...
USB免驱IC读写器QT小程序开发
USB免驱全协议IC卡读写器QT小程序开发,读取15693卡。 QT小程序UI开发界面: QT程序代码mainWindow.cpp代码如下: MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this); }MainWind…...
OSCP靶场训练冒险之kioprix4:shell逃逸以及利用数据库提权
声明! 学习资源来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...
NIPS2014 | GAN: 生成对抗网络
Generative Adversarial Nets 摘要-Abstract引言-Introduction相关工作-Related Work对抗网络-Adversarial Nets理论结果-Theoretical Results实验-Experiments优势和不足-Advantages and disadvantages缺点优点 结论及未来工作-Conclusions and future work研究总结未来研究方…...
Postman接口测试01|接口测试基础概念、http协议、RESTful风格、接口文档
目录 一、接口测试基础概念 1、什么是接口 2、接口的类型 3、什么是接口测试 4、为什么要做接口测试 5、接口测试的实现方式 6、什么是自动化接口测试? 二、接口返回的数据格式 1、三种格式 2、Json 三、接口协议 1、webservice协议 2、dubbo协议 3、…...
Linux系统编程——详解页表
目录 一、前言 二、深入理解页表 三、页表的实际组成 四、总结: 一、前言 页表是我们之前在讲到程序地址空间的时候说到的,它是物理内存到进程程序地址空间的一个桥梁,通过它物理内存的数据和代码才能映射到进程的程序地址空间中ÿ…...
SpringBoot + HttpSession 自定义生成sessionId
SpringBoot HttpSession 自定义生成sessionId 业务场景实现方案 业务场景 最近在做用户登录过程中,由于默认ID是通过UUID创建的,缺乏足够的安全性,决定要自定义生成 sessionId。 实现方案 正常的获取session方法如下: HttpSe…...
循环对称复高斯分布(Circularly Symmetric Complex Gaussian Distribution)
一、引言 循环对称复高斯分布(Circularly Symmetric Complex Gaussian Distribution,简称CSCG)在无线通信、信号处理等领域具有广泛的应用。作为一种特殊的复高斯分布,CSCG具有独特的性质,如循环对称性、高斯性等&…...
xinput1_3.dll放在哪里?当xinput1_3.dll丢失时的应对策略:详细解决方法汇总
在计算机系统的运行过程中,我们偶尔会遇到一些令人困扰的问题,其中xinput1_3.dll文件丢失就是较为常见的一种情况。这个看似不起眼的动态链接库文件,实则在许多软件和游戏的正常运行中发挥着至关重要的作用。一旦它丢失,可能会导致…...
基于STM32的智能家居环境监控系统设计
目录 引言系统设计 硬件设计软件设计系统功能模块 环境监控模块控制模块显示模块系统实现 硬件实现软件实现系统调试与优化结论与展望 1. 引言 随着智能家居技术的发展,环境监控系统已经成为家居管理的重要组成部分。智能家居环境监控系统通过实时监测室内温度、湿…...
Vscode + gdbserver远程调试开发板指南:
本章目录 步骤环境准备网络配置vscode配置步骤 (全图示例)开发板配置开始调试注意: 每次断开之后,开发板都需要重新启动gdbserver才可调试。 参考链接: 步骤 环境准备 将交叉编译链路径加入$PATH变量:确保系统能够找到所需的工具。 export PATH$PATH:/p…...
大表:适用于结构化数据的分布式存储系统
大家觉得有意义和帮助记得及时关注和点赞!!! 译者序摘要1 引言2 数据模型 2.1 行(Row)2.2 Column Families(列族) 2.2.1 设计2.2.2 column key 的格式:family:qualifier2.2.3 访问控制和磁盘/内存记账(acco…...
深入解析MVCC中Undo Log版本底层存储读取逻辑
一、引言 多版本并发控制(MVCC,Multi-Version Concurrency Control)是一种广泛应用于关系数据库管理系统中的并发控制技术。它通过保存数据的历史版本,使得在事务并发执行时,每个事务都能看到数据的一致性视图。在MVC…...
游戏引擎学习第64天
代码改的我看的比较懵 原视频可以去这个网站去看 https://guide.handmadehero.org/ 回顾我们在模拟区域方面的进展 在目前的情况下,如果有很多任务需要完成,可以进行分解。在昨天收到的改变中,决定将任务分解成模拟区域。模拟区域是可以随时…...
Effective C++ 条款33:避免遮掩继承而来的名称
文章目录 条款33:避免遮掩继承而来的名称为什么避免遮掩?如何避免遮掩?1. 使用 using 声明式2. 使用转交函数 (Forwarding Functions) 总结 条款33:避免遮掩继承而来的名称 在 C 中,派生类(derived class&…...
UEFI Spec 学习笔记---4 - EFI System Table(1)
4 - EFI System Table 本章节主要介绍的是 UEFI Image 的 Entry point(在 UEFI 固件执行的时候,都是直接调用入口函数并且执行从而调用其他的 driver)。 UEFI Image 主要是有三类:UEFI boot service driver、UEFI runtime drive…...
【微信小程序】3|首页搜索框 | 我的咖啡店-综合实训
首页-搜索框-跳转 引言 在微信小程序中,首页的搜索框是用户交互的重要入口。本文将通过“我的咖啡店”小程序的首页搜索框实现,详细介绍如何在微信小程序中创建和处理搜索框的交互。 1. 搜索函数实现 onClickInput函数在用户点击搜索框时触发&#x…...
独一无二,万字详谈——Linux之文件管理
Linux文件部分的学习,有这一篇的博客足矣! 目录 一、文件的命名规则 1、可以使用哪些字符? 2、文件名的长度 3、Linux文件名的大小写 4、Linux文件扩展名 二、文件管理命令 1、目录的创建/删除 (1)、目录的创建 ① mkdir…...
React:前端开发领域的璀璨之星
亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、Java 与 Python 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在未来…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
