【Linux】Linux下权限的理解

avatar
作者
筋斗云
阅读量:1

前言:在之前我们已经对基本的指令进行了深入的学习,接下来我将带领大家学习的是关于权限的相关问题。在之前,我们一直是使用的【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权限的全部问题了,到此本文就结束了,如有疑问大家可以评论区留言哟!!最后如果本文对您有帮助的话,麻烦一键三连哟!!!

 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!