【Linux】Linux下权限的理解

前言:在之前我们已经对基本的指令进行了深入的学习,接下来我将带领大家学习的是关于权限的相关问题。在之前,我们一直是使用的【root】用户,即为“超级用户”,通过对权限的学习之后,我们就会慢慢的切换到普通用户模式下去进行操作。


本文目录

(一)权限的概念

(二)Linux下用户分类

2.1用户分类

2.2 用户之间的切换

 2.3文件属性

2.4文件访问者的分类(人)

2.5用户与访问者之间的联系

(三)文件权限

3.1文件权限值的表示方法

(四)文件访问权限的相关设置方法

4.1权限设置的方法

1.用户表示符+/-=权限字符

2.三位8进制数字

4.2初始【Permission denied】

4.3普通用户使用sudo提权

1.添加普通用户为信任用户

4.4 chown指令

4.5chgrp指令

4.6 file指令

(五)Linux下三个重要权限

5.1 目录权限

5.2 默认权限

a)文件的“起始权限”与“默认权限”

b)umask权限掩码

c)最终权限计算方法

5.3 粘滞位

a)前情摘要

b)如何添加粘滞位防止恶意删除

c)常见问题分析

(六)总结


(一)权限的概念

在正式学习权限之前,我们还是先对它的概念有一定的了解,这样能让我们带着一定的认知去进行接下来的学习。那么什么是权限呢?

  • 一方面简单点来说就是限制人的,即允不允许我们去做,限制我们的行为,对其进行约束;
  • 其次就是访问的对象可能天然就没有这种“属性”权限,我们也可以这样去看待 权限 = 人 + 事物(文件)属性(rwx)

接下来,我就带大家一起去探索“权限”的有关知识!!!


(二)Linux下用户分类

2.1用户分类

因此,基于上述讲到这种情况,在Linux下就衍生出了两种用户——超级用户(root)和  普通用户

  • 超级用户:可以再linux系统下做任何事情,不受限制
  • 普通用户:在linux下做有限的事情。
  • 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。

2.2 用户之间的切换

既然Linux下提供了两种不同的用户,大家可能就会好奇,这两者之间是否可以互相的切换呢?

  • 答案当然是可以的,在linux下用户之间是很灵活的,支持互相进行切换。

接下来第一件事就是大家先创建一个普通用户,如果大家用的还是root用户,从今天开始就可以慢慢的去切换为普通用户了。

  • 1.第一步,打开xshell,点击右上角的带有+号的文件:

  •  2.第二步:输入相应的信息根据提示

  •  3.第三步:再次点击右上角的文件符号

  •  4.找到刚才自己创建的,然后点击进去,就可以看到如下界面:

  •  5.最后就是输入密码即可创建完毕:

  •  6.最后大家再到相应的普通用户下,大家可以【whoami】进行查看,如果还是root,则表示创建失败了:

以上便是相应的创建的过程。。


在正式的进行操作之前,还要带大家认识一个指令,即---【su】指令。

  • 【su 】是最简单的用户切换命令,通过该命令可以实现任何身份的切换,包括从普通用户切换为 root 用户、从 root 用户切换为普通用户以及普通用户之间的切换。

su 命令的基本格式如下:

  • # su [选项] 用户名

选项:

  • -:当前用户不仅切换为指定用户的身份,同时所用的工作环境也切换为此用户的环境(包括 PATH 变量、MAIL 变量等),使用 - 选项可省略用户名,默认会切换为 root 用户。
  • -l:同 - 的使用类似,也就是在切换用户身份的同时,完整切换工作环境,但后面需要添加欲切换的使用者账号。
  • -p:表示切换为指定用户的身份,但不改变当前的工作环境(不使用切换用户的配置文件)。
  • -m:和 -p 一样;
  • -c 命令:仅切换用户执行一次命令,执行后自动切换回来,该选项后通常会带有要执行的命令。

接下来,我们正式介绍用户切换的几种模式:

第一种:普通用户—>root

  • 当我们使用:【su】注意,当我们切换时是需要用到密码的

  •  当我们使用【su -】时,,我们可以发现还是完成了相应的功能:

  •  那么两者之间什么区别呢?细心的小伙伴可以已经发现了:

 因此,我们可以发现二者之间的区别:

