Linux 第五讲 --- 权限管理
前言:
在掌握了Linux基础指令之后,我们将深入探讨Linux系统中一个至关重要且独具特色的功能——权限管理系统。作为多用户操作系统的典范,Linux通过一套精细的权限控制机制,确保了系统安全性和资源管理的有效性。
从简单的文件读写控制,到复杂的用户组权限分配,Linux提供了一套完整而灵活的权限体系。
在本文中,我们将从最基本的权限表示开始,逐步解析rwx权限、用户与组的概念、将学习如何使用chmod、chown等命令控制访问权限,理解umask,并探索特殊权限如SUID、SGID和粘滞位的高级应用。
让我们开始这段探索Linux系统权限的旅程。
目录
前言:
一、Linux下的用户
1.linux中的两类用户
2.如何进行不同用户之间的切换
2.1用root的账号登陆
编辑2.2使用指令改变身份
su指令
演示:
su -指令
3.如何仅提升某条指令的权限
sudo指令
演示 :
如何将普通用户添加到白名单
二、权限基本概念
2.1文件权限的概念
2.2身份权限的概念
编辑
三、文件权限的查看
文件属性的分析
1.第一个字符
2.第二个到第10个字符
3.权限的表达
四、文件权限的设置方法
文件权限的改变
chmod指令
用户符号:
演示:
身份的改变
chown指令
演示:
chgrp指令
演示:
五、目录权限
目录权限的类别
演示:
六、粘滞位与权限掩码
1.粘滞位
2.权限掩码
umask
演示
七、特殊权限
总结
一、Linux下的用户
1.linux中的两类用户
root:超级用户(基本不受权限的约束)
普通用户:普通用户是受权限的约束的
区别:
超级用户可以再linux系统下做任何事情,不受限制,但普通用户:在linux下做有限的事情。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
换句话来说,所有的权限的提出都是用来限制普通用户的,而超级用户几乎不受限制。
2.如何进行不同用户之间的切换
可能有时你的权限不够,需要从普通用户切换到超级用户,进而完成某些操作。
2.1用root的账号登陆
这个方法没啥好说的,直接在登陆的时候使用root的账号和密码就好。

