【鸟哥的Linux私房菜(二)之权限篇】

Shell的运行原理

我们都知道Windows以图形化界面为交互方式,而Linux以命令行界面为交互方式。Windows和Linux的交互方式虽然不同,但本质是一样的,图形化界面和命令行界面都是为了让用户进行相关操作,而图形化界面和命令行界面就是我们所说的“外壳程序”。
在这里插入图片描述
一. 为什么要有外壳程序呢?
原因就是用户不能直接和kernel进行交互,所以要通过kernel的“外壳程序”,也就是Shell这个媒介来与kernel进行交互。
二. Shell是什么呢?
Shell最简单的定义就是命令行解释器
1)将使用者的命令翻译给核心(kernel)处理。
2)将核心处理结果翻译给用户。
对比Windows中的图形化界面(GUI),我们操作Windows并不是直接操作Windows内核,而是通过图形接口,点击,从而完成我们的操作。Shell对于Linux具有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核,反馈结果再通过内核运行出结果,通过Shell解析给用户。
三. Shell是怎么运行的?运行原理是什么?
1)创建子进程,让子进程进行命令行解释。
2)子进程出现任何问题,都不影响父进程Shell。
对比到Windows中就是,我们每运行一个程序就是创建了一个子进程,例如,登录微信,QQ。而这些子进程当中任何一个进程出现问题,都不会影响父进程,例如,当你的QQ出现卡死情况(程序异常)或你的QQ被关掉(程序终止),但其它子程序仍然可以运行。在Linux中每个指令也是可执行程序,也是通过创建子进程方式。每个用户一旦登录,
在这里插入图片描述
注意: Shell只是所有外壳程序的统称,例如在centos 7当中的外壳程序名叫bash。

Linux当中的权限问题

Linux权限的概念

在Linux下有两种用户,分别是超级用户(root)和普通用户。超级用户root在LInux下做任何事情,几乎不受限制,而普通用户一般只能在自己的工作目录下(/home/XXX)工作,以及在系统上做有限的工作。
换句话来说,所有的权限的概念都是用来现在普通用户的,而超级用户几乎不受限制。

超级用户的命令提示符是‘#’。
在这里插入图片描述
普通用户的命令提示符是‘$’
在这里插入图片描述

如何实现用户账号之间的切换呢?

可能有时候你的权限不够,需要从普通用户切换到超级用户,进而完成某些操作。需要用到su指令
语法:su 用户名
功能: 用户切换
从普通用户切换到root,需要输入root账号的密码
在这里插入图片描述
小贴士:su root 时,root可以省略,因为root账号只有一个,su 后面不写默认是切换为root
从root账号切换为普通账号,无需输入密码
在这里插入图片描述
注意:
1)普通用户无论切换为root账号还是其它普通用户都需要输入待切换用户的账号密码。
2)而从root账号切换为普通账号,无需输入密码。
3)su 指令切换账号,只是暂时切换,切换后所处目录仍然是上次用户所处的目录下,若想切换回上次的用户,Ctrl+D即可。
而su - 与su 有所不同的就是su - 是退出当前用户,重新登录待切换的用户账号,且工作目录就处于切换用户的主工作目录下,相当于退出,重新登录了。
在这里插入图片描述

如何提升当前指令的权限

可能某些情况下,我只是向提升当前指令的权限,没有必要切换到超级用户。需要提权指令,sudo。
语法:sudo 指令
功能:提升当前指令的权限
例如,我现在要以一名普通用户的身份,修改另一名普通用户的账号密码,普通用户无权做这件事情,那么想要拥有root超级管理员的权力,就需要提权。
在这里插入图片描述
需要输入自己的密码(对自己的操作负责)
为什么会提示zpl is not in the sudoers file. This incident will be reported.这句话,该提升说明你没有被添加到白名单中,所有该指令权限得不到提升(怎么可能让一个普通用户随意改别人呢?),只有当你被t超级用户root添加到白名单列表中,你才拥有提升当前指令权限的能力。

如何将普通用户添加到白名单列表?