【su】和【su -】的区别

  • 注意,使用 su 命令时,有 - 和没有 - 是完全不同的,- 选项表示在切换用户身份的同时,连当前使用的环境变量也切换成指定用户的。我们知道,环境变量是用来定义操作系统环境的,因此如果系统环境没有随用户身份切换,很多命令无法正确执行。

第二种:root—>普通用户

  • 当我们想要从root用户切换成普通用户,这一步很简单,从刚才那个时刻,只需要按下【Ctrl + D】 或者【 exit】即可

第三种:普通用户—>普通用户

对于普通用户之间的切换,要切换到其他的用户下,就需要知道别人用户的密码,在实际情况下,我们是无法知道,那么是不是就无法切换了呢?

  • 当然可以切换,我们可以借助【root】当我们的跳板,因为【root】为超级用户呀!它不受任何约束。我们自己在创建一个用户来举例说明:

以下就是第二种创建普通用户的方法:

  • 我们创建的这个用户,就模拟为别人创建的(此时,我们并不知道它的密码),那么当我们想要切换到他的用户下时可以怎么做呢?具体如下:

 2.3文件属性

接下来,我要插入一点其他知识,即为——Linux的文件属性,上面我简单提过一点,这里我用代码具体给大家说明。

  •  在【linux】下,不使用文件后缀区分文件类型,而是通过用文件属性中的第一列的第一个字符来区分文件类型。

 对于每行第一个为文件类型,那么【linux】下有哪些文件类型呢?具体如下:

  • d:文件夹,文本,可执行文件,归档文件等
  • -:普通文件
  • l:软链接(类似Windows的快捷方式)
  • b:块设备文件(例如硬盘、光驱等)
  • p:管道文件
  • c:字符设备文件(例如屏幕等串口设备)
  • s:套接口文件

接下来我们针对前两个,我通过代码带大家见识见识。

ls -l /dev/vda1

  •  解析:这里以【b】开头,表示的是云服务器设置的一块虚拟磁盘
 ls -l /dev/tty0 -1

  •  解析:这里的开始是以【c】开头的,表示显示器或者终端。

通过以上,未来我们该如何看待这个后缀呢?

  • a.后缀这是随你的心意,你想用就用,可以展示给别人看
  • b.我们可以将后缀做成文件名的一部分

说到这里可能还有的小伙伴会有疑问?接下来我们在举个例子来进行形象的说明:

  • 首先,我们在当前的【myfile.c】中写入相应的数据,紧接着当我们去执行它时,它也能够正确的跑起来 :

  •  当我们想改动可执行文件【a.exe】把它改成不同的后缀,看它是否还能执行成功,具体如下:

 通过上述我们不难发现,无论当我们怎么去改都可以正常的运行成功,这叫什么呢?在这里我们的程序和后缀无关。

  • 但是当我们改变源文件的后缀时,结果是否还跟刚才一样呢?

  •  因此,综合我举的例子大家可以发现,在【Linux】下使用的时候,我们依然是有文件的类别的,但当我们用gcc编译一个源代码,当它的后缀不一样时它就会报错。因此,大家注意我们谈的是【linux】下不用标识文件来描述文件类型,这个【linux】下指的是操作系统,操作系统看待文件时不以文件名作后缀,但是今天我们用的是【gcc】这个软件去执行时会报错,因为【gcc】这个软件也是人为写的。

到此,大家明白了吗?

2.4文件访问者的分类(人)

对于上述的不管是【root】啊还是普通用户都是具体的用户,接下来我要讲的则是“角色划分”---对于一个被创建出来的文件,创建之后总会去访问它的,不然何必多此一举,此时在【Linux】下访问者分为三类:拥有者、所属组、other

  • 文件和文件目录的所有者:u---User(中国平民 法律问题)
  • 文件和文件目录的所有者所在的组的用户:g---Group(不多说)
  • 其它用户:o---Others (外国人)

大家可能对文件的拥有者和other这两个概念比较能懂,但是好奇的是为什么还要搞个【所属组】呢?接下来我们解释一下所属组,首先讲解一下用户组的概念。

  • 用户组就是一组用户的集合,类似于大学里的各种社团。那为什么要把用户放入一个用户组中呢?
  • 这么做当然是为了方便管理。大家仔细想想,如果我有 100 位用户,而这 100 位用户对同一个文件的权限是一致的,那我是一位用户一位用户地分配权限方便,还是把 100 位用户加入一个用户组中,然后给这个用户组分配权限方便呢?不言而喻,一定是给一个用户组分配权限更加方便。

