当前位置: 首页 > news >正文

Shell的运行原理以及Linux当中权限问题

目录

shell的运行原理

Linux当中的权限问题

Linux权限的概念

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

如何仅提升当前指令的权限

如何将普通用户添加到信任列表

Linux权限管理

文件访问者的分类(人)

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

文件权限值的表示方法

 文件访问权限的相关设置方法

如何改变文件的拥有者

如何改变文件的所属组

如何修改文件的掩码

身份验证确定规则

目录的权限

粘滞位


shell的运行原理

我们都知道Windows以图形化界面为交互方式,而Linux以命令行界面为交互方式。Windows和Linux的交互方式虽然不同,但本质上是一样的,图形化界面和命令行界面都是为了让用户进行相关操作,而图形化界面和命令行界面就是我们所说的“外壳程序”。

Linux严格意义上说是一个操作系统,我们称之为“核心(kernel)”,但我们一般用户不能直接使用kernel,而是通过kernel的“外壳程序”,也就是所谓的Shell,来与kernel沟通。 

Shell最简单的定义就是“命令行解释器”:

1)将使用者的命令翻译给核心(kernel)处理。
2)将核心的处理结果翻译给使用者。
对比Windows中的图形化界面(GUI),我们操作Windows并不是直接操作Windows内核,而是通过图形接口,点击,从而完成我们的操作。Shell对于Linux具有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核,反馈结果再通过内核运行出结果,通过Shell解析给用户。

Shell运行原理:
1)创建子进程,让子进程进行命令行解释。
2)子进程出现任何问题,都不影响父进程Shell。

对比到Windows当中就是,我们每运行一个程序就是创建了一个子进程,例如,登录微信、QQ。而这些子进程当中任何一个进程出现问题,都不会影响父进程,例如,当你的QQ出现卡死情况(程序异常)或你的QQ被关掉(程序终止),但其他子程序仍然可以运行。

注意: Shell只是所有外壳程序的统称,例如在centos 7当中的外壳程序名叫bash。

Linux当中的权限问题

Linux权限的概念

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

超级用户(我们可以看@前的名字或者用whoami来显示当前登入系统的用户)

普通用户(我们可以看@前的名字或者用whoami来显示当前登入系统的用户)

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

可能有时你的权限不够,需要从普通用户切换到超级用户,从而实现某些操作。

语法: su 用户名
功能: 用户切换。
从普通账号切换为root账号。

从root账号切换为普通账号

注意:
1)从普通账号切换为root账号时,指令当中的root可省略,因为root账号只有一个。
2)该指令也可以从一个普通用户切换为另一个普通用户,输入待切换用户的账号密码即可。
3)切换用户后,若想切回上次的用户,可通过Ctrl+D实现。

如何仅提升当前指令的权限

但可能某些情况下,你只想提升当前指令的权限,那么不必切换到超级用户。

语法: sudo 指令
功能: 提升当前指令的权限。
例如,我现在要以一名普通用户的身份,修改另一个普通用户的账号密码。

可当你输入完你的密码后,可能会出现以下提示。

该提示说你没有被超级用户(root)添加到信用列表当中,所以该条指令的权限得不到提升(你想想嘛,怎么可能让一个普通用户随意更改另一个普通用户的密码嘛),只有当你被超级用户添加到信任列表后,你才拥有提升当前指令权限的能力。

如何将普通用户添加到信任列表

那么首先你得先切换到超级用户,只有超级用户才有权力将普通用户添加到信任列表。

切换到超级用户后,我们使用vim打开文件 /etc/sudoers进行添加。

添加完毕后,该用户就可以使用sudo指令,也就是拥有提升当前指令权限的能力了。

如果想要jay前面和后面都有[]括起来,可以这样操作

  • 打开vim ~/.bashrc
  • 在最后一行输入 export PS1="[\u@\h \w]$ "
  • 输入后保存退出;执行source ~/.bashrc命令

Linux权限管理

文件访问者的分类(人)

对于用户来说,文件权限可以将用户分为三大类:

1)文件和文件目录的所有者(文件拥有者:u
2)文件拥有者所在的组的用户(文件所属组:g
3)其他用户(other:o

注意:
1)对于某一文件而言,其拥有者、所属组和other就是由超级用户(root)和普通用户所扮演。
2)在Linux当中,所有用户都要隶属于某一个组,哪怕这个组只有你一个人(此时该组就以你的用户名为组名)。

那么为什么会有所属组这个概念呢? 下面举个例子。
在某个公司当中有两个小组团队(A组、B组)在同一个Linux服务器上进行着同一款项目的开发(赛马模式),而你就是A组当中的一员。

