【Linux系统编程】粘滞位详解

news2024/11/18 23:33:45

文章目录

  • 1. 背景
  • 2. 准备
    • 问题引出
  • 3. 粘滞位
  • 4. 思考
    • 粘滞位的存在是否是必要的
    • 谁可以删除

上一篇文章我们学习了Linux权限相关的内容,这篇文章,我们再来学习一个知识点——粘滞位。

1. 背景

那为了让大家更容易理解粘滞位的概念,首先我们要来了解一点背景知识:

就是我们在使用Linux的时候呢,有时候就可能需要一些共享目录,即被所有普通用户共享,用来保存普通用户产生的临时数据。

那为什么可能会需要共享目录呢?我们来简单分析一下:

我们知道所有普通用户的家目录都是在home目录下的
在这里插入图片描述
那这个home目录其实是属于root的。
那我们创建的所有普通用户,它们的家目录都是在home下面的
在这里插入图片描述
那大家看,我目前登录的是yhq,这里的yhq就是我的家目录,我未来创建的所有文件都是在我的家目录里面的,而且只有我对我的家目录是有rwx权限的,其它的任何一个普通用户对我的家目录都是没有任何权限的。
那假设现在我这里有一份数据,是学生的考试成绩,那现在ymm这个用户也想来看一下这份数据。
那不好意思,ymm这个用户没有权限,因为她是other,根本无法进入我的目录,更别谈看我家目录里面的文件了。
但是未来呢,我们可能有这样的需求,就是让多个用户去交互它们的数据。
那因此,我们就可能需要一些共享目录,把需要共享的数据放在共享目录下,所有的用户就都可以查看了。
那在Linux中,这个共享目录一般是由root提供的,只要root把权限放开,那其他普通用户就可以以other的身份去访问这个目录了。

2. 准备

那接着我们来做一些准备工作:

在这里插入图片描述
现在我进入到根目录下,我想在这里创建一个共享目录
在这里插入图片描述
但我们发现创建不了,因为根目录是root的,我们是other,而且没有w权限,所以无法在根目录下再去创建目录。

创建不了怎么办呢?

那我们可以切换成root去创建,当然后面如果sudo能用的话我们可以直接用sudo
在这里插入图片描述
此时我就创建好了一个公共目录public。
我们看到它的一个默认权限是755,当然这和root下的umask肯定是有关系的。

那既然要创建的是公共目录,我们可以把它所有的权限都放开

在这里插入图片描述

那么此时所有人就都可以访问它:

我(yhq)也可以进入该目录去创建文件
在这里插入图片描述
那我root也来创建几个文件
在这里插入图片描述
当然其它普通用户也是可以的
在这里插入图片描述
那此时我(ymm)来给我创建的文件里面输出一些内容
在这里插入图片描述

那在这个共享目录里面,不同的用户也就可以实现数据的共享了:

比如我(yhq)这里有一个文件,现在ymm用户想看,那我就可以把该文件拷贝到public这个目录下,然后给other一个读的权限,那ymm就可以查看了。

问题引出

那我们来看这样一种场景

我现在是yhq
在这里插入图片描述
那我先想看一下ymm的ymm1这个文件里面的内容,这当然是可以的,因为在这个文件在共享目录public里面,并且other有r读的权限
在这里插入图片描述
那我想向ymm的文件里写内容可以吗?
在这里插入图片描述
🆗,不行,因为人家没有对other开放写的权限。
所以我们即使处在共享目录下,也还是会受到权限的约束,这也很正常,因为我和ymm都是普通用户。

那然后呢,假设有一天,我和ymm吵架了,ymm生气了,说:以后不让我看ymm1这个文件了,就把权限改成这样了
在这里插入图片描述
现在只有她自己对该文件有rw权限,其它任何普通用户都没权限了。
所以我现在看也看不了了:
在这里插入图片描述
那她这样做我很伤心,我也生气了,我就想,既然你不让我看,也不让我写。
那我想把你删掉可以吗?

在这里插入图片描述
你不让我看,那你也别看了,我直接把文件删除掉。

那大家想一下,我为什么可以把ymm的文件删除掉?

🆗,这是不是上一篇文章讲到的内容啊,我们学了目录的权限,只要我对一个目录有写权限,我就可以在这个目录里面创建和删除文件。
所以,我对public这个目录有写权限,而你的文件放在这个目录下。
因此即使我看不了也写不了你的文件,但是我可以把它删除掉。

所以,在共享目录里面,文件被所有用户共享的时候,会受到权限约束,但是拦不住别人删你的文件!!!