给一个文件区分所有者、所属组和其他人,就是为了分配权限方便。就像笔者买了一台电脑,那我当然是这台电脑的所有者,可以把我的读者加入一个用户组,其他不认识的路人当然就是其他人了。分配完了用户身份,就可以分配权限了,所有者当然对这台电脑拥有所有的权限,而位于所属组中的这些学生可以借用我的电脑,而其他人则完全不能碰我的电脑。

因此综上所述,在现实中,绝对不是所有的用户都使用 root 身份登录,而要根据不同的工作需要和职位需要,合理分配用户等级和权限等级。

2.5用户与访问者之间的联系

在上述,我们讲到了用户可分为两种:

  • root用户
  • 普通用户

访问者可分为三种

  • 拥有者
  • 所属组
  •  other

那么它们之间存在什么关系呢?为什么还要这么分呢?

  • 对于root【超级用户】和普通用户来说,他们都是具体的人,而对于访问者来说,他们是属于一种角色,上述我也提过。但是对于人来说会扮演着不同的角色,例如:在学校我们扮演着学生的角色,在家我们扮演着父母孩子的角色,此时给大家更新博客时则是扮演的笔者的角色。
  • 所以在人生中我们扮演这各种各样的角色,但是对于【linux】却是它扮演的角色可以理解为只有一种,因为它权限最大嘛!!

(三)文件权限

上述对于文件的类型说明了有哪些,但是对于后面的还没有,接下来我给大家具体的唠唠:

  •  在文件类型之后的,可以按照上面那样划分,我们可以三三分为一组,具体可以看下图这样:

 而对于每三位,三个字符的位置的含义时确定的,分别为:

  • 第一位:表示读
  • 第二位:表示xie
  • 第三位:表示执行

那么对于上图的【myfile。txt】文件的拥有者有哪些权限呢?

  • 具有读,具有写,不具有可执行权限

那么基本权限有哪些呢?

  • i.读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
  • ii.写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
  • iii.执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
  • iv.“—”表示不具有该项权限

3.1文件权限值的表示方法

对于权限的表示方法,我们给出以下两组,大家需要记住。

a)字符表示方法

 b)8进制数值表示方法


(四)文件访问权限的相关设置方法

在正式的操作之前,我们先将一个指令,这个指令就是拿来修改权限的。

a)chmod

  • 功能:设置文件的访问权限
  • 格式:chmod [参数] 权限 文件名

常用选项:

  • R -> 递归修改目录文件的权限
  • 说明:只有文件的拥有者和root才可以改变文件的权限

4.1权限设置的方法

接下来我们来讲解如何去设置文件的访问权限,主要是有两种方法:

  • 用户表示符+/-=权限字符
  • 三位8进制数字

1.用户表示符+/-=权限字符

首先,对于下面的【tmp】文件,我们可以看到它任何的权限都不存在,这时当我们要去对其设置权限时应该怎么做呢?

 首先是对于要修改身份的用户符号,也就是我们在上面说到的【拥有者】、【所属组】、【other】

  • u:拥有者
  • g:拥有者同组用
  • o:其它用户
  • a:所有用户

其次对其有哪些设置:

  • +:向权限范围增加权限代号所表示的权限
  • -:向权限范围取消权限代号所表示的权限
  • =:向权限范围赋予权限代号所表示的权限

接下来,我们一一列举:

  • a)给拥有者添加【读】的权限—— r

  •  b)给所属组者添加【读】的权限—— r

  •  c)给other添加【读】权限——r

  •  对于,【w】和【x】都是一样的,在这里我只举一个,其余大家下来可以多多练习:

 此时会发现一个问题,对于一个什么都没有的文件来说,像我上述这样一个一个的去加是不是不太高效啊,那么有没有一种比较高效点的方法呢?答案肯定是有的,即可以连续设置权限

