引言

我们知道,Linux中有两种用户:管理员用户root,以及普通用户
管理员用户root可以在Linux下做任何事情,而普通用户只能做有限的事情,可以通过su指令来切换用户类型su usersu root(root可以省略):

在这里插入图片描述
在这里插入图片描述
(普通用户的命令提示符为$,root用户的命令提示符为#)
普通用户切换到root,需要输入root账号的密码。

对于Linux有这两种用户,也就是两种角色。那么对于一个文件或目录是否也对不同的用户有不同的权限呢,当然是有的,在本篇文章中就来介绍Linux文件的权限管理:

文件访问者的分类

对于一个文件或目录,在Linux中有三种角色:

  1. 文件的所有者u(user)
  2. 文件所有者的所属组g(group)
  3. 其他用户o(others)

所有者、所属组、其他用户只是单纯的角色,它其实并不能决定某个用户就一定对一个文件有某种权限
用户对文件的权限不仅取决于这个用户对于这个文件的角色,还取决于文件的属性,即文件赋予角色什么权限。结合两者才能得知一个用户对于一个文件的权限。

文件类型与访问权限

我们在ll查看文件的属性的时候,展示出来许多文件的属性,其中就包括文件类型、对不同角色的访问权限、文件大小、最后一次修改时间、文件名等:
在这里插入图片描述
其中第一列为文件类型,后面的9列为访问权限,接下来的数字是链接数,接下来的两个名称分别为所有者与所属组,最后是最后一次修改时间与文件名:
在这里插入图片描述

文件类型

在Linux中,文件有如下几种类型:

  1. d:文件夹
  2. -:普通文件
  3. l:软链接(类似Windows的快捷方式)
  4. b:块设备文件(例如硬盘、光驱等)
  5. p:管道文件
  6. c:字符设备文件(例如屏幕等串口设备)
  7. s:套接口文件

访问权限

用户对一个文件的权限有三种:可读、可写、可执行

  1. 可读用r表示(read):
    有了可读权限,就可以读取文件的内容
  2. 可写用w表示(write):
    有了可写权限,就可以在文件中写入或删除内容
  3. 可执行用x表示(execute):
    有了可执行权限,就可以执行该文件
  4. -表示没有某个权限

而上面文件的属性中描述权限的内容有9列,它们分别是对所有者的权限、对所属组的权限以及对其他用户的权限。其中对每个角色三种权限的描述分别为可读、可写、可执行这些顺序都是固定的

所以如果对某个角色的某个权限的位置有相应的字符,就表示改角色有相应的权限,如果为-即表示该用户没有该权限:
例如这个testf文件:
在这里插入图片描述
前三列为对于所有者的权限,为r w -,表示该文件所有者对其可读可写,但是不可执行;
中间三列为所属组,为r w -,表示该文件所属组对其可读可写,但是不可执行;
后三列为其他用户,为r - -,表示其他用户对其可读,不可写不可执行

文件权限值的表示方法

对于三种权限有其固定的位置,当然可以通过二进制0与1的形式来表示一个角色对某文件的权限
如此,一个文件对于角色权限就有2^3=8种不同的二进制数来表示:
在这里插入图片描述

修改权限的指令

chmod修改文件权限

使用chmod指令可以修改文件的权限,该操作只能由文件的所有者以及超级用户root执行(前面说过root用户无视权限)

通过角色+/-/=权限来修改

chmod [选项] 用户+/-/=某项权限 文件名
用这样的格式可以修改文件的权限

其中,代表角色的符号为u(所有者)、g(所属组)、o(其他用户)、a(所有用户);
代表权限的符号为r(读权限)、w(写权限)、x(执行权限);
符号 +(向权限范围增加权限代号所表示的权限)、-(向权限范围取消权限代号所表示的权限)、=(向权限范围赋予权限代号所表示的权限):

给所属组g减去w权限
在这里插入图片描述
给所属组g直接赋予w权限
在这里插入图片描述
给其他用户o加上w权限
在这里插入图片描述

使用-R选项可以递归修改目录文件的权限
在这里插入图片描述

通过三个八进制数修改

chmod [选项] 三个八进制数 文件名
用于修改用户的权限

其中,第一个八进制数表示修改后的所有者权限,第二个表示修改后的所属组权限,第三个表示其他用户权限。
在前面,我们就已经用8个八进制数来表示所有的权限组合,所以这里直接使用即可:
在这里插入图片描述
同样的,使用-R选项可以递归处理。

chown修改所有者

chown [选项] 用户名 文件名
用于修改文件的所有者,只有root用户可以修改

在这里插入图片描述
-R选项可以递归处理目录下的文件:
在这里插入图片描述

chgrp修改所属组

chgrp [选项] 组名 文件名
用于更改文件的所属组用户,只能由root用户使用

我们可以先来创建一个组qqq,并创建一个用户temp,使qqq为其主用户组。然后来使用chgrp改变文件的所属组:
(可以通过groupadd [用户组名称](创建一个组qqq),与useradd -g [用户组名称] [新用户名称] (新建一个用户并使该组为主用户组)指令来实现)
在这里插入图片描述
-R选项可以实现目录的递归处理:

在这里插入图片描述

umask修改或查看文件权限掩码

umask 可以用于查看文件权限掩码
umask [三个八进制数] 用于修改文件权限掩码

在介绍这条指令的使用之前,我们先来了解一下文件权限掩码的作用:

文件创建时的权限

普通文件创建时的默认权限为0666,目录文件创建时的默认权限为0777。但是我们在新建一个新的文件或目录后,其权限却不是0666与0777:
在这里插入图片描述
新建一个文件的权限其实是默认的权限减去该用户的文件权限掩码(八进制),对于二进制的三位数而言,就是将用户的文件权限掩码按位取反后,再按位与(&)上默认权限。

普通用户默认的文件权限掩码为0002,root用户默认的文件权限掩码为0022
我们可以使用umask指令来查看:
在这里插入图片描述
在这里插入图片描述

对于上面的testf2文件与testdir2文件,其初始的权限就是 666 - 002 = 664(rw- rw- r--)与 777 - 002 = 775(rwx rwx r-x)。也可以通过二进制来计算。

使用umask [三个八进制数] 可以修改文件权限掩码:
在这里插入图片描述
将文件权限掩码改为0026后,新建的普通文件的权限就是 666 - 026 = 640(rw- r-- ---)。

目录的权限

对于目录:

  1. 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中
  2. 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容
  3. 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件

我们可以来验证一下,我们之前创建了一个temp用户,这个文件夹对其他用户与所属组都是没有任何权限的:
在这里插入图片描述
这时,作为qiuzeyu账户,仅仅只能看见这个目录而已,其他什么都做不了:
在这里插入图片描述
我们依次打开temp对其他用户的权限(root操作):
只有x:(可以进入,不能查看与修改)
在这里插入图片描述
xr(可以进入,查看,不能修改)
在这里插入图片描述
r w x(可以进入、查看、修改)
在这里插入图片描述

但是,这里有一个问题,就是只要用户有某目录的写权限,即使它没有这个目录中文件的写权限,那他也可以直接删除该目录中的文件(以temp下的tempdir目录演示):

当tempdir目录对其他用户有写权限时,就可以直接删除这个目录中的文件,无论对其中的文件是否有写权限:
在这里插入图片描述
这就很荒谬,属于是一个漏洞,都不能进行写入竟然可以直接删除这个文件。

使用粘滞位就可以解决这个问题:

粘滞位

粘滞位替代了其他用户的可执行权限的位置,用t表示。
可以使用chmod +t [文件名]的方式给目录添加粘滞位

使用粘滞位后,该目录中的文件只能由目录的所有者、目录中文件的所有者以及root账户删除:
在这里插入图片描述
在这里插入图片描述

总结

到此,关于Linux文件权限的内容就介绍完了
包括文件访问者的分类,文件类型与访问权限,文件权限值的表示方法,修改权限的指令,目录的权限与粘滞位

如果大家认为我对某一部分没有介绍清楚或者某一部分出了问题,欢迎大家在评论区提出

如果本文对你有帮助,希望一键三连哦

希望与大家共同进步哦

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