第一步切换到超级用户root账号下,只有root才有权力将普通用户添加到白名单中。
在这里插入图片描述
第二步切换root后,使用vim打开sudoers进行编辑,进行添加指定用户
步骤:vim /etc/sudoers i进入插入模式后 添加XXX ALL=(ALL) ALL 最后Esc退出插入模式 shift+;==:进入底行模式 wq!保存并退出
在这里插入图片描述
添加完毕后,该用户就可以使用sudo指令,也就是拥有提升当前指令权限的能力了,现在就修改成功了
在这里插入图片描述

Linux权限管理

文件访问者的分类(人)

对于用户来说,权限将用户分为三种角色:
1)文件和文件目录的所有者(文件拥有着
2)文件拥有者所在的组的用户(文件所属组
3)其它用户(other
注意:
1)对于某一文件而言,其拥有者、所属组和other就是由超级用户(root)和普通用户所扮演。
2)在Linux当中,所有用户都要隶属于某一个组,哪怕这个组只有你一个人(此时该组就以你的用户名为组名)。
**为什么会有所属组这个概念呢?**下面举个例子。
在某个公司当中有两个小组团队(A组,B组)在同一个Linux服务器上进行着同一款项目的开发(赛马模式),而你就是A组当中的一员。
在这里插入图片描述
现在你写好了一个文件,如果没有所属组的概念,只有拥有者和other,那么你写的文件只有你自己可以看,倘若你放开可读权限,那么所有人都是other都能看见了,防不住B组的人,所以才有了所属组,这时你将文件设置为拥有者和所属组可见,other不可见,这样就防住B组了,所属组的存在是为了更灵活的进行权限配置,满足团队协作。
**注: **除了文件拥有者和文件所属组之外的都叫other。

文件类型和访问权限(事物属性)

权限涉及到某个具体的事物来说,我们还需要讨论事物本身的属性。对于文件来说,我们应该讨论其文件类型,以及是否具有可读、可写和可执行的属性。

使用指令ll,我们可以看到前面有一串字符,这串字符实际上就代表着该文件的类型和属性。
在这里插入图片描述
这串字符由10个字符组成的。其中第一个字符所代表的就是该文件的文件类型。
在这里插入图片描述
不同的字符代表不同的文件类型。
1)-:代表普通文件。
2)d:代表目录。
3)l:代表链接文件(类似于Windows当中的快捷方式)。
4)b:代表块设备文件(例如硬盘、光驱等)。
5)p:管道文件。
6)c:字符设备文件(比如键盘,显示器)。
7)s:scoket文件。
注意: 在Linux当中,文件类型与文件后缀无关。
剩下的9个字符每三个为一组,分别代表该文件相对于其拥有者、所属组以及other是否拥有某种属性。
在这里插入图片描述
每一组的三个字符的第一个字符代表该文件是否具有可读属性,第二个代表是否具有可写属性,第三个代表是否具有可执行属性。
在这里插入图片描述
若是具有可读属性,则第一个位置的字符为r;若是具有可写属性,则第二个位置的字符为w;若是具有可执行属性,则第三个位置的字符为x。若某一位置为字符 - ,则说明不具有对应位置的属性。

现在我们来阐述一下该文件的类型以及权限。
在这里插入图片描述
data.txt文件是一个普通文件,该文件的拥有者和所属组对其都是可读可写的,但该文件的other对其只有读的权力。

文件权限值的表示方法

a)字符表示方法
ll指令打印文件权限值时的表示方法就是字符表示法。例如
在这里插入图片描述
2)八进制数值表示法
字符表示法中的每一个字符所在位置所表示的结果只有两种可能,要么为真,要么为假,因此我们可以将这三个字符换为三个二进制位,进而换为一个八进制位进行表示。例如
在这里插入图片描述

文件访问权限的相关设置方法
如何改变文件的访问权限

语法: chmod 选项 权限 文件名或目录名
功能: 设置文件的访问权限。
常用选项: -R 递归修改目录文件的权限。
chmod指令权限值的格式:
格式一: 用户符号 +/-/= 权限字符
(ugoa±=rwx filename)