首先,我们可以看到【tmp】是什么权限都没有的。

  •  a)给拥有者添加【读、执行】的权限—— r和x

  •  b)给所属组添加【写、执行】的权限—— w和x

  •  c)给other添加【读、写】的权限—— rw

 到这里我们还是可以会觉得这样也有点麻烦,我们可以一次性就给它们设置好吗?答案当然也是可以的

  • a)同时给拥有者设置——读和写权限;给所属组同时设置——写和可执行权限;给other同时设置——读和可执行权限

  •  b)给拥有者添加【读、写、执行】和给所属组添加【读、写、执行】和给other添加【读、写、执行】的权限—— rwx、rwx、rwx

 上述写法,我们可以写成这样(是不是又可以偷一点懒了)

 你上面一个劲的说增加,怎么没有删除呢?有的有的,这就给出删除的方法

  • a)就紧跟上面那个,当我们全设置后怎么删除呢?我们直接给出偷懒的方法

  • b)那么对于不是全部都设置的呢?我们该怎么做,其实啊跟增加的方法一样的,只是把【+】改为【-】即可

 


2.三位8进制数字

除了上述方法之外,我们还有一种方法,那就是依靠8进制来进行表示,具体怎么做呢?我们下面就给出

除了上面这种通过字符来进行设置的方式,还有一种更加简便的形式,那就是使用八进制来进行相应的设置,对于每一组八进制所对应的权限在上面的图片里面,大家如果不记得了可以再去看看

  • a)给拥有者、所属组、other都添加【读】的权限—— 444

  •  b)给拥有者、所属组、other都添加写的权限—— 222

  •  c)给拥有者、所属组、other都添加可执行的权限—— 111

  •  d)将拥有者、所属组、other的所有权限都添加上—— 777

  •  d)最后,那么我们的删除用8进制可不可以实现呢?当然是可以的:只需所有的都赋值为---000

 到此,以上就是两种详细的设置权限的方法。二者之间的区别我也给大家讲述了,这里在复述一遍加强大家的记忆:

  • 用符号方式表示的话相比直接用8进制来的会慢一点,但是不会存在覆盖的问题:
  • 用8进制设置的话,虽然相对来说比较简便,但是存在覆盖的问题
  • 因此,基于上述的两种情况,对于不同的场合可能需要不同的方法来表示,因此大家两种方法都应该能够掌握。

4.2初始【Permission denied】

首先,不知道各位小伙伴知不道知道这个什么意思呢?(对于英语好的同学就没必要看我的翻译了哈)

  • 它的意思为:权限被拒绝
  • 出现的原因的是:没有权限进行读、写、创建文件、删除文件等操作。

我们还是结合代码来进行查看,当我们想要给一个没有任何权限的文件进行操作时,会成功吗?:

  •  上述读不可以,那么往里面追加可以吗?具体如下:

  •  那么这样的情况不可以,那么大家是否想过对于【root】是否还可以呢?接下来我们尝试一下

 到此,大家就应该能够明白权限拒绝具体什么意思了吧!到此,又会引申出一个问题,那就是,当我什么都没有时,我们是否可以进行提权操作呢?答案当然是可以,接下来就给大家讲解提权 


4.3普通用户使用sudo提权

sudo:是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具。

接下来我们进行举例说明。

  •  当我们使用非root用户,且不在信任列表中,sudo命令进行提权,输入的是用户的密码,而不是root的密码。当没有添加用户到信任列表中,用户就无法进行sudo:

 

1.添加普通用户为信任用户

  • 接下来给大家讲解配置的步奏,此时需要我们先切换为root用户,然后在一个配置文件目录下的信任列表文件里进行修改

  • 修改需要联系管理员,紧接着进入【sudoers】这个文件中

 

  • 然后可以看到进入了【sudoers】这个文件中。vim默认进入时命令模式,此时我们要切换【末行模式】,按下【shift +】进入,然后输入相应的【/all】

  •  输入完之后按下回车键,没找到的话按下键盘中的↓一直寻找到这句话。可以看到我已经在root的信任列表中了,我们可以将【zp】也添加进去(大家还没添加之前这里应该只有一个root)

 

  • 找到那行命令之后,我们按住【i】切换到【插入模式】就可以把自己想要添加的添加到里面去

 

  • 紧接着输入完后再按下键盘左上角的Esc键退回【命令模式】

 

  • 最后在继续按下【shift + :进入【末行模式】,或者大家按住键盘上的【:】然后输入【wq!】,因为这个【sudoers】是这写保护文件,不可随意修改

 以上便是我们具体的操作过程了。


