当前位置: 首页 > news >正文

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 通常用字母 tT 表示:

小写 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_dirSticky

创建文件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的情况。
这是因为st是替代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系统编程——详解页表

目录 一、前言 二、深入理解页表 三、页表的实际组成 四、总结: 一、前言 页表是我们之前在讲到程序地址空间的时候说到的,它是物理内存到进程程序地址空间的一个桥梁,通过它物理内存的数据和代码才能映射到进程的程序地址空间中&#xff…...

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 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在未来…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...