Linux基础入门5:Linux权限管理

2022年7月27日 194点热度 0人点赞 0条评论
大家好,这里是小瑶
今天de笔记主要记录Linux权限管相关的内容
现在开始进入主题~

图片

☁️:引言

权限这一块的知识我是第一次接触,但是笔者觉得这一块的知识非常的实用且有趣,虽然Linux基础入门我写了六个子系列,但是严格意义上来讲这个系列的核心就三块:第一是对Linux下相关指令的学习,这是我们入门Linux操作系统的第一步;第二个内容就是今天我要写的Linux下的权限管理;第三个就是接下来的完结篇,主要是对Linux环境基础开发工具的使用做个汇总。

☁️:主题一:Linux中具体用户的分类

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

超级用户:可以在Linux系统下做任何事情,权限不受管控。

普通用户:权限受管控,一般只能在自己的工作目录(/home/xxx)工作。

命令:su [用户名]

功能:切换用户。

用户切换:

root->普通用户user:  su user

普通用户->root:su root(root可以省略)

图片

☁️:注释1:密码管理

图片

☁️:注释2:如果我要从自己的用户切换到别人的用户怎么做?

法一:如图:

图片

法二:root用户直接切换(免密码):su [待切换用户账号]

☁️:注释3:如何提升当前指令的权限?

假设我只想提升当前指令的权限,不想切换到root用户界面:例如,我试图以一名普通用户的身份修改另一个普通用户的账号密码,我该怎么做???

语法:sudo 指令

功能:提升当前指令的权限。

图片

当我们直接输入以上指令,试图以普通用户YYL去修改普通用户Homin的密码时,无法修改成功。系统会提示我们YYL没有被添加到超级用户(root)的信用列表当中,所以该条指令的权限得不到提升。所以要提升当前指令的权限,必须要先将普通用户(YYL)添加到信任列表当中。

那么:如何将普通用户添加到信任列表呢?

step1 :切换到超级用户;只有超级用户才有权力将普通用户添加到信任列表。

图片
step2 :使用vim打开文件sudoers进行添加。

图片

step3 :下滑到弹出来的文件的如图所示的地方,按如图所示的格式将待提升权限的普通用户(YYL)添加到信任列表当中。(注意:要先按 :"i",进入插入模式添加;添加完成后按:esc键进入默认模式下,按"shift键 +:",紧接着再按 :"wq!"保存退出,然后按"ctrl +D"返回上一级用户YYL,如step4所示修改Homin的密码就可以了。)

图片

step4:如图。

图片

☁️:主题二:Linux权限管理

在主题开始之前,我们先思考一个问题:现实生活中什么是权限?

图片


☁️01:文件访问者的分类(人)

文件访问者的分类可将用户分为三大类:文件的拥有者(owner/User)、文件的所属组(Group)和文件的其他用户(Others)。对于某一文件而言,root和普通用户可以扮演其拥有者、所属组和其他用户多种角色,两者并不冲突,反而相互补充。此外,在Linux当中,所有用户都要隶属于某一个组,当这个组只有你一个人时,该组就以你的用户名为组名。所属组的存在是为了更灵活的进行权限配置,满足组内团队协作的功能。除了文件拥有者和所属组之外的其他用户都叫Other。

图片

☁️02:文件类型和访问权限(事物属性)

文件 = 文件内容 + 文件属性;文件内容可通过cat指令查看,文件属性如图所示。Linux下文件的权限类型一般包括读,写,执行。对应字母分别为 r、w、x。使用ll指令可以查看文件的类型和属性。

图片

图片

如图,第一列的第一个字符叫做文件的类型,在这里需要注意的一点是:Linux系统不以文件名的后缀区分文件类型,而是通过ll显示的第一个字符区分文件类型。
a)常见的文件类型如下:
1)- :代表普通文件、文本、源代码、可执行程序、第三方动静态库等。(我们这里以普通文本居多)
2)d : 目录文件。
3)l : 链接文件(类似于windows当中的快捷方式)。
4)p : 管道文件。
5)b  :  块设备文件(例如硬盘、光驱等)。
6)c  : 字符设备文件。
7)s  :  套接口文件。
b)基本权限
i.读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
ii.写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
iii.执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
iv.“—”表示不具有该项权限。
在这里我们还要注意一个问题:不是说Linux不以文件后缀名区分文件类型吗?为什么我将test.c文件重命名为test_1.txt后,用gcc编译不过!!!
图片
那是因为:gcc != Linux操作系统,而是Linux操作系统上面使用的一款编译器软件。图片
去掉第一列后三三为一组,分别代表该文件相对于拥有者、所属组、其他用户是否拥有某种权限(可读可写可执行)。

图片

其中每一组对应的权限的位置是确定的。

图片

举个例子:请问如何描述myfile.txt这个文件的权限呢?

图片

myfile.txt文件是一个普通文件,该文件的拥有者和所属组都是YYL,,且对其都是可读可写的,该文件的其他用户对其只有读的权力。其他属性如下图所示,我就不赘述了。


图片

