前言:
在前面我们已经学习了Linux的基础指令,相信大家对Linux已经有了一定的认识,今天我们来学习Linux权限的相关知识点,Linux权限是Linux初学者必须要掌握的内容
目录
一、Linux下用户类型
二、权限基本概念
三、权限的表示
四、文件访问权限的相关设置方法
1. chmod指令
2. chowm指令
3. chgrp指令
4. umask指令
五、目录权限
粘滞位
六、特殊权限
七、总结
一、Linux下用户类型
在正式讲解Linux权限管理前,我们先来了解这样一个知识:Linux下的用户类型
在Linux下用户其实有两种类型:超级用户和普通用户——超级用户就是我们配置好环境后默认的用户类型,它也叫root用户,而普通用户则是我们在超级用户下自己创建的,因为为了平时学习和工作方便,我们可能需要多个用户身份,就好比VS下多个可执行程序文件一般,而普通用户跟超级用户比是有权限约束问题的,也就是说有些文件之类的可能在普通用户下无权访问,而超级用户则可以随意访问
我们可以用这样一个指令来查看我们当前的身份:whoami
超级用户:
普通用户:
这里的temp是普通用户的用户名,是自己创建的,而且一个超级用户可以创建多个普通用户,至于如何创建普通用户,我们会在下一篇进行详细讲解
二、权限基本概念
在 Linux 中,文件和目录的权限由以下三种操作控制:
- 读取(Read,r):查看文件内容或列出目录内容。
- 写入(Write,w):修改文件内容或在目录中添加、删除文件。
- 执行(Execute,x):执行文件(如脚本或程序)或进入目录。
这些权限可以被分配给三种类型的用户:
- 文件所有者(User):文件的创建者或拥有者。
- 用户组(Group):与文件所有者同属一个组的用户。
- 其他用户(Others):不属于文件所有者和用户组的所有其他用户。
三、权限的表示
在这里我们先来解决一个问题:就是我们上面一直所说的权限到底是什么?
其实这里的权限说的是我们所创建的文件不同用户的执行能力
当我们查看我们所创建的文件的详细信息时:
我们可以看到每个文件的信息都是由相似的一排组成,那么这些信息分别表示什么意思呢?
如下图所示:
在 Linux 中,文件权限通常以字符串的形式表示,就比如上图中的:
这里,字符串的第一个字符表示文件类型:
-
表示普通文件d
表示目录l
表示符号链接- p:管道文件
- c:字符设备文件(例如屏幕等串口设备)
- s:套接口文件
b :块设备文件(例如硬盘、光驱等)
接下来的九个字符分为三组,每组三个字符,分别表示所有者、用户组和其他用户的权限:
- 第一组(
rwx
):文件所有者的权限- 第二组(
r-x
):用户组的权限- 第三组(
r--
):其他用户的权限
每个字符的意义如下:
r
:可读w
:可写x
:可执行-
:无权限
因为权限具有二态性,所以我们可以用二进制0/1来表示(可读可写可执行为1,无权限为0),比如一个文件的所有者对应的权限为:rwx,它的二进制表示为111,八进制表示为7
四、文件访问权限的相关设置方法
1. chmod指令
功能:设置文件的访问权限
注意事项:只有文件的拥有者和root用户才有权修改文章权限
chmod命令权限值的格式有两种:
① 用户表示符+/-=权限字符
+ : 向权限范围增加权限代号所表示的权限
- : 向权限范围取消权限代号所表示的权限
= : 向权限范围赋予权限代号所表示的权限
用户符号 :
u :拥有者
g :拥有者同组用
o :其它用户
a :所有用户
# chmod u+w /home/abc.txt
# chmod o-x /home/abc.txt
除了上面用字母表示外,我们还可以用八进制数字的方法来表示:
实例:
# chmod 664 /home/abc.txt
# chmod 640 /home/abc.txt
2. chowm指令
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
注意事项:只有root用户才有权修改文件的拥有者
选项:-R 递归修改文件的拥有者
实例:
# chown user1 f1
# chown -R user1 filegroup1
3. chgrp指令
功能:修改文件的所属组
格式:chown [参数] 用户组名 文件名
注意事项:只有root用户才有权修改文件的所属组
选项:-R 递归修改文件的所属组
实例:
# chgrp users /abc/f2
4. umask指令
功能:查看或修改文件掩码
在讲解这个指令前,首先我们要知道掩码是什么
当我们在Linux下创建文件时:
如图,我们创建了一个普通文件和一个目录文件
当我们查看它们两个权限时,我们可以看到目录文件的权限为775(八进制数组表示),普通文件的权限为664
但实际上默认权限与我们所看到的是有差别的,目录文件的默认权限为777,普通文件的默认权限为666,之所以我们看到的是上面的,就是因为掩码的存在
我们可以通过umask查看掩码:
我们可以看到掩码为0002,加到775中和664中恰好就是默认权限值,所以也就是说我们实际上得到的文件与默认权限相比,缺少了部分权限,而这一部分权限就是umask掩码中的权限
最终的权限 = 默认权限 & (~umask)
所以我们可以通过修改umask值来改变我们所创建的目录或文件的起始默认权限,从而达到我们想要的结果
五、目录权限
目录的权限与上面讲的文件的权限的内容是有不同的
目录文件的三种权限的结果如下:
可执行权限: 如果目录没有可执行权限, 则无法cd到目录中.
可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
也就是说,当一个用户对一个目录文件有写权限时,就可以删除里面的文件,即使这个用户可能对里面的文件并没有任何权限
但是这样就会导致一个问题,当我们以后在工作中,如果我们使用了网上的一个开源的目录文件,我们都是这个目录文件所属组的一员,且具有写权限,那么是不是意味着如果我们在这个目录文件下创建一个文件,别人可以随意的删除?
为了解决这个问题,我们引入了粘滞位的概念
粘滞位
- 当设置在目录上的粘滞位时,只有文件的所有者可以删除或重命名该目录中的文件。标志位用
t
显示在其他用户权限的位置。
实例:
chmod +t dir # 设置粘滞位
注意事项:
1、目录的可执行权限是表示你可否在目录下执行命令。
2、如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
3、而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限,所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
六、特殊权限
Linux中除了基本的权限外,还给了三种特殊的权限,上面的粘滞位就是其中一种
如下:
Set UID(SUID):
- 当设置了 SUID 权限的可执行文件被运行时,程序以文件所有者的权限运行。标志位用
s
显示在所有者权限的位置。Set GID(SGID):
- 与 SUID 类似,但程序以用户组的权限运行。标志位用
s
显示在用户组权限的位置。Sticky Bit:
- 当设置在目录上的 Sticky Bit 时,只有文件的所有者可以删除或重命名该目录中的文件。标志位用
t
显示在其他用户权限的位置。
设置这些特殊权限时,可以使用 chmod
命令:
chmod u+s file.txt # 设置 SUID
chmod g+s dir # 设置 SGID
chmod +t dir # 设置 Sticky Bit
七、总结
Linux 权限管理是确保系统安全的关键组成部分。理解用户、组和权限之间的关系,以及如何查看和修改权限,对于管理和保护 Linux 系统至关重要。通过合理地设置权限,可以有效地防止未授权访问和数据泄露。
希望本文能帮助您更好地理解 Linux 权限机制,并在实际学习和工作中应用这些知识。
感谢各位大佬观看,创作不易,还请各位大佬点赞支持!!!