Linux 文件的特殊权限—Sticky Bit(SBIT)权限

news2025/2/9 3:59:21

本文为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天就结束了,下周再见,各位🧍‍♂️大佬们~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2266857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PPT画图——如何设置导致图片为600dpi

winr,输入regedit打开注册表 按路径找,HKEY_CURRENT_USER\Software\Microsoft\Office\XX.0\PowerPoint\Options(xx为版本号,16.0 or 15.0或则其他)。名称命名:ExportBitmapResolution 保存即可,…

小米汽车加速出海,官网建设引领海外市场布局!

面对国内市场的饱和态势,中国企业出海步伐纷纷加速,小米也是其中的一员。Canalys数据显示,2024年第三季度,小米以13.8%的市场份额占比,实现了连续17个季度位居全球前三的成绩。 据“36 氪汽车”报道,小米汽…

Cocos Creator 试玩广告开发 第二弹

上一篇的项目是2d的,现在谈谈对于3d试玩项目的一些经历。 相对于2d来说,3d的项目更接近于Unity的开发,但是也有很多不一样的地方,具体的也可以参考Cocos给他官方示例。 Unity 开发者入门 Cocos Creator 快速指南 | Cocos Creator…

CTFshow—爆破

Web21 直接访问页面的话会弹窗需要输入密码验证,抓个包看看,发现是Authorization认证,Authorization请求头用于验证是否有从服务器访问所需数据的权限。 把Authorization后面的数据进行base64解码,就是我们刚刚输入的账号密码。 …

docker-开源nocodb,使用已有数据库

使用已有数据库 创建本地数据库 数据库:nocodb 用户:nocodb 密码:xxxxxx修改docker-compose.yml 默认网关的 IP 地址是 172.17.0.1(适用于 bridge 网络模式)version: "2.1" services:nocodb:environment:…

UGUI简单动画制作

一、最终效果 UI简单动画制作 二、制作过程 1、打开动画制作窗口 2、新建一个动画 3、给一个对象制作动画 4、创建动画控制器进行不同动画变换控制 5、书写脚本,通过按钮来进行不同动画切换 using System.Collections; using System.Collections.Generic; using U…

[SAP ABAP] 程序备份

备份当前程序到本地的方式如下: 1.复制粘贴 Ctrl A 、Ctrl V 2.【实用程序】|【更多实用程序】|【上载/下载】|【下载】 ​ 3.快捷键,支持多种格式导出(.abap .html .pdf 等) 在事务码SE38(ABAP编辑器)屏幕右下角,点击【Options选项】图…

代码随想录Day51 99. 岛屿数量,99. 岛屿数量,100. 岛屿的最大面积。

1.岛屿数量深搜 卡码网题目链接(ACM模式)(opens new window) 题目描述: 给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接…

【漏洞复现】CVE-2022-41678 Arbitrary JMX Service Invocation with Web Interface

漏洞信息 NVD - cve-2022-41678 Apache ActiveMQ prior to 5.16.5, 5.17.3, there is a authenticated RCE exists in the Jolokia /api/jolokia. 组件影响版本安全版本Apache:ActiveMQ< 5.16.6> 5.16.6Apache:ActiveMQ5.17.0 - 5.17.4> 5.17.4&#xff0c;> 6.…

Bash 脚本教程

注&#xff1a;本文为 “Bash 脚本编写” 相关文章合辑。 BASH 脚本编写教程 as good as well于 2017-08-04 22:04:28 发布 这里有个老 American 写的 BASH 脚本编写教程&#xff0c;非常不错&#xff0c;至少没接触过 BASH 的也能看懂&#xff01; 建立一个脚本 Linux 中有…

操作系统(26)数据一致性控制

前言 操作系统数据一致性控制是确保在计算机系统中&#xff0c;数据在不同的操作和处理过程中始终保持正确和完整的一种机制。 一、数据一致性的重要性 在当今数字化的时代&#xff0c;操作系统作为计算机系统的核心&#xff0c;负责管理和协调各种资源&#xff0c;以确保计算机…

48页PPT|2024智慧仓储解决方案解读

本文概述了智慧物流仓储建设方案的行业洞察、业务蓝图及建设方案。首先&#xff0c;从政策层面分析了2012年至2020年间国家发布的促进仓储业、物流业转型升级的政策&#xff0c;这些政策强调了自动化、标准化、信息化水平的提升&#xff0c;以及智能化立体仓库的建设&#xff0…

Windows和Linux安全配置和加固

一.A模块基础设施设置/安全加固 A-1.登录加固 1.密码策略 a.最小密码长度不少于8个字符&#xff0c;将密码长度最小值的属性配置界面截图。 练习用的WindowsServer2008,系统左下角开始 > 管理工具 > 本地安全策略 > 账户策略 > 密码策略 > 密码最小长度&#…

EleutherAI/pythia-70m

EleutherAI/pythia-70m” 是由 EleutherAI 开发的一个小型开源语言模型&#xff0c;它是 Pythia Scaling Suite 系列中参数量最小的模型&#xff0c;拥有大约 7000 万个参数。这个模型主要旨在促进对语言模型可解释性的研究&#xff1b; Pythia Scaling Suite是为促进可解释性…

Linux系统编程——详解页表

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

GTM023 W.H.Greub线性代数经典教材:Linear Algebra

这本教材是我高中时期入门线性代数的主要教材&#xff0c;我的很多基础知识都来源于这本书&#xff0c;如今看回这本书可以说满满的回忆。这本书可以说&#xff0c;是我读过的内容最为全面且完备的线性代数教材了。而且它的语言风格非常的代数化&#xff0c;没有什么直观可言&a…

多视图 (Multi-view) 与多模态 (Multi-modal)

多视图 (Multi-view) 与多模态 (Multi-modal) 是两种不同的数据处理方式&#xff0c;它们在机器学习和数据分析中有着重要的应用。尽管这两者有一些相似之处&#xff0c;但它们关注的角度和处理方法有所不同。 多视图 (Multi-view) 定义&#xff1a;多视图指的是同一数据对象…

layui动态拼接生成下拉框验证必填项失效问题

利用 jQuery 动态拼接下拉框时&#xff0c;lay-verify"required" 失效了&#xff0c;有以下几种原因。 1. <form></form>标签 加入 layui 类&#xff0c;class"layui-form" 。提交按钮上加自动提交&#xff0c;lay-submit ""; 。需…

机器学习基础算法 (二)-逻辑回归

python 环境的配置参考 从零开始&#xff1a;Python 环境搭建与工具配置 逻辑回归是一种用于解决二分类问题的机器学习算法&#xff0c;它可以预测输入数据属于某个类别的概率。本文将详细介绍逻辑回归的原理、Python 实现、模型评估和调优&#xff0c;并结合垃圾邮件分类案例进…

『大模型笔记』评估大型语言模型的指标:ELO评分,BLEU,困惑度和交叉熵介绍以及举例解释

评估大型语言模型的指标:ELO评分,BLEU,困惑度和交叉熵介绍以及举例解释 文章目录 一. ELO Rating大模型的elo得分如何理解1. Elo评分的基本原理2. 示例说明3. 大模型中的Elo得分总结3个模型之间如何比较计算,给出示例进行解释1. 基本原理扩展到三方2. 示例计算第一场: A A…