那大家想,这样合理吗?
显然是不合理的,那为了解决这个不科学的问题,Linux就引入了粘滞位的概念。(因此我们也应该知道,粘滞位只能给目录添加

3. 粘滞位

那为了解决上述问题,就引入了粘滞位的概念,通过给目录添加粘滞位就可以就解决这个问题。

那给哪个目录添加呢?
当然是给共享目录添加啊!

那具体怎么做呢?
很简单:chmod +t 目录名

演示一下:

添加之前看好了是这样的:
在这里插入图片描述
那我们现在就来给public这个目录添加粘滞位。
当然添加粘滞位也需要root,或者使用sudo:

在这里插入图片描述
添加好了,大家看出来哪里变了吗?
最后一位由x变成了t,而t就表示该目录被添加上了粘滞位。

那这样就可以解决上述的问题吗?我们还能在共享目录里面胡乱删除别人的文件吗?

来试一下:
在这里插入图片描述
此时我又变成了yhq,现在我又想删ymm的文件,还可以吗?
在这里插入图片描述
🆗,现在就不可以删除别人的文件了。

这就是粘滞位的作用。

4. 思考

那大家思考一个问题,上面没有添加粘滞位的时候,为什么拦不住可以删除别人的文件?

其实原因我们上面已经提到了,因为我对public这个目录有w权限,所以我就可以在里面创建和删除文件。

粘滞位的存在是否是必要的

那这样的话,还需要什么粘滞位啊,我直接把public的对other的w权限去掉,不就可以阻止有些用户删除别人的文件了吗?

这样确实可以,但是
你把w权限去掉,也阻止了所有普通用户在该目录下创建文件的权限。
而这个目录作为共享目录,本身就是大家用来去共享自己创建的文件里面的数据的。
那你现在连创建文件都不可以了。
那这个共享目录还有什么作用!!!

所以,共享目录对于other,必须有w权限,因此,解决这个问题,只能用粘滞位。

只有加上了w权限,所有的用户才可以在里面创建文件,但是这样有会出现可以随意删除别人文件的现象。
因此呢,Linux就引入了粘滞位权限去解决这个问题。

谁可以删除

那我们设置了粘滞位之后呢,就可以阻止在共享目录中的一些普通用户去删除其它用户的文件。那这样普通用户删不了,谁可以删呢?

当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由

  1. 超级管理员(root)删除
  2. 该目录的所有者(一般就是root)删除
  3. 该文件的所有者删除

在这里插入图片描述

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

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

相关文章

【国产虚拟仪器】基于ZYNQ7045+V7 FPGA的多通道数据同步采集设计方案(一)

多通道数据采集设备在当前信息数字化的时代应用广泛,各种被测量的信息 如光线、温度、压力、湿度、位置等,都需要经过多通道信号采集系统的采样和 处理,才能被我们进一步分析利用[37]。在一些对采集速率要求较高的军事、航天、 航空、工业制造…

uniapp radio如何实现取消选中

uniapp 内置radio组件明确表示&#xff0c;不能取消选中&#xff0c;那如果要实现取消选中呢&#xff1f; 只要在外层加上label或者其他标签包裹&#xff0c;或者直接加入click事件然后加入事件控制radio的值改变即可 <label class"radio" click"changeAll&…

记录--Threejs-着色器实现一个水波纹

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 hree.js 是一个基于 WebGL 的 JavaScript 3D 库&#xff0c;用于创建和渲染 3D 图形场景。 一、 图像渲染过程 1、webGL webGL: WebGL 是一种基于 JavaScript API 的图形库&#xff0c;它允许在浏览器…

【STM32智能车】电机控制

【STM32智能车】电机控制 PWMPWM基本用法&#xff1a; 电机驱动基本控制基本状态 欢迎收看由咸鱼菌工作室出品的STM32系列教程。本篇内容主要电机控制 PWM 我们要控制电机&#xff0c;就要先了解一下PWM。 PWM(Pulse Width Modulation)控制——脉冲宽度调制技术&#xff0c;通…

全开源的 agv 小车

最近github 有 一个开源的stm32 大荷载小车&#xff0c;从pcb 到代码到cad 文件全部开源 代码在 git 小车的实物图 小车的cad 模型 小车的 abaqus 力学分析模型 pcb 图 控制板接线图 全开源小车 代码在 git

港科夜闻|香港科大(广州)与特斯联共建研究中心,打造国际领先的创新联合体...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大(广州)与特斯联共建研究中心&#xff0c;打造国际领先的创新联合体。6月27日&#xff0c;“数字世界”联合研究中心正式揭牌成立&#xff0c;这个由香港科大(广州)与特斯联共同打造的研究中心&#xff0c;旨在推…

hive中的datagrip和beeline客户端的权限问题

hive中的datagrip和beeline客户端的权限问题 使用ranger和kerberos配置了hadoop和hive&#xff0c;今天想用来测试其权限 测试xwq用户&#xff1a; 1.首先添加xwq用户权限&#xff0c;命令如下&#xff1a; useradd xwq -G hadoop echo xwq | passwd --stdin xwq echo xwq …

【笔记】EDA学习笔记

网课&#xff1a;立创EDA&#xff08;专业版&#xff09;电路设计与制作快速入门 资料&#xff1a;pan.baidu.com/s/1UlcfvAZ13s_wOHo3cvNQxA?pwdb9x8 提取码&#xff1a;b9x8 解压密码&#xff1a;123456 1.创建项目 略 2.原理图设计环境设置 2.1设置 默认网格尺寸&#…

阿里云云效 流水线发布spring cloud项目及Vue项目

1. 单体spring boot 项目流水线主机部署 1.1 创建流水线 页面地址 我们选择模板,当然也可以自己新建一个 1.2 添加流水线源 这里是根据自己的代码仓库决定的,我用的gitee,需要添加服务连接 添加服务连接 新建服务授权/证书 点击新建自动跳转至gitee认证页面,同意授权即可 授权…

网安等保 | 主机安全之KylinOS银河麒麟服务器配置优化与安全加固基线文档脚本分享...

欢迎关注「全栈工程师修炼指南」公众号 点击 &#x1f447; 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01; “ 花开堪折直须折&#xff0c;莫待无花空折枝。 ” 作者主页&#xff1a;[ https://www.weiyigeek.top ] 博客&…

线程不安全举例

1、举例说明集合类线程不安全 &#xff08;1&#xff09;查看源码可证明 看ArrayList源码 没有sync、lock&#xff0c;线程不安全 &#xff08;2&#xff09;创建多个线程写入读取数据 List<String> list new ArrayList<>(); for (int i 1; i <30 ; i) {n…

2023年Web安全学习路线总结!430页Web安全学习笔记(附PDF)

关键词&#xff1a;网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线、web安全攻防笔记、渗透测试路线图 网络安全的范畴很大&#xff0c;相较于二进制安全等方向的高门槛、高要求&#xff0c;Web安全体系比较成熟&#xff0c;在现阶段来看&#xff0c;但凡有自己…

k8s下安装redis

一、使用helm安装redis 执行以下命令添加redis的repo helm repo add bitnami https://charts.bitnami.com/bitnami 创建的master和replica pod的默认size是8Gi&#xff0c;如果k8s的node没有足够的空间&#xff0c;会抛出如下错误&#xff1a;default-scheduler 0/3 nodes …

安全防御 --- SSL VPN

附&#xff1a;无线项目介绍 SSL VPN 有浏览器的设备就可以使用SSL&#xff0c;进而使用SSL VPN。无需担心客户端问题&#xff0c;所以SSL VPN也称为无客户端VPN。SSL VPN在client to lan场景下特别有优势。 实际实现过程&#xff08;基于TCP实现&#xff09; &#xff08;1&…

Nginx SSL使用自制证书

1. 生成证书 keytool -genkey -v -alias <Alias别名> -keyalg RSA -keystore <KeyStore文件> -validity <有效期> keytool -genkey -v -alias nginx -keyalg RSA -keystore nginx.keystore -validity 36500 alias别名为 nginxkeystore文件为 nginx.keystore…

C/C++内存管理(内存分布、动态内存分配、动态内存分配与释放、内存泄漏等)

喵~ 内存之5大区&#xff08;栈区、堆区、静态区、常量区、代码区&#xff09;C/C中各自的内存分配操作符内存泄露?内存泄漏检测方法 内存之5大区&#xff08;栈区、堆区、静态区、常量区、代码区&#xff09; 1、栈区&#xff08;stack&#xff09;&#xff1a;由编译器自动分…

避雷投稿!这3本SCIE期刊处于On Hold状态!有剔除风险!

今年3月份科睿唯安剔除的大量期刊中&#xff0c;有几本期刊之前被WOS数据库标记为“On Hold”状态&#xff0c;后面也出现了一些期刊解除“On Hold”状态的情况。 目前&#xff0c;WOS数据库查询有3本SCIE期刊正处于“On Hold”状态&#xff0c;这是什么信号呢&#xff1f;对于…

org.apache.thrift.transport.TTransportException: GSS initiate failed

hive配置kerberos發現錯誤&#xff0c;就所有的配置都配好了&#xff0c;但是使用datagrip連接hive時報錯如下&#xff1a; org.apache.thrift.transport.TTransportException: GSS initiate failed 後面是沒有認證的原因&#xff0c;使用kinit 認證即可 還有一種情況是 我使…

7.1下周黄金非农数据是否会影响美联储七月暂停加息?

近期有哪些消息面影响黄金走势&#xff1f;下周黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周五(6月30日)&#xff0c;现货黄金价格收盘上涨&#xff0c;盘中一度升破1920美元关口。美国疲软的个人消费支出推动了美国国债收益率的下降&#xff0c;从而导致美…

libevent实践04:监听管道第二季

一 本次实例使用函数简介 事件集合初始化&#xff1a; struct event_base *event_init(void); 示例&#xff1a; struct event_base *base event_init(); 单个事件初始化 void event_set(struct event *ev, evutil_socket_t fd, short events,void (*callback)(evutil_s…