紧接着我们在去验证以下此时加入过后成功了没有!!

不受权限约束后,就可以进行其他操作了。因此综上所述,大家对这个理解了吗?普通用户只需要进行【sudo】就能以【root】用户的身份去执行任何指令。

 



4.4 chown指令

功能:修改文件或目录的所属组

格式:chgrp [参数] 用户组名 文件名

在上述我们已经对设置文件的权限进行了具体的了解,接下来我们需要对文件的访问者这项进行了解,即尝试修改一下这个文件的访问者。

  • 首先就是修改文件的【拥有者】,使用的就是【chown】这个指令,但是这里大家先思考一下,当我们想把这个文件给别人的时候,别人是否允许我们给他呢?我们通过代码进行查看

  •  上述我们不难发现这样做其实是会被拒绝的,大家根据现实生活也可以理解这一点,但是经过上面的讲解大家应该都明白了一点,那就是对于【root】来说是不被权限所约束的,所以我们可以以【root】的身份去运行


4.5chgrp指令

功能:修改文件或目录的所属组

格式:chgrp [参数] 用户组名 文件名

  • 那么这个指令什么意思呢?很简单,就是改变文件的所属组的

我们还是通过代码来进行直观的了解:

  • 还是紧跟上面,现在我想要把这个文件的所属组给到【hello】,然后看看是否可以

 

最后,补充一点,对于修改【拥有者】和【所属组】是可以一起进行的,在中间加上冒号:即可

4.6 file指令

接下来再给大家补充一个指令,即——file指令。在linux下我们可以通过【ll】或【ls】,甚至于【ls -l】进行查看

功能说明:辨识文件类型。

语法:file [选项] 文件或目录... 

常用选项:

  • -c 详细显示指令执行过程,便于排错或分析程序执行的情形。
  • -z 尝试去解读压缩文件的内容。

通过上文可以知道,我们对文件做识别是通过第一个字母进行查看的,但是有时候对我们来说相对文件做一个更细腻度的文件识别时,此时应该怎么办呢?此时就需要用到【file】指令了。


(五)Linux下三个重要权限

接下来我就带领大家去具体的认识【linux】下的三个重要权限。分别是:

  • 目录权限
  • 默认权限
  • 粘滞位

接下来我们一一进行讲解。

5.1 目录权限

首先,我先抛给大家一个问题?那就是大家认为当我们要进入一个目录时需要具体的什么权限呢?

  • a)首先,对于【r】权限是我们必须要有的吗?我们通过代码举例

 那么接下来,如果我删除了对这个文件的【r】权限,是否还能像这样呢?

 

因此,综上所述我们可以得出,对于进入一个目录,【r】权限并不是我们所必须的!!

  • b)既然对于【r】来说并不是必须的,那么对于【w】权限来说是不是必须的呢?我们继续往下看

 

因此,结合上图,我们能够得出【w】权限也并不是我们进入一个目录所必须的!!

  • c)既然前两者都不是必须的,那么【x】权限是不是就是必须的呢?

 

到此,综上所述,如果我们要进入一个目录,必须要有的则是——【x】权限!!!


上述问题我们已经清楚了,那对于目录来说,【r】代表什么意思呢?

 因此,通过上述我们不难发现:在没有【r】权限的目录下,我们无法查看当前目录下的文件名和文件属性。

那对于目录来说,【w】代表什么意思呢?

 因此,通过上述我们不难发现:在没有【w】权限的目录下,我们无法直接在当面目录下创建新文件。

至于具体的原因,我会在后面给大家讲解。今天暂时讲不了。


5.2 默认权限

接下去我们来说说有关Linux中的默认权限,这部分知识需要大家下点功夫理解起来!!

a)文件的“起始权限”与“默认权限”

先给大家看一个事件,让大家先有一个印象:

  •  此时,就有很多小伙伴好奇了?为什么当我们创建的普通文件(不包括可执行)的默认权限是从【664】开始的,而创建的目录是从【775】开始的呢?(大家需要注意一点,不同的操作系统,默认权限可能跟我这里的不一样)

接下来我给大家讲一讲:

  • 对于默认权限来说,就是你所看到的;
  • 对于起始权限来说,这一部分是由系统设定的。对于普通文件来说,它的起始权限是从——666开始的(没有x),而目录文件的起始权限是从——777开始的(全部都有);
  • 对于最终权限,其实就相当于与默认权限,就是你最后看到的。