1)+:向权限范围增加权限代号所表示的权限。
2)-:向权限范围取消权限代号所表示的权限。
3)=:向权限范围赋予权限代号所表示的权限。
用户符号:
1)u:拥有者。
2)g:所属组。
3)o:other。
4)a:所有用户。
方式一:
同时将拥有者,所属组,other权限改变,用,隔开
在这里插入图片描述
方式二:三位八进制数,每一位代表一个角色的权限
在这里插入图片描述

如何改变文件的拥有者

语法: chown 选项 用户名 文件名或目录名
功能: 修改文件的拥有者。
常用选项: -R 递归修改目录文件的拥有者。
也可以使用chown同时修改拥有着和所属组,使用冒号隔开
在这里插入图片描述
注意: 修改文件的拥有者需要root用户进行操作,若是普通用户则需要进行权限提升,不是你想给谁就给谁的,也不是你想要就要的。

如何改变文件的所属组

语法: chgrp 选项 用户名 文件名或目录名
功能: 修改文件的所属组。
常用选项: -R 递归修改目录文件的所属组。
注意: 修改文件的所属组也需要进行权限提升。
在这里插入图片描述

如何修改文件的掩码

实际上,新建文件的默认权限为0666,新建目录的默认权限为0777。其中第一位的0与特殊权限有关,我们这里不必深究,而后面三位就是权限的八进制数值表示方法,我们将其翻译为字符表示方法
在这里插入图片描述
但实际上你会发现,你所创建出来的文件和目录的权限值往往不是我们所翻译出来的值,而是664 和 775原因就是创建文件和目录的时候还要受到umask的影响,假设默认权限是mask,则实际创建出来的文件权限是:mask&(~umask)
在这里插入图片描述
语法: umask 权限值
功能: 查看或修改文件掩码。
我们可以通过指令umask查看文件默认掩码。
在这里插入图片描述
注意: 超级用户的默认掩码为0022,普通用户的默认掩码为0002。
因此我们实际创建出来的文件和目录的权限值还需要进行进一步换算才能得出。首先我们将掩码的的后三位八进制换算为二进制,然后对其进行按位取反。
在这里插入图片描述
然后将之前的新建文件的默认权限值和新建目录的默认权限值分别与其进行按位与操作,得到的就是我们创建出来的文件和目录的权限值。
在这里插入图片描述
也可以理解为凡是在umask中出现的权限位,都不能在最终权限中出现。
在这里插入图片描述
因此我们也可以通过修改umask来设置文件的访问权限。
在这里插入图片描述

目录的权限

对于文件来说,其可读可写可执行的属性我们都知道分别代表着什么对应的操作,那对于目录来说可读可写可执行又分别代表着什么呢?
1)可读权限: 如果用户没有该目录的可读权限,则无法通过ls指令查看目录中的文件内容。
2)可写权限: 如果用户没有该目录的可写权限,则无法通过一系列指令在目录中创建文件或删除文件。
3)可执行权限: 如果用户没有该目录的可执行权限,则无法通过cd指令进入到目录当中。

那么这就会出现一个问题:
只要用户拥有某目录的可写权限,就可以删除该目录当中的文件,而不论该用户是否拥有该文件的可写权限,只要有目录w权限,删你与你何干,这显然是不合理的。
为了解决这个不合理的问题,Linux引入了粘滞位的概念。

粘滞位

粘滞位
语法: chmod +t 目录名
**功能: **给目录加上粘滞位。
当一个用户将某一个目录加上粘滞位后,该目录的权限值的最后一位“x”变为字符“t”。
在这里插入图片描述
此时另一个用户就算有该目录的可写权限,也无法删除该目录下的文件。
在这里插入图片描述
当一个目录被设置为粘滞位,则该目录下的文件只能由:
1)超级用户删除。
2)该目录的拥有者删除。
3)该文件的拥有者删除。

注意: 虽然目录被加上了粘滞位,但如果用户有该目录的可写权限,则不影响其在该目录下创建文件,作用只是在rwx基础上杜绝了随便删除他人文件的权限。

  • 16
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

维生素C++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值