所以:以后我们对文件的权限操作主要涉及两个方面:一是修改文件的属性,二是修改文件访问者(通俗来说就是人)。注意注意:超级用户(root)不受权限的约束。
☁️03:文件权限值的表示方法
文件权限值有两种表示方法,第一种是字符表示法(通过ll指令打印文件权限时的表示方法就是字符表示法),第二种是8进制数值表示方法,之所以衍生出八进制数值表示法是因为字符表示法中的每一个字符所在的位置都是两态的,要么为真(1)、要么为假(0),所以我们可以将这三个字符换为三个二进制位,进而转换为一个八进制位来表示每一类用户所拥有 的权限。
1)字符表示法

图片

2)八进制数值表示法

图片

☁️04:文件访问权限的相关设置方法
在linux下创建一个文件或者目录之后是可以通过chmod等命令进行权限设置,来达到给当前用户、用户组用户以及其他用户分配不同的访问权限。通过03的两种权限值表示法,我们很容易知道更改文件访问权限的格式有两种,一种是字符型,另一种是三位八进制数字。

权限更改语法chmod 选项 权限 文件名或目录名

功能:设置文件的访问权限。
常用选项:-R 递归修改目录文件的权限。

chmod指令修改权限值的格式(只有文件的拥有者和root才能改变文件的权限,普通用户修改权限需要进行权限提升):

格式一:用户符号 +/-/= 权限字符

1)+:向权限范围增加权限代号所表示的权限。

2)-:向权限范围取消权限代号所表示的权限。
3)=:向权限范围赋予权限代号所表示的权限。
用户符号:
1)u:拥有者。
2)g:所属组。
3)o:other。
4)a:所有用户。
示例如下:

图片

格式二:三位八进制数字
具体操作:将对应的八进制数转换为二进制,对应上权限即可。

图片

怎么修改文件的拥有者(人)

修改文件的拥有者用到的指令是chown。需要切换到root用户进行操作,如果是普通用户,则需要进行权限提升。

语法: chown 选项 用户名 文件名或目录名
功能: 修改文件的拥有者。
常用选项: -R 递归修改目录文件的拥有者。

实例如下:

图片

图片

怎么修改文件的所属组

修改文件所属组用到的指令是chgrp,也需要切换到root用户或者进行权限提升。

语法:chgrp 选项 用户名 文件名或目录名
功能:修改文件的所属组。
常用选项:-R 递归修改目录文件的所属组。

实例如下:

图片

☁️05掩码:操作函数:umask

umask是用来指定"目前用户在新建文件或者目录时候的权限默认值",它的功能是查看或修改文件的的掩码。当新文件被创建时,其最初的权限由文件创建掩码决定。用户每次注册进入系统时,umask命令都会被执行,并自动设置掩码改变默认值,新的权限将会把旧的覆盖。umask从权限中“拿走”相应的位。设置umask的目的就是为了用户在创建文件时需要它是什么权限就得到什么权限。

语法:umask 权限值

功能:查看或修改文件掩码。

新建文件夹默认权限是:0666

新建目录默认权限是:0777

图片

为啥在实际中,我们新建的文件或目录的值与理论上的默认权限不一样呢?原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask。

下面我们来论证一下确实是umask影响了我们的最终权限。

论证一:数学推导:

图片

论证二:代码演示:

图片

也就是说:凡是在权限掩码中出现的权限都不应该在最终权限中出现。

图片

☁️06:目录的权限(很重要)

Linux下一切皆文件,目录也是文件,文件=内容+属性,而目录里面保存的是部分文件的“属性”,包括文件名。对于目录来说,可读可写可执行分别代表着:

1)可读权限(r):如果目录没有可读权限,则无法用ls等指令来查看目录中的文件内容。

2)可写权限(w):如果目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件。

3)可执行权限:如果目录没有可执行权限,则无法cd到目录中。

在这种情况下,我们思考一个问题:Linux下可以存在一些目录,拥有者和所属组都是root(也可以是普通用户),其他人允许以other的身份在该目录下进行文件的创建、读取、删除和修改等。那是不是只要用户具有该目录的写权限,就可以随意删除公共目录中的文件,而不论该用户是否具有这个文件的写读权限呢?答案是:是的,我们来看一下这个过程:

图片

我们可以看见普通用户Homin删除了共享目录中不属于自己的文件root.txt,这显然是非常不合理的。为了解决这个不合理的问题,我们可以给共享的目录加上粘滞位。

语法: 

图片

功能: 给目录加上粘滞位。

当一个目录被设置为粘滞位,则该目录下的文件只能由:
1)超级用户删除。
2)该目录的拥有者删除。
3)该文件的拥有者删除。

注意: 虽然目录被加上了粘滞位,但如果用户有该目录的可写权限,则不影响其在该目录下创建文件。

图片

注意不要做铁憨憨,答主就是在all路径下执行粘滞位指令一直报错,还找不到原因.......尴尬!!!所以还是要多动手,多调试,多思考!!!

错误代码演示!!!:

图片

错误代码演示!!!:

图片

错误代码演示!!!:

图片

图片

59700Linux基础入门5:Linux权限管理

这个人很懒,什么都没留下

文章评论