此时大家就可能会好奇,那系统是如何从起始权限变到最终权限的呢?

  • 系统为了更好的控制文件权限,系统会有默认的:权限掩码来帮助我们去了解

b)umask权限掩码

功能

  • 查看或修改文件掩码
  • 新建文件夹默认权限=0666
  • 新建目录默认权限=0777
  • 但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到 umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask

格式

  • umask 权限值

说明

  • 将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。
  • 超级用户默认掩码值为0022,普通用 户默认为0002

 

特别注意:我们这里最开始的0,表示的不是数字中的那个【0】,而是表示的是八进制的意思哟!

c)最终权限计算方法

我们先给出规则最终权限 = 起始权限 & (~umask)

  • 正式计算之前不知道大家是否还记得,对于文件的起始权限来说,目录文件的起始权限均为【777】,普通文件的起始权限均为【666】
  • 对于umask权限掩码来说,root用户的默认权限掩码为【0022】,而普通用户的默认权限掩码为【0002】,因此这里就要看你使用的是哪个用户了。接下来我们给出详细的表示过程:

 如果有疑问的,或许大家就还要去补补运算相关的知识了!!!此时大家应该就清楚为什么最终是那个样子了吧!系统隐士的对其进行了转换。

有了上述的知识,我们就可以对其进行进行修改的操作了。

 

通过上述的学习,大家是否知道这里是怎么计算出来的吗?不知道没关系,我再给大家演示一次:

 到此,关于默认权限的全部知道便到这了,我相信聪明的小伙伴们肯定一看就会的!!!


5.3 粘滞位

首先我先给大家介绍一下什么叫做粘滞位。

  • 粘滞位(Stickybit),又称粘着位,是【Linux】文件系统权限。最常见的用法在目录上设置粘滞位,也只能针对⽬录设置,对于⽂件⽆效。则设置了粘滞位后,只有目录内文件的所有者或者root才可以删除或移动该文件。如果不为目录设置粘滞位,任何具有该目录写和执行权限的用户都可以删除和移动其中的文件。实际应用中,粘滞位一般用于【共享】目录,以防止普通用户删除或移动其他用户的文件

a)前情摘要

因此,根据上述这就引出了粘滞位引入的基本背景:

  • 未来在使用【linux】的时候,可能会有会有共享目录被所有的普通用户所共享,用来保存普通用户产生的临时数据,通常有root提供

 

接下来我们便创建一个共享目录给大家见识一下:

 接下来我们就需要对其进行提权操作了,经过如下操作时候便是成功的创造出了一个共享目录:

  •  此时,当我们想在这里共享目录下创建文件可以吗?答案当然是肯定的:

 

当我们想往其他的文件下写入时。此时是否可行呢(这点我相信大家学到这了应该也知道)?

  •  于是这个时候就会出现一个问题,既然你对我来说不能读、不能写、不能执行,那我干脆就就删了这个文件,我不能看,你也别想看(有点 既然我得不到,你也休想得到的韵味)

 所以在这样的背景下,为了让大家共享文件,却不让其他的用户能够随意的删除我的文件,此时就引出了粘滞位的。

  • 粘滞位权限便是针对此种情况设置,当⽬录被设置了粘滞位权限以后,即便⽤户对该⽬录有写⼊权限,也不能删除该⽬录中其他⽤户的⽂件数据,⽽是只有该⽂件的所有者和root⽤户才有权将其删除。设置了粘滞位之后,正好可以保持⼀种动态的平衡:允许各⽤户在⽬录中任意写⼊、删除数据,但是禁⽌随意删除其他⽤户的数据。

特别注意: 需要注意的是, 粘滞位权限只能针对⽬录设置,对于⽂件⽆效。

b)如何添加粘滞位防止恶意删除

  • 粘滞位权限都是针对其他⽤户( other)设置,使⽤chmod命令设置⽬录权限时,“o+t”“o-t”权限模式可分别⽤于添加、移除粘滞位权限。

接下来我们便添加粘滞位:

 

 

  • 设置了粘滞位权限的⽬录,使⽤ls命令查看其属性时,other⽤户权限处的“x”将变为“t”。

 

  • 此时,在当我们想去对文件进行删除时,是否还能删除成功呢?我们在测试一下:

 不难看出当我们添加了粘滞位之后,此时就不能在对里面的文件进行删除操作了。