如果没有所属组的概念,那么当你创建了一个文件后,要么就是只有你自己(拥有者)能看到,要么就是其他人(other)也都能看到。而你所希望的是你自己和你的小组成员能看到,剩下的人看不到。
于是就有了所属组这个概念,这时你就可以将文件设置为拥有者和所属组可见,而other不可见。所以所属组的存在是为了更灵活的进行权限配置,满足团队协作。

我们可以通过指令ll来查看某一文件或文件目录的拥有者和所属组。

注: 除了文件拥有者和文件所属组之外的都叫other。

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

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

使用指令ll,我们可以看到前面有一串字符,这串字符实际上就代表着该文件的类型和属性。

这串字符由10个字符组成的。其中第一个字符所代表的就是该文件的文件类型。

不同的字符代表不同的文件类型。
1)-:代表普通文件。
2)d:代表目录。
3)l:代表链接文件(类似于Windows当中的快捷方式)。
4)b:代表块设备文件(例如硬盘、光驱等)。
5)p:管道文件。
6)c:字符设备文件。
7)s:套接口文件。

注意: 在Linux当中,文件类型与文件后缀无关。

剩下的9个字符每三个为一组,分别代表该文件相对于其拥有者、所属组以及other是否拥有某种属性。

每一组的三个字符的第一个字符代表该文件是否具有可读属性,第二个代表是否具有可写属性,第三个代表是否具有可执行属性。

若是具有可读属性,则第一个位置的字符为r;若是具有可写属性,则第二个位置的字符为w;若是具有可执行属性,则第三个位置的字符为x。若某一位置为字符 - ,则说明不具有对应位置的属性。

注:如果文件不具有指向属性,那你给他可执行属性后执行文件就会报错(比如你不能再腾讯视频上刷题吧!)

现在我们来阐述一下该文件的类型以及权限。

text.txt的类型是普通文件,该文件的拥有者具有可读可写权限,所属组和other对该文件只有可读权限。该文件的拥有者和所属组都属于root

文件权限值的表示方法

a)字符表示方法
ll指令打印文件权限值时的表示方法就是字符表示法。例如

字符表示法说明
r - -仅可读
- w -仅可写
- - x仅可执行
r w -可读可写
r - x可读可执行
- w x可写可执行
r w x可读可写可执行
- - -无权限

2)八进制数值表示法
字符表示法中的每一个字符所在位置所表示的结果只有两种可能,要么为真,要么为假,因此我们可以将这三个字符换为三个二进制位,进而换为一个八进制位进行表示。例如

字符表示法二进制八进制数值表示法说明
r - -1004仅可读
- w -0102仅可写
- - x0011仅可执行
r w -1106可读可写
r - x1015可读可执行
- w x0113可写可执行
r w x1117可读可写可执行
- - -0000无权限

 文件访问权限的相关设置方法

如何改变文件的访问权限

格式:chmod [参数] 权限 文件名

功能:设置文件的访问权限

常用选项: -R 递归 修改目录文件的权限chmod指令权限值的格式:
格式一: 用户符号 +/-/= 权限字符
1)+:向权限范围增加权限代号所表示的权限。
2)-:向权限范围取消权限代号所表示的权限。
3)=:向权限范围赋予权限代号所表示的权限。
用户符号:
1)u:拥有者。
2)g:所属组。
3)o:other。
4)a:所有用户。

若要同时设置不同类用户的访问权限,则需用逗号隔开。

格式二: 三位八进制数字
将对应的八进制数转换为二进制,进而设置对应权限值。

如何改变文件的拥有者

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

首先我这边先演示个错误案例!

先切换成普通用户

我现在想做的的是把text.txt文件的拥有者修改成jay,执行修改用户指令是hxh

普通用户没有给其他用户文件所有者的权限的,因为你给别人首先是你可以给,第二个就是别人得要,因此普通用户给的,对方不会要。(我们可以想想嘛,万一这个文件里面有病毒或者是垃圾文件,难道随便一个用户都能把文件给我吗,这是不是太荒缪了)

解决方案!

所以如果我们要把文件的所有者或者所属组的权限,那必须要以root用户来操作,或者使用sudo来提权。有同学肯定会问,如果这个文件的所有者不是root的,那也可以修改它的所有者吗?答案是可以的,因为权限其实是限制root用户以外的用户

也可以使用chown指令同时修改文件的拥有者和所属组,将拥有者和所属组的用户名用冒号隔开即可。

如何改变文件的所属组

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

注意: 修改文件的所属组也需要进行权限提升。

