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

举报
YIN_尹 发表于 2023/12/13 22:12:47 2023/12/13
【摘要】 @[TOC]<font color = black>上一篇文章我们学习了Linux权限相关的内容,这篇文章,我们再来学习一个知识点——粘滞位。1. 背景那为了让大家更容易理解粘滞位的概念,首先我们要来了解一点背景知识:<font color = black>就是我们在使用Linux的时候呢,有时候就可能需要一些共享目录,即被所有普通用户共享,用来保存普通用户产生的临时数据。那为什么可能会需要...

@[TOC]

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

1. 背景

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

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

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

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

2. 准备

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

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

创建不了怎么办呢?

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

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

<font color = black>在这里插入图片描述

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

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

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

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

问题引出

那我们来看这样一种场景

<font color = black>我现在是yhq 在这里插入图片描述 那我先想看一下ymm的ymm1这个文件里面的内容,这当然是可以的,因为在这个文件在共享目录public里面,并且other有r读的权限 在这里插入图片描述 那我想向ymm的文件里写内容可以吗? 在这里插入图片描述 🆗,不行,因为人家没有对other开放写的权限。 所以我们即使处在共享目录下,也还是会受到权限的约束,这也很正常,因为我和ymm都是普通用户。 那然后呢,假设有一天,我和ymm吵架了,ymm生气了,说:以后不让我看ymm1这个文件了,就把权限改成这样了 在这里插入图片描述 现在只有她自己对该文件有rw权限,其它任何普通用户都没权限了。 所以我现在看也看不了了: 在这里插入图片描述 那她这样做我很伤心,我也生气了,我就想,既然你不让我看,也不让我写。 那我想把你删掉可以吗? 在这里插入图片描述 你不让我看,那你也别看了,我直接把文件删除掉。

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

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

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

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

3. 粘滞位

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

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

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

演示一下:

<font color = black>添加之前看好了是这样的: 在这里插入图片描述 那我们现在就来给public这个目录添加粘滞位。 当然添加粘滞位也需要root,或者使用sudo: <font color = black> 在这里插入图片描述 添加好了,大家看出来哪里变了吗? 最后一位由x变成了t,而t就表示该目录被添加上了粘滞位。

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

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

这就是粘滞位的作用。

4. 思考

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

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

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

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

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

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

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

谁可以删除

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

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

  1. <font color = blue>超级管理员(root)删除

  2. <font color = blue>该目录的所有者(一般就是root)删除

  3. <font color = blue>该文件的所有者删除

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。