c)常见问题分析

接下来回答几个大家比较关心的问题。

① 为什么不能拦住别人删我的文件呢,是权限存在的Bug吗?

  • 当然不是,大家仔细观察后便可以发现当前目录下的【other】还有【w】权限,因此它是可以删除的。

② 为什么只能给共享目录添加粘滞位呢?其他目录的不行吗?

  • 因为共享目录下的【other】必须具有读和写的权限,但是因为存在【w】权限会导致用户可以删除其他用户的文件,因此基于这种情况,为了防止这种情况的发生,共享目录才要加上粘滞位

③ 为什么要做的这么麻烦,我们直接把【other】的【w】权限删除掉,这样不就不会发生乱删的情况了吗?

  • 大家可以想想,若是将【other】的【w】权限删除掉的话,那也拦住了使用这个共享目录的用户创建文件、写文件,一旦这样,共享目录就失去了它存在的意义

④ 设置了粘滞位后的目录,谁能删除自己的文件呢?

  • 一、超级管理员删除
  • 二、该目录的所有者删除
  • 三、该文件的所有者删除

(六)总结

关于权限的总结

  • 目录的可执行权限是表示你可否在目录下执行命令。
  • 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这 个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
  • 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读 权限

以上便是Linux权限的全部问题了,到此本文就结束了,如有疑问大家可以评论区留言哟!!最后如果本文对您有帮助的话,麻烦一键三连哟!!!

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】双向链表实现

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员,2024届电子信息研究生 目录 一、什么是双向链表 二、双向链表的实现 一、什么是双向链表 双向链表也叫双链表,是链表的一种,它的每个数据节点中都有两个指针,分别指向直接后…

【数据结构初阶】单链表

目录一、思路>>>>>>>>>>>>过程<<<<<<<<<<<<<<<1.打印2.尾插3.尾删4.头插5.头删6.查找7.指定位置后插入8.指定位置后删除9.链表的销毁二、整个程序1.SLTlist.c2.SLTlist.c一、思路 #define …

点云可视化:使用open3d实现点云连续播放

模型训练完成后除了看ap等定量的指标是否变好外,还需要将结果可视化出来,直接观察模型的输出结果,往往我们的数据会比较多,如果单帧的看的话会比较麻烦,需要频繁的关闭窗口,最好是能直接连续的播放数据和模型的推理结果。有三种方法: clear_geomotry()和update_render()…

SpringBoot 解决id使用字符串类型可以解决精度问题

1. 问题引入 当主键超过19位长度的数值型的属性值后三位会被四舍五入 2. 使用雪花算法解决 雪花算法长度最大只有19位的10进制&#xff0c;所以不会丢失精度问题&#xff01;SpringBoot 解决主键雪花算法配置https://liush.blog.csdn.net/article/details/129779627 ① appli…

Linux的基础知识

根目录和家目录根目录&#xff1a;是Linux中最底层的目录&#xff0c;用"/"表示家目录&#xff1a;当前用户所在的路径&#xff0c;用“~”表示&#xff0c;root用户的家目录和普通用户的家目录不一样&#xff0c;普通用户的家目录在/home路径下&#xff0c;每一个用…

eNSP 网络地址转换配置实验

关于本实验当使用私有IP地址的内部主机访问外网时&#xff0c;需要使用NAT将其私有IP地址转换为公有IP地址&#xff0c;此时需要在网关路由器上配置NAT来提供相应的地址转换服务。当网关路由器连接ISP的接口上未使用固定IP地址&#xff0c;而是动态地从ISP获取IP地址时&#xf…

沁恒CH32V307使用记录:SPI基础使用

文章目录目的基础说明使用演示其它补充总结目的 SPI是单片机中比较常用的一个功能。这篇文章将对CH32V307中相关内容进行说明。 本文使用沁恒官方的开发板 &#xff08;CH32V307-EVT-R1沁恒RISC-V模块MCU赤兔评估板&#xff09; 进行演示。 基础说明 SPI的基础概念见下面文…

【Docker】之docker-compose的介绍与命令的使用

&#x1f341;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 文章目录docker-compose简介docker-compose基础…

C++中的list类【详细分析及模拟实现】

