博客主页:阿客不是客

系列专栏:深入代码世界,了解掌握 Linux

欢迎来到泊舟小课堂

博客制作不易欢迎各位点赞+⭐收藏+关注

一、权限的概念

在Linux 中,权限是控制用户对文件和目录访问的一种机制。每个文件和目录都有三种基本权限:读取(r)、写入(w)执行(x)。这些权限分别适用于三类用户:文件的拥有者
(u)、文件所属组的用户(g)和其他用户

1.1 用户的分类

Linux下有两种用户:超级用户(root)、普通用户

  • 超级用户:可以再linux系统下做任何事情,不受限制

  • 普通用户:在linux下做有限的事情。

  • 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”

1.2 语法

su [用户名]

切换用户之后,想要退回上次用户可以用Ctrl + d 实现,也可以用exit 指令实现。 

1.3 sudo指令

但是有时候我们并不知道root 用户的密码,但是又需要root 用户去执行某条指令,那么这时就需要输入指令 sudo 指令 ,这条指令就可以提升我们要执行指令的权限,即让root 用户执行。但是使用这个指令有一个条件就是root 用户将此普通用户添加到可信任白名单中。

如果要将某个用户添加进入可信任白名单中,首先在root 用户下,通过指令 vim /etc/sudoers对应文件。

然后我们就可以使用sudo 指令 来提升指令时的权限。

二、 Linux权限管理

2.1 用户划分

在Linux中,为了方便管理文件,还对我们的用户或者文件访问者进行了分类:

  • 用户(u-User):文件或目录的所有者
  • 组(g-Group):文件或目录所属的用户组
  • 其他用户(0-Others):除所有者和所属组之外的所有其他用户

因为other可能存在多个,所以除了文件拥有者和文件所属组之外的都叫other

2.2 文件类型和权限

2.3.1 文件类型

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

2.3.2 基本权限

  • 读取(r):允许查看文件内容或列出目录内容。
  • 写入(w):允许修改文件内容或在目录中创建、删除文件。
  • 执行(x):允许执行文件或进入目录。
  • “—”:表示不具有该项权限

每个组的三个权限为 r w x,顺序不能改变,以下为详细解析:

字符表示法说明
r - -仅可读
- w -仅可写
- - x仅可执行
r w -可读可写
r - x可读可执行
- w x可写可执行
r w x可读可写可执行
- - -无权限

其实除了这种表示方法之外还有一种表示方法那就是八进制表示法,如下图:

字符表示法二进制八进制数值表示法说明
r - -1004仅可读
- w -0102仅可写
- - x0011仅可执行
r w -1106可读可写
r - x1015可读可执行
- w x0113可写可执行
r w x1117可读可写可执行
- - -0000无权限

 这种方式写起来更加方便,不需要使用用户符号+/-权限字符的方式,这在下面会提到

2.3 权限管理

2.3.1 修改文件权限

在了解权限的分类之后,我们接下来学习如何更改文件的访问权限:

语法:chmod 选项 权限 文件名

修改方法:chomd 用户符号+/-权限字符 文件

  • 用户符号:u:拥有者,g:所属组,o:other,a:所有用户。
  • 权限字符:r:读取,w:写入,x:执行

注:

  1. 用户只能修改自己的文件权限
  2. 没有权限系统会拒绝访问
  3. 确定权限信息时,系统会先确定用户属性,是拥有者,所属组,还是other用户角色确定,只确定一次,顺序是:拥有者,所属组,other。如果先确定了是拥有者,但没有部分权限,即使所属组拥有权限,也不能进行对应操作
  4. root 用户不受权限约束
  5. 可执行权限需要文件本身是一个可执行文件(例如.c文件)

2.3.2 修改文件拥有者和所属组

  1. 语法:chowm  选项  修改后的拥有者  指定文件名或者目录名
  2. 功能: 修改文件的拥有者。
  1. 语法:chgrp  选项  修改后的所属组  指定文件名或者目录名
  2. 功能: 修改文件的所属组。

注:此类修改需要高权限(sudo指令或者root权限)

 2.4 目录权限 

对于普通文件来说,可读,可写,可执行这种字面含义就能帮助我们理解其权限的作用,但是对于目录来说,就有所区别了。

  1. 可读权限: 如果用户没有该目录的可读权限,则无法通过ls指令查看目录中的文件内容。
  2. 可写权限: 如果用户没有该目录的可写权限,则无法通过一系列指令在目录中创建文件或删除文件。
  3. 可执行权限: 如果用户没有该目录的可执行权限,则无法通过cd指令进入到目录当中。

2.5 文件掩码

实际上,新建文件的默认权限为666(rw- rw- rw-),新建目录的默认权限为777(rwx rwx rwx),其中第一位与特殊权限相关,这里我们不需要深究。但是实际上新建文件与目录的默认权限并不如上所说,这是怎么回事呢?

其实这种情况就与我们的文件掩码 umask 有关了,最终权限是是默认权限(mask)和umask取反后按位与的结果(mask & ~(umask))

其中需要注意的是:root用户的默认掩码为0022,而普通用户为0002。

umask的目的:希望在umask中出现的权限,都不应该在最终权限中出现

为什么要用umask

  1. 默认权限由系统自主决定,无法在创建时更改,umask可以让系统可配置,可灵活满足不同需求
  2. 特殊情况下,不同系统的默认权限可能不同,通过配置umask,可以在一定程度上控制文件的默认权限,让代码可控性更强

我们可以通过这个指令 umask 八进制数字 来修改umask的值 

2.6 粘滞位

我们在项目开发中会发现一种问题,我没有权限对一个文件进行写入和读取,但却能删除,这是为什么呢?

一个文件能否被删除与自身的权限无关,与所处的目录权限有关,虽然这个文件的权限为root,权限设置了无法进行任何操作,但因为我在文件所在的目录拥有写入权限,所以能对目录里面的文件进行删除。

所以了为了解决这个问题就引入了粘滞位的概念。

为目录添加粘滞位特别简单只需要输入指令:chmod +t 目录名

  • 粘滞位只对目录有效,对文件无效
  • 设置粘滞位后,其他用户仍然可以修改文件内容,但不能删除或移动文件。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部