🔑🔑博客主页:阿客不是客
🍓🍓系列专栏:深入代码世界,了解掌握 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 - - | 100 | 4 | 仅可读 |
- w - | 010 | 2 | 仅可写 |
- - x | 001 | 1 | 仅可执行 |
r w - | 110 | 6 | 可读可写 |
r - x | 101 | 5 | 可读可执行 |
- w x | 011 | 3 | 可写可执行 |
r w x | 111 | 7 | 可读可写可执行 |
- - - | 000 | 0 | 无权限 |
这种方式写起来更加方便,不需要使用用户符号+/-权限字符的方式,这在下面会提到
2.3 权限管理
2.3.1 修改文件权限
在了解权限的分类之后,我们接下来学习如何更改文件的访问权限:
语法:chmod 选项 权限 文件名
修改方法:chomd 用户符号+/-权限字符 文件
- 用户符号:u:拥有者,g:所属组,o:other,a:所有用户。
- 权限字符:r:读取,w:写入,x:执行
注:
- 用户只能修改自己的文件权限
- 没有权限系统会拒绝访问
- 确定权限信息时,系统会先确定用户属性,是拥有者,所属组,还是other,用户角色确定,只确定一次,顺序是:拥有者,所属组,other。如果先确定了是拥有者,但没有部分权限,即使所属组拥有权限,也不能进行对应操作
- root 用户不受权限约束
- 可执行权限需要文件本身是一个可执行文件(例如.c文件)
2.3.2 修改文件拥有者和所属组
- 语法:chowm 选项 修改后的拥有者 指定文件名或者目录名
- 功能: 修改文件的拥有者。
- 语法:chgrp 选项 修改后的所属组 指定文件名或者目录名
- 功能: 修改文件的所属组。
注:此类修改需要高权限(sudo指令或者root权限)
2.4 目录权限
对于普通文件来说,可读,可写,可执行这种字面含义就能帮助我们理解其权限的作用,但是对于目录来说,就有所区别了。
- 可读权限: 如果用户没有该目录的可读权限,则无法通过
ls
指令查看目录中的文件内容。- 可写权限: 如果用户没有该目录的可写权限,则无法通过一系列指令在目录中创建文件或删除文件。
- 可执行权限: 如果用户没有该目录的可执行权限,则无法通过
cd
指令进入到目录当中。
2.5 文件掩码
实际上,新建文件的默认权限为666(rw- rw- rw-),新建目录的默认权限为777(rwx rwx rwx),其中第一位与特殊权限相关,这里我们不需要深究。但是实际上新建文件与目录的默认权限并不如上所说,这是怎么回事呢?
其实这种情况就与我们的文件掩码 umask 有关了,最终权限是是默认权限(mask)和umask取反后按位与的结果(mask & ~(umask))
其中需要注意的是:root
用户的默认掩码为0022,而普通用户为0002。
umask的目的:希望在umask中出现的权限,都不应该在最终权限中出现
为什么要用umask
- 默认权限由系统自主决定,无法在创建时更改,umask可以让系统可配置,可灵活满足不同需求
- 特殊情况下,不同系统的默认权限可能不同,通过配置umask,可以在一定程度上控制文件的默认权限,让代码可控性更强
我们可以通过这个指令 umask 八进制数字 来修改umask的值
2.6 粘滞位
我们在项目开发中会发现一种问题,我没有权限对一个文件进行写入和读取,但却能删除,这是为什么呢?
一个文件能否被删除与自身的权限无关,与所处的目录权限有关,虽然这个文件的权限为root,权限设置了无法进行任何操作,但因为我在文件所在的目录拥有写入权限,所以能对目录里面的文件进行删除。
所以了为了解决这个问题就引入了粘滞位的概念。
为目录添加粘滞位特别简单只需要输入指令:chmod +t 目录名
- 粘滞位只对目录有效,对文件无效
- 设置粘滞位后,其他用户仍然可以修改文件内容,但不能删除或移动文件。