list类 目录list类一、list的介绍及使用1、构造器及其它重点①遍历②插入删除操作③insert和erase④resize2、Operations接口①remove②sort③merge3、vector与list排序性能比较二、list的深度剖析及模拟实现1、结点的定义2、创建list类3、list类方法的实现3.1 迭代器类的实现*…

【机器学习面试总结】————特征工程

【机器学习面试总结】————特征工程一、特征归一化为什么需要对数值类型的特征做归一化?二、类别型特征在对数据进行预处理时,应该怎样处理类别型特征?三、高维组合特征的处理什么是组合特征?如何处理高维组合特征?四、组合特征怎样有效地找到组合特征?五、文本表示模型…

STM32 10个工程篇:1.IAP远程升级(二)

一直提醒自己要更新CSDN博客&#xff0c;但是确实这段时间到了一个项目的关键节点&#xff0c;杂七杂八的事情突然就一涌而至。STM32、FPGA下位机代码和对应Labview的IAP升级助手、波形设置助手上位机代码笔者已经调试通过&#xff0c;因为不想去水博客、凑数量&#xff0c;复制…

基于51单片机的室内湿度加湿温度声光报警智能自动控制装置设计

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;单片机湿度 获取完整无水印论文报告&#xff08;内含电路原理图和源程序代码&#xff09; 在日常生活中加湿器得到了广泛的应用&#xff0c;但是现有的加湿器都需要手工控制开启和关闭并且不具备对室内空气温湿度的监测&am…

【微信小程序】-- 页面导航 -- 编程式导航(二十三)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…

堆及其多种接口与堆排序的实现

我们本期来讲解堆结构 目录 堆的结构 堆的初始化 堆的销毁 堆的插入 向上调整算法 堆的删除 向下调整算法 取堆顶元素 判断堆是否为空 堆中元素个数 堆排序 向下调整与向上调整效率计算 Top-K问题 全部代码 堆的结构 堆是一种用数组模拟二叉树的结构 逻辑结构是…

Linux命令scp用法

本文主要讲的是scp用法如果哪里不对欢迎指出&#xff0c;主页https://blog.csdn.net/qq_57785602?typeblogscp 可以在win系统使用&#xff0c;本文百分之八十写的是win系统怎么使用&#xff0c;在本地上到服务器文件,从服务器下载文件到本地用工具连接到公司服务器时&#xff…

主线程与子线程之间相互通信(HandlerThread)

平时&#xff0c;我们一般都是在子线程中向主线程发送消息&#xff08;要在主线程更新UI&#xff09;&#xff0c;从而完成请求的处理。那么如果需要主线程来向子线程发送消息&#xff0c;希望子线程来完成什么任务。该怎么做&#xff1f;这就是这篇文章将要讨论的内容。 一、…

Unity 之 使用原生UGUI实现随手移动摇杆功能经典实例

Unity 之 使用原生UGUI实现随手移动摇杆功能实现效果一&#xff0c;实现思路1.1 原理解析1.2 思路概述二&#xff0c;实现代码2.1 随手落下2.2 摇杆转动三&#xff0c;源码分享3.1 场景搭建3.2 完整代码3.3 实现效果实现效果 本文最终实现效果&#xff1a; 一&#xff0c;实现…

【数据结构】千字深入浅出讲解栈(附原码 | 超详解)

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;C语言实现数据结构 &#x1f4ac;总结&#xff1a;希望你看完…

K8S + GitLab + Jenkins自动化发布项目实践(一)

K8S GitLab Jenkins自动化发布项目实践&#xff08;一&#xff09;发布流程设计安装Docker服务部署Harbor作为镜像仓库部署GitLab作为代码仓库常用Git命令发布流程设计 #mermaid-svg-pe9VmFytb9GmqMvG {font-family:"trebuchet ms",verdana,arial,sans-serif;font-…

微软Bing加入ChatGPT后如何用?教你12种问法黄金公式学会了,又能研究新副业赚钱又能加快学习速度

自从Bing连上chatgpt之后&#xff0c;chatgpt的回答不再像之前那样模棱两可&#xff0c;变得准确起来&#xff0c;至少给出的答案比起往常的会有更多一些的参考价值&#xff0c;也可以帮助大家能够更加深入细节去问问题和梳理问题的流程和解答的方式 当然问法不同得出的答案也是…