如何修改文件的掩码

我们查看新建的文件和目录,它们都有自己默认的权限。

实际上,新建文件的默认权限为0666,新建目录的默认权限为0777。其中第一位的0与特殊权限有关,我们这里不必深究,而后面三位就是权限的八进制数值表示方法,我们将其翻译为字符表示方法。

但实际上你会发现,你所创建出来的文件和目录的权限值往往不是我们所翻译出来的值,原因就是创建文件和目录的时候还要受到umask的影响,假设默认权限是mask,则实际创建出来的文件权限是:mask&(~umask)

语法:umask 权限制

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

说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用 户默认为0002。

我们可以通过指令umask查看文件默认掩码。

因此我们实际创建出来的文件和目录的权限值还需要进行进一步换算才能得出。首先我们将掩码的的后三位八进制换算为二进制,然后对其进行按位取反。

然后将之前的新建文件的默认权限值和新建目录的默认权限值分别与其进行按位与操作,得到的就是我们创建出来的文件和目录的权限值。

也可以理解为凡是在umask中出现的权限位,都不能在最终权限中出现。

身份验证确定规则

首先我去掉了对于文件用于者可写的权限,但是文件所属组是可以对文件进行写入的,那此时我们hxh用户可以对文件进行写入操作吗?

结果明显是不行的。

因为确认身份的过程中,只能确定一次。

顺序:拥有者,所属组,other

目录的权限

对于文件来说,其可读可写可执行的属性我们都知道分别代表着什么对应的操作,那对于目录来说可读可写可执行又分别代表着什么呢?

1)可读权限: 如果用户没有该目录的可读权限,则无法通过ls指令查看目录中的文件内容。
2)可写权限: 如果用户没有该目录的可写权限,则无法通过一系列指令在目录中创建文件或删除文件。
3)可执行权限: 如果用户没有该目录的可执行权限,则无法通过cd指令进入到目录当中。

总结:

进入一个目录,我们需要的是x权限

目录的w,意味如果没有w,我们就该目录下,新建文件(删除文件,更改文件名)等都不行

那么这就会出现一个问题:
只要用户拥有某目录的可写权限,就可以删除该目录当中的文件,而不论该用户是否拥有该文件的可写权限,这显然是不合理的。

为了解决这个不合理的问题,Linux引入了粘滞位的概念。

粘滞位

语法: chmod +t 目录名
功能: 给目录加上粘滞位。

当一个用户将某一个目录加上粘滞位后,该目录的权限值的最后一位变为字符“t”。

此时另一个用户就算有该目录的可写权限,也无法删除该目录下的文件。

总结:

  • 目录的权限:取决于你是否有查看目录里面的内容(如ls),修改目录里面的文件,和进入目录的权限
  • 文件的权限:取决于对象是否有能力查看,修改,执行文件操作
  • 文件受目录的约束:在不考虑粘滞位的情况下,文件的删除取决于目录是否有对应w权限

相关文章:

  • Flutter 文本组件深度剖析:从基础到高级应用
  • TGCTF web
  • SQL刷题日志(day1)
  • 狂神SQL学习笔记二:安装MySQL
  • DeepSeek AI大模型:中国智能时代的“争气机“-AI生成
  • Python实例题:Python自动获取小说工具
  • 如何将一个8s的接口优化到500ms以下
  • 【Pandas】pandas DataFrame keys
  • 【Python浅拷贝与深拷贝详解】
  • 【QT】 常用控件【输入类】
  • 【Java学习笔记】注释
  • 第一章 计算机网络和因特网
  • 在 JMeter 中,Active Threads Over Time 是一个非常有用的监听器(Listener)
  • 虾分发平台平台优势
  • 【Linux】深入理解线程控制
  • 【智驾中的大模型 -2】VLM 在自动驾驶中的应用
  • 【MySQL 数据库】增删查改操作CRUD(下)
  • 凡泰极客亮相QCon2025鸿蒙专场,解析FinClip“技术+生态”双引擎
  • 【ubuntu】linux开机自启动
  • [250414] ArcoLinux 项目宣布逐步结束
  • 招行一季度净利372.86亿降2.08%,营收降逾3%
  • 总书记考察的上海“模速空间”,要打造什么样的“全球最大”?
  • 宁夏民政厅原厅长欧阳艳已任自治区政府副秘书长、办公厅主任
  • 商超展销延长、专区专柜亮相……上海“外贸拓内销”商品与市民见面
  • 上海潮汕联谊会举行换届大会,陈湖文当选会长
  • 持续更新丨伊朗官员:港口爆炸事件已致5人死亡