权限这一块的知识我是第一次接触,但是笔者觉得这一块的知识非常的实用且有趣,虽然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 :切换到超级用户;只有超级用户才有权力将普通用户添加到信任列表。
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指令可以查看文件的类型和属性。
myfile.txt文件是一个普通文件,该文件的拥有者和所属组都是YYL,,且对其都是可读可写的,该文件的其他用户对其只有读的权力。其他属性如下图所示,我就不赘述了。
权限更改语法:chmod 选项 权限 文件名或目录名
功能:设置文件的访问权限。 常用选项:-R 递归修改目录文件的权限。
chmod指令修改权限值的格式(只有文件的拥有者和root才能改变文件的权限,普通用户修改权限需要进行权限提升):
格式一:用户符号 +/-/= 权限字符
1)+:向权限范围增加权限代号所表示的权限。
怎么修改文件的拥有者(人)
修改文件的拥有者用到的指令是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,这显然是非常不合理的。为了解决这个不合理的问题,我们可以给共享的目录加上粘滞位。
语法:
功能: 给目录加上粘滞位。
文章评论