2.2使用指令改变身份
su指令
语法: su 用户名(当然不带用户名时默认是root账号,也可以带“-”,效果是一样的)
功能: 用户切换。(既可以切成root,也可以切成其他账号)
演示:
1)由普通切root
2)普通切普通
但是普通用户的切换是需要知道被切换账号的密码的,同时root账号可以随便切换到普通账号上并不用输入密码。
3)退出
现在当我们想要退出来的时候,我们可以直接使用exit或者CTRL + D快捷键,这样我们就可以退出root用户了
su -指令
它的使用是与su指令的使用是差不多的,但还是有些不同的。
我们注意到,当我们输入密码以后,它是一种以登录的方式进入进去的,所以会显示登录的一些信息,并且它的登录后当前的目录直接切换为家目录.
而像su就像是一个直接的身份转变。直接将一个普通用户变成root,但并不是以重新登录的身份变化的,而是把一个人硬变成了root
同样的,对于su -以后的root,我们直接Crtl+d的话,会显示logout.
3.如何仅提升某条指令的权限
但可能某些情况下,你只想提升当前指令的权限,不愿意切换成超级用户。
例如在操作系统上安装软件的时候,普通用户是没有权限安装的,那是因为安装软件其实就是将某些文件拷贝到系统的目录下,而普通用户是没有权限对系统文件进行修改的。
所以我们可以使用sudo指令进行提权,然后输入密码就行。
sudo指令
语法: sudo 指令
功能: 提升当前指令的权限,并且在一段时间内具有root权限。
演示 :
在这里我们就必须点明,我们输入密码的时候是什么密码,或许有的同学想说是root的密码,但是大家想一下,合理吗?
一个普通用户想要执行某些操作,操作系统的管理员需要先将root密码告诉它,那这样还区分什么root与普通账号?
我们现在观察执行结果,我们发现操作系统竟然是要求输入我们当前账号的密码。
在这里我们一定会觉得有问题,因为sudo只需要输入当前账号的密码就可以了,那岂不是人人都是root,即便不知道root密码的情况下,那不也可以对系统文件进行修改吗?
可真当我把密码输入之后,系统告诉我,该账号不在某个文件当中,拒绝了我们的指令。
所有这个“某个文件”是啥,为啥输入的是我们账号的密码???
某个文件就是操作系统的白名单,输入我们密码的前提是,我们被root账号添加到了系统的白名单中。
如何将普通用户添加到白名单
非常不建议,不了解vim的同学进行修改,在下篇博客当中我会专门介绍vim的使用,大家可以在那篇博客后在修改。
1.那么首先你得先切换到超级用户,只有超级用户才有权力将普通用户添加到信任列表。
2.使用下列指令
vim /etc/sudoers
3.在该文件当中找到下面光标显示的那行,进行修改。
操作:
4.结果
二、权限基本概念
其实Linux权限说的是不同用户的对同个文件(目录)执行能力,权限 = 身份的权限 + 文件的权限。
对某一个文件是否有读、写、执行权限,第一看操作者的身份,第二看这个文件对于我们身份是否有相应的文件权限。
也就是说,即使我(普通用户)是这个文件的拥有者,如果这个文件对我没有读权限,我也不能读这个文件。
2.1文件权限的概念
在Linux当中文件权限主要是分为了三类。
- 读取(Read,r):查看文件内容或列出目录内容。
- 写入(Write,w):修改文件内容或在目录中添加、删除文件。
- 执行(Execute,x):执行文件(如脚本或程序)或进入目录。
2.2身份权限的概念
- 文件所有者(User):文件的创建者或拥有者。
- 用户组(Group):与文件所有者同属一个组的用户。
- 其他用户(Others):不属于文件所有者和用户组的所有其他用户。
注:
1. 文件有可执行权限,和文件能否被执行,是两码事。
例如:在Linux我们创建一个普通的文本文件,我们可以主动赋予它可执行权限,但真到我们执行的时候,其实没啥反应。关于权限的改变后面有讲解。
演示:
2. 确定身份的过程,只能确定一次,一般顺序为拥有者、所属组、其他用户
在我们对文件进行操作的时候,操作系统首先会判断操作者的身份,然后再根据文件的本身的权限,来决定用户的操作是否合法,而上面的意思是,我们对文件的身份认定只有一次机会。
例如:我创建了一个文件但是我将文件拥有者的写权限去除,给文件的用户组加上了写权限,我们在对文件进行写的时候,操作系统会阻止我们的操作。
三、文件权限的查看
在Linux当中的权限查看,可以直接使用我们在前面的学习到的ls -l 指令;
当我们查看我们所创建的文件的详细信息时,如下图:
我们可以看到每个文件的信息都是由相似的一排组成,那么这些信息分别表示什么意思呢?
各个字符具体的含义如下图,当然本文的重点是权限部分,所以今天关于后面的文件大小等属性就不在本文介绍了。
文件属性的分析
1.第一个字符
这里第一个字符表示的是文件的类型,一般有以下几个类型
- - 普通文件(文本,可执行文件,库文件)
- d 目录
- b 块(设备文件)
- c 字符设备文件(显示器,键盘文件)
- p 管道文件
在Linux的环境下,大部分的文件类型都是普通文件(-)与目录(d),所以今天讲解的权限类型也是这两种。
2.第二个到第10个字符
接下来的九个字符分为三组,每组三个字符,分别表示所有者、用户组和其他用户的权限:
每组的三个字符又是对应的各个身份对文件的拥有的权限(读,写,执行)。
3.权限的表达
因为权限具有二态性(只有“有”和“没有”两个状态),所以我们可以用二进制0/1来表示(有权限为1,无为0),比如一个文件的所有者对应的权限为:rwx,它的二进制表示为111,八进制表示为7
四、文件权限的设置方法
有关于文件权限的设置方法主要是四个指令(chmod指令、chown指令、chgrp指令与umask指令)
文件权限的改变
chmod指令
功能:设置文件的访问权限
用法:chmod 【执行对象】【符号】【权限状态】
+ : 向权限范围增加权限代号所表示的权限
- : 向权限范围取消权限代号所表示的权限
= : 向权限范围赋予权限代号所表示的权限注意事项:只有文件的拥有者和root用户才有权修改文章权限
就是像我们在上面说的权限的几种显示,在这里的权限的状态设置同样是有几种方式,我们也需要明白不同用户在权限改变时的表示方法。
用户符号:
- u:拥有者
- g:所属组
- o:其他用户
- a:所有用户
演示:
1)以8进制方式
2)以字符方式
当然权限的改变模式就上面两种,大家自己多操作几次就熟悉了。
身份的改变
用户的身份的改变主要取决与两个指令,而这两个指令的执行者只能是对应文件的拥有者和root。
- chown:更改文件的拥有者
- chgrp:更改文件的用户组
在身份权限的概念当中,我们提到了用户有三个身份(拥有者,用户组,其它人),而关于用户权限的更改也是文件权限的一个重要的部分。
chown指令
命令:chown 用户名 文件名
功能:修改文件的拥有者
演示:
同样的,在我们将文件的拥有者改变后,我们就无法在对文件的属性进行操作了。
chgrp指令
命令:chgrp [参数] 用户组名 文件名
功能:修改文件的所属组
常用选项:
-R 递归修改文件或目录的所属组
演示:
他的使用方法和特点是与chmod指令一样的,所以这里就不在赘言。
1)普通版本
2)带-R版本
五、目录权限
在我们之前的学习当中,提到了在Linux操作系统中,一切皆文件,那么目录不也是一个特殊的文件呢。所以在这部分我们将了解一下目录权限与普通文件权限有啥区别。
目录权限的类别
目录文件的三种权限如下:
- 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中.
- 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
- 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
关于上面的描述,我们理解起来是不难的。
如果把目录当中一个文件的话,那么在目录里面创建文件不就是相当于对文件做写入吗,对应到的就是“w”。可读权限也是同理,查看目录里面的文件相当于对普通文件进行读取,对应的权限是“r”; 可执行也对应的是进入目录当中,对应的权限是“x”。
演示:
1)没有可执行权限
2)没有可读权限
3)没有可写权限
注:
如果要是一个目录没有了可执行权限x
,那么将不能进入该目录,并且也无法查看该目录下的文件信息,即使有对应目录的可读权限,查出目录内部的文件信息也是一串“?”号。
六、粘滞位与权限掩码
1.粘滞位
当一个用户对一个目录文件有写权限时,就可以删除里面的文件,即使这个用户可能对里面的文件并没有任何权限,这话是什么意思呢?
1)我们先创建一个没有任何权限的文件
2)再由其他账号对该文件进行删除
这不就反映出一个问题,只要拥有目录可执行权限就可以删除目录内部的文件,这不是太危险了吗?
为了解决这个问题,我们引入了粘滞位的概念
粘滞位
- 语法:chmod +t 【目标目录】
- 作用:当设置在目录上的粘滞位时,只有文件的所有者可以删除或重命名该目录中的文件。标志位用
t
显示在其他用户权限的位置
2.权限掩码
在提到权限掩码这个话题前,我们了解完文件权限与目录权限后,心中可能会有一个问题,那就是操作系统是如何决定一个文件或目录的默认权限呢?
这是系统当中一个新文件或目录的默认权限。
这系统直接创建的文件权限是我们所说的默认权限吗?其实不是的。
注:不同Linux环境的权限掩码的初始值是有区别的。
实际上默认权限与我们所看到的是有差别的,目录文件的默认权限为777,普通文件的默认权限为666,那为啥实际权限是644,755呢?这就是操作系统当中的权限掩码在起作用了
通过一个指令也可以对权限掩码查看和修改
umask
命令:umask
功能:查看或修改文件掩码
常用选项:
umask 权限值
演示
1)进行查看和修改
实际的创建出的文件权限的大小是由系统的权限掩码与默认权限一起决定的。
假设默认权限是mask,则实际创建的出来的文件权限是
最终的权限 = 默认权限 & (~umask)
所以我们可以通过修改umask值来改变我们所创建的目录或文件的起始默认权限,从而达到我们想要的结果
七、特殊权限
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 系统至关重要。通过合理地设置权限,可以有效地防止未授权访问和数据泄露。
看到这里的你能否点一个小小的赞呢,我们下期见。