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

Linux安全基石:Shell运行原理与权限管理系统解读

目录

一、Shell命令及其运行原理

1、什么是Shell?

2、为什么不能直接使用kernel?

3、Shell的定义与功能

4、Shell与GUI的类比

二、Shell 运行原理与进程隔离机制

1、Shell 的运行机制

子进程处理模型

故障隔离机制

2、Windows 系统的类似设计

3、系统设计优势

4、任务管理器

1. 快捷键组合

2. 通过开始菜单或搜索

3. 运行命令

4. 文件资源管理器

5. 任务栏右键菜单

6. 通过命令提示符或 PowerShell

扩展补充知识:

任务管理器的作用

各版本适用性

三、Linux权限管理:用户与权限基础

1、Linux用户分类

超级用户(root)

普通用户

2、用户切换命令

su 命令

使用示例

从root切换到普通用户

从普通用户切换到root

3、提升当前指令权限的方法

仅提升当前指令权限

基础示例:临时提升单条指令权限

场景:查看需要 root 权限的文件(如 /etc/shadow)

添加用户至信任列表

四、Linux权限管理

1、文件访问者的分类(人)

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

文件类型

基本权限

五、文件权限值的表示方法

1、字符表示法 (Symbolic Notation)

2、八进制数值表示法 (Octal Notation)

六、 文件访问权限设置方法

1、chmod 命令

常用选项

权限设置格式

用户表示符+/-/=权限字符

三位八进制数字表示法

2、chown 命令

3、chgrp 命令

常用选项

4、umask 命令

默认权限

5、file 命令

常用选项

七、目录的权限

权限问题的发现

实验验证

步骤 1:创建一个测试目录

步骤 2:设置目录权限(开放写权限)

步骤 3:创建一个受保护的文件(仅所有者可读写)

步骤 4:切换到另一个用户(或新终端模拟另一个用户)

步骤 5:测试文件权限

八、粘滞位

步骤 6(可选):修复问题——使用粘滞位(Sticky Bit)

九、关于目录权限的总结(重要)

1、目录的可执行权限(x)

2、缺少可执行权限的情况(如果目录没有 -x 权限)

3、仅有可执行权限的情况(如果目录有 -x 权限但无 -r 权限)

1. 创建测试环境

2. 测试不同权限组合

测试 1:目录无执行权限 (-x)

设置权限(保留读权限)

测试 2:目录仅有执行权限 (--x)

设置权限


一、Shell命令及其运行原理

1、什么是Shell?

        Linux严格意义上是一个操作系统内核(kernel),但普通用户通常不能直接使用kernel,而是通过kernel的"外壳"程序——Shell来与kernel进行交互。

2、为什么不能直接使用kernel?

从技术角度来看,直接操作kernel存在以下问题:

  1. 需要极高的技术门槛

  2. 容易因误操作导致系统不稳定

  3. 缺乏用户友好的交互方式

3、Shell的定义与功能

Shell本质上是一个命令行解释器(command interpreter),主要功能包括:

  • 命令翻译:将用户的命令翻译成kernel能够理解的指令

  • 结果反馈:将kernel的处理结果翻译并呈现给用户

4、Shell与GUI的类比

        Windows采用图形化界面(GUI)作为主要交互方式,而Linux则以命令行界面为主。尽管这两种系统的交互形式存在差异,但它们的核心功能一致——都是为了方便用户操作系统。无论是图形化界面还是命令行界面,本质上都属于我们所说的"外壳程序"。

  • 在Windows中,用户不直接操作内核,而是通过图形界面(GUI)完成操作

    • 例如:通过双击D盘图标进入D盘

    • 或者通过点击应用程序图标来运行程序

在Linux系统中,Shell扮演着类似的角色:

  • 解析用户输入的指令

  • 将解析后的指令传递给Linux内核执行

  • 接收内核返回的结果并呈现给用户

        这种架构设计既保证了系统的安全性,又提供了灵活的操作方式,是Unix/Linux系统的重要特性之一。


二、Shell 运行原理与进程隔离机制

1、Shell 的运行机制

Shell 通过以下方式保证系统的稳定运行:

  1. 子进程处理模型

    • 每当执行命令时,Shell 会创建独立的子进程来处理命令行解释工作

    • 这种设计确保主 Shell 进程不受任何命令执行的影响

  2. 故障隔离机制

    • 子进程的异常或意外终止不会影响父进程 Shell

    • 即使某个命令执行失败,Shell 环境仍能保持稳定运行

2、Windows 系统的类似设计

Windows 采用相同的进程隔离理念:

  • 应用程序独立运行:每个启动的程序(如微信、QQ)都作为独立子进程运行

  • 故障隔离表现

    • 当某个应用程序(如QQ)出现卡死或崩溃时

    • 其他应用程序和系统主进程仍可正常运行

    • 用户可继续操作系统或其他程序不受影响

3、系统设计优势

这种进程隔离机制具有以下优点:

  1. 增强系统稳定性:局部故障不会导致整个系统崩溃

  2. 提高安全性:限制单个进程的影响范围

  3. 改善用户体验:允许用户继续工作而不受个别程序故障影响

技术提示:现代操作系统普遍采用这种设计理念,无论是Linux的Shell环境还是Windows的图形界面,都通过进程隔离(后面的进程部分会讲解)来确保系统核心的稳定性。

4、任务管理器

在 Windows 系统中,可以通过以下几种方式打开任务管理器(Task Manager):

1. 快捷键组合

  • Ctrl + Shift + Esc:直接打开任务管理器(最快捷方式)。

  • Ctrl + Alt + Delete → 选择 “任务管理器”(适用于所有 Windows 版本)。

2. 通过开始菜单或搜索

  • 右键点击开始按钮(或按 Win + X)→ 选择 “任务管理器”

  • 按 Win + S 打开搜索 → 输入 “任务管理器” → 点击结果。

3. 运行命令

  • 按 Win + R 打开“运行”窗口 → 输入 taskmgr → 回车。

4. 文件资源管理器

  • 打开 文件资源管理器(Win + E)→ 地址栏输入 taskmgr → 回车。

5. 任务栏右键菜单

  • 右键点击任务栏空白处 → 选择 “任务管理器”

6. 通过命令提示符或 PowerShell

  • 打开 cmd → 输入 taskmgr → 回车。

  • 打开PowerShell → 输入 taskmgr → 回车。 

扩展补充知识:

        在 Windows 中,命令提示符(CMD) 和 PowerShell 都是命令行外壳(Shell),但它们的设计和功能有所不同:

命令提示符(CMD)

  • 传统外壳,基于早期的 MS-DOS

  • 主要执行 .bat 或 .cmd 批处理脚本

  • 命令语法较简单,但功能有限。

  • 适用于简单的系统管理任务。

PowerShell

  • 更强大的现代外壳,由 Microsoft 开发。

  • 支持 面向对象的脚本(.ps1,比 CMD 更灵活。

  • 可以调用 .NET Framework,适用于自动化管理和高级任务。

  • 默认集成在 Windows 10/11 中,并逐步取代 CMD。

哪个是 Windows 的默认外壳?

  • 在 Windows 10/11 中:

    • 按 Win + X 时,默认显示 PowerShell(可手动切换回 CMD)。

    • 在 任务管理器(Ctrl+Shift+Esc)中,默认新建任务使用 PowerShell(除非手动更改)。

  • 但 CMD 仍然保留,用于兼容旧脚本。 

任务管理器的作用

  • 查看/结束进程、监控性能、管理启动项、查看用户活动等。

各版本适用性

  • Windows 10/11:以上方法均适用。

  • Windows 7/8:部分快捷键和菜单位置略有不同,但 Ctrl+Shift+Esc 和 Ctrl+Alt+Delete 通用。


三、Linux权限管理:用户与权限基础

1、Linux用户分类

Linux系统中有两种主要用户类型:

  1. 超级用户(root)

    • 拥有系统最高权限,可以执行任何操作

    • 不受常规权限限制

    • 命令提示符为 #

  2. 普通用户

    • 权限受到限制,只能执行授权范围内的操作

    • 命令提示符为 $

2、用户切换命令

su 命令

语法su [用户名]
功能:切换当前用户身份

使用示例

  • 从root切换到普通用户

    su [用户名]

1.无需输入密码(root切换至其他用户时拥有特权)

2. 若初始时你是普通用户,但是你切换到了root超级用户去干了某件事后,你想要切回来普通用户,你可以直接输入exit指令,即退出当前用户,进入上一次的用户身份:

  • 从普通用户切换到root

    su root

    或简写为:

    su
    • 系统会提示输入root用户的密码(输入的密码默认不显示)

    • 成功验证后获得root权限

        若初始时你是root超级用户,但是你切换到了普通用户去干了某件事后,你想要切回来root,你可以直接输入exit指令,即退出当前用户,进入上一次的用户身份:

注意频繁使用root权限存在安全风险,建议日常操作使用普通用户账户,仅在必要时切换至root。

注意:

1)切换为root账号时,可省略指令中的"root"参数,因为系统仅存在一个root账号。

2)此指令同样适用于普通用户之间的切换,只需输入目标用户的账号和密码。

3)使用Ctrl+D快捷键可快速返回上一个用户。

3、提升当前指令权限的方法

仅提升当前指令权限

若只需提升单条指令的权限,无需切换至超级用户。

语法sudo 指令
功能:临时提升当前执行的指令权限

示例场景
        以普通用户身份修改其他用户的密码时,使用该命令后可能出现提示信息,表示您未被超级用户(root)授权执行该操作。由于安全考虑,普通用户无权随意修改他人密码,因此需要先获得授权。

基础示例:临时提升单条指令权限

场景:查看需要 root 权限的文件(如 /etc/shadow

1、普通用户直接尝试查看会报错:

2、使用sudo临时提权 

  • 结果

    • 若 hmz 已在 sudoers 信任列表中,输入正确密码后可查看文件内容:

    • 若未授权,会提示 hmz is not in the sudoers file.。由于我现在只有一个普通用户,所以我就用超级用户另开一个新普通用户来验证这个结果:

        我们现在切换成hjj这个普通用户,然后进行sudo操作,我们会发现,它让我们输入hjj的密码,输入后提示hjj这个普通用户并没有在提权配置文件里面,所以非法了: 

添加用户至信任列表

要将普通用户加入信任列表:

  1. 首先切换至超级用户身份(仅超级用户有此权限)
  2. 使用vim编辑器修改sudoers配置文件
    [root@hcss-ecs-1c15 ~]# vim /etc/sudoers

  3. 添加相应用户后,该用户即可使用sudo命令提升指令权限
  4. 格式
    接受权限的用户 登陆的主机 = (执行命令的用户) 命令

这次我们就可以sudo提权了: 


四、Linux权限管理

1、文件访问者的分类(人)

  • 文件所有者 (User, u)

    • 文件和文件目录的拥有者

    • 类比:中国公民(具有最高管理权限)

  • 所属组用户 (Group, g)

    • 文件所有者所在组的其他用户

    • 类比:家庭成员(共享部分权限)

  • 其他用户 (Others, o)

    • 既不是所有者也不在所属组的用户

    • 类比:外国人(权限受限)

注意:

1)对于文件而言,其权限管理涉及三个主体:文件拥有者(由超级用户root或普通用户担任)、所属组和其他用户(other)。

2)在Linux系统中,所有用户都必须属于至少一个用户组。如果用户单独成组,则该组名与用户名相同。

为什么需要所属组这个概念?

        我们用一个实际案例来说明:假设某公司有两个开发团队(A组和B组)在同一台Linux服务器上并行开发同一项目,你是A组成员。

若没有所属组机制,你创建的文件只有两种权限选择:

  • 仅自己(拥有者)可见
  • 所有人(other)可见

        但实际需求往往是希望文件对本人和同组成员可见,而对其他人不可见。所属组的概念正好解决了这个问题,允许你设置"拥有者和所属组可见,其他人不可见"的权限。这种机制为团队协作提供了灵活的权限管理方案。

查看文件或目录的拥有者和所属组,可以使用ll命令:

注:other是指既不是文件拥有者,也不属于文件所属组的其他所有用户。

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

        在讨论具体对象的权限时,还需要考虑对象本身的属性。以文件为例,我们需要关注其文件类型以及是否具备读、写和执行权限。

        通过执行ll命令,可以查看到一串10位的字符,这组字符完整地描述了文件的类型和属性。其中第一位字符就明确标识了该文件的类型:

文件类型

符号类型说明
d目录文件文件夹
-普通文件常规文件
l软链接类似Windows的快捷方式
b块设备文件如硬盘、光驱等
p管道文件进程间通信使用
c字符设备文件如屏幕等串口设备
s套接字文件网络通信使用

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

        文件属性由剩下的9个字符表示,每3个字符为一组,分别表示文件所有者、所属组和其他用户的权限。总的来看的话,具体分为四列:第一列显示文件类型,第二列是所有者权限,第三列为所属组权限,第四列为其他用户权限。

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

让我们举个例子说明一下该文件的类型及权限设置:

        其中我们观察到红色部分框内部分:text.txt 是一个普通文件,其所有者和所属组都拥有读写权限,而其他用户仅具备读取权限。

基本权限

权限符号数字对文件的作用对目录的作用
r4可读取文件内容可浏览目录内容
w2可修改文件内容可在目录内创建/删除文件
执行x1可执行文件(如脚本/程序)可进入该目录
-0无相应权限无相应权限

注:权限组合使用,如rwx=7(4+2+1),rw-=6(4+2+0),r-x=5(4+0+1)等


五、文件权限值的表示方法

Linux系统中,文件权限可以通过两种方式表示:

1、字符表示法 (Symbolic Notation)

使用 ll 命令显示文件权限时,采用的是字符表示法:

使用字母组合表示权限,格式为:
[文件类型][所有者权限][组权限][其他用户权限]

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

示例:

  • -rwxr-xr--
    表示:普通文件,所有者有读/写/执行权限,组用户有读/执行权限,其他用户只有读权限

  • drwxr-x---
    表示:目录文件,所有者有全部权限,组用户有读和执行权限,其他用户无任何权限

2、八进制数值表示法 (Octal Notation)

        权限可以用3位八进制数字表示,每位数字分别对应所有者、组和其他用户的权限设置。字符权限表示法中,每个字符位置只有两种状态(允许或禁止)。因此可以将三个权限字符转换为三个二进制位,进而合并成一个八进制数字来表示:

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

权限换算表:

  • 读(r) = 4

  • 写(w) = 2

  • 执行(x) = 1

  • 无权限(-) = 0

组合计算方式:

  • rwx = 4+2+1 = 7

  • rw- = 4+2+0 = 6

  • r-x = 4+0+1 = 5

  • r-- = 4+0+0 = 4

常见权限示例:

  • 755 → rwxr-xr-x

  • 644 → rw-r--r--

  • 777 → rwxrwxrwx (通常不建议使用)

  • 600 → rw-------


六、 文件访问权限设置方法

1、chmod 命令

功能:设置文件的访问权限
格式chmod [参数] 权限 文件名

常用选项

  • -R:递归修改目录文件的权限

  • 注意:只有文件拥有者和root用户才能修改文件权限

权限设置格式

用户表示符+/-/=权限字符
  • +:向权限范围增加权限

  • -:向权限范围取消权限

  • =:向权限范围赋予权限

用户符号

  • u:拥有者

  • g:拥有者同组用户

  • o:其他用户

  • a:所有用户

实例

原来的text.txt文件访问权限如下:

现在我们尝试使用chmod 命令设置文件的访问权限,如下:

1、向拥有者权限添加可执行权限:

        可以看到text.txt已经变成了绿色。在Linux终端中,绿色的文件名通常表示该文件是一个可执行文件或具有可执行权限x权限)。

关于文件命名颜色的补充:

  • 颜色规则

    • 绿色:可执行文件(如脚本、二进制程序,或任何带 x 权限的文件)。

    • 白色/灰色:普通文件(如文本文件,默认无 x 权限)。

    • 其他颜色:目录(蓝色)、符号链接(青色)等。

2、向拥有者同组用户权限取消可读权限: 

3、赋给other权限,这个权限跟user一样: 

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

三位八进制数字表示法

实例

2、chown 命令

功能:修改文件的拥有者

格式chown [参数] 用户名 文件名

常用选项: -R 递归修改目录文件的拥有者。

实例

1、修改文件所有者需使用root账户操作。普通用户需提升权限后方可执行此操作(注意),如下,成功将文件所有者改为root:

2、此外,可通过chown命令同时更改文件所有者和所属组,只需在用户名和组名间用冒号分隔即可:

3、chgrp 命令

功能:修改文件或目录的所属组
格式chgrp [参数] 用户组名 文件名

常用选项

  • -R:递归修改文件或目录的所属组

实例

4、umask 命令

功能

  • 查看或修改文件掩码

  • 控制新建文件和目录的默认权限

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

默认权限

  • 新建文件默认权限:0666

  • 新建目录默认权限:0777

  • 第一位数字的0代表特殊权限,此处无需深入探讨。后三位数字则是用八进制表示的权限值,我们将它们转换为字符形式。

        但在实际应用中,创建文件和目录时的权限值往往与我们计算的预期值不同,这主要是由于umask机制的影响。系统默认权限(mask)会受到umask值的限制。

实际权限计算
实际权限 = 默认权限(mask) & 默认掩码值(~umask)

格式:umask 权限值

说明

  • 超级用户默认掩码值:0022

  • 普通用户默认掩码值:0002

因此实际创建的文件和目录权限值需要进行换算才能确定。具体步骤如下:

  1. 将掩码的后三位八进制数转换为二进制
  2. 对二进制值进行按位取反
  3. 将新建文件/目录的默认权限值与取反后的掩码值进行按位与操作
  4. 最终结果即为实际创建的文件/目录权限值

5、file 命令

功能:辨识文件类型
语法file [选项] 文件或目录...

常用选项

  • -c:详细显示指令执行过程,便于排错

  • -z:尝试解读压缩文件的内容


七、目录的权限

        对于文件而言,其可读、可写、可执行的属性含义众所周知。那么对于目录来说,这些权限又分别代表什么操作呢?

  • 可读权限:若无目录可读权限,用户将无法通过ls命令查看目录内容
  • 可写权限:若无目录可写权限,用户将无法在目录中创建或删除文件
  • 可执行权限:若无目录可执行权限,用户将无法使用cd命令进入该目录

权限问题的发现

        从上述规则可以看出:只要用户对目录具有写权限,就可以删除该目录中的文件,无论该用户是否拥有该文件的写权限
        这可能导致不合理的情况:例如,用户A创建的文件可以被用户B删除,即使文件本身没有赋予用户B写权限。

实验验证

步骤 1:创建一个测试目录

步骤 2:设置目录权限(开放写权限)

步骤 3:创建一个受保护的文件(仅所有者可读写)

步骤 4:切换到另一个用户(或新终端模拟另一个用户)

步骤 5:测试文件权限

尝试读取文件(应该失败,因为无读取权限):

尝试删除文件(应该成功,因为目录可写):

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


八、粘滞位

粘滞位的作用说明:
当一个目录被设置粘滞位(使用chmod +t)后,该目录下的文件只能由以下用户删除:

  1. 超级管理员(root)

  2. 该目录的所有者

  3. 该文件的所有者

我们现在使用粘滞位来解决上面的权限问题:

步骤 6(可选):修复问题——使用粘滞位(Sticky Bit)

回到原用户(按 Ctrl+D 或 exit 退出 nobody 会话):

        当用户为某个目录设置粘滞位时,该目录权限值的最后一位会变成字母"t"。 此时,即使其他用户拥有该目录的写入权限,也无法删除该目录中的文件。 

再次以另一个普通用户hjj尝试删除:

        需要注意的是:虽然目录设置了粘滞位,但如果用户拥有该目录的写入权限,仍然可以在该目录下创建新文件和删除这个新文件。


九、关于目录权限的总结(重要)

1、目录的可执行权限(x)

表示用户是否可以在该目录下执行命令。这是目录权限中最关键的一项。

2缺少可执行权限的情况(如果目录没有 -x 权限)

  • 用户无法对该目录执行任何操作(包括 cd 进入目录)。

  • 即使目录有 -r 读权限,也无法进入或读取目录内容。
    (这是一个常见的误区:许多人误以为拥有读权限即可进入目录并读取文件。)

3、仅有可执行权限的情况(如果目录有 -x 权限但无 -r 权限)

  • 但由于缺少读权限,即使执行 ls 命令,也无法查看目录下的文件列表。
  • 用户可以 cd 进入目录并执行命令。

我们来验证一下:

1. 创建测试环境

2. 测试不同权限组合

我们测试三种典型情况:

  1. 无执行权限 (-x)

  2. 仅有执行权限 (--x)

  3. 正常权限 (r-x 或 rwx)


测试 1:目录无执行权限 (-x)

设置权限(保留读权限)

测试操作

结论
没有 x 权限时,所有操作(包括 cdls、读取文件)均失败,即使有 r 权限。


测试 2:目录仅有执行权限 (--x)

设置权限

测试操作

结论
仅有 x 权限时:

  • 可以 cd 进入目录

  • 可以访问已知具体文件名(需路径正确)

  • 不能列出目录内容(无 r 权限)

  • 不能修改目录(无 w 权限)

相关文章:

  • 【Docker基础】Docker容器管理:docker run及其参数详解
  • Python 使用 Requests 模块进行爬虫
  • 学习设计模式《十四》——组合模式
  • dijkstra(迪杰斯特拉)算法详解
  • 阿里云CentOS系统搭建全攻略:开启云端技术之旅
  • bash的配置文件,source
  • 云函数调测、部署及日志查看
  • VSCode性能调优:从卡顿到丝滑的终极方案
  • 颠覆传统接口测试!用 Streamlit + SQLite + GPT 打造可视化自动化平台
  • 计算鱼眼相机的内参矩阵和畸变系数方法
  • SSL过期自动续签脚本-腾讯云
  • 【后端】负载均衡
  • YSYX学习记录(十一)
  • Node.js爬虫 CheerioJS ‌轻量级解析、操作和渲染HTML及XML文档
  • 深度解析云计算网络架构:VLAN+OVS+Bonding构建高可靠虚拟化平台
  • 将Linux装进口袋: Ubuntu to Go 制作
  • 【编程语言】javascript、java、go对比应用场景
  • ✨【超详细】基于 CUDA 12.4 + Python 3.11 构建 Wan2.1 项目的集成推理环境(含 PyTorch 2.5.1 GPU 安装教程)
  • 如何仅用AI开发完整的小程序<5>—让AI制作开始页面
  • 第八章 网络安全
  • 我要建网站/百度站长资源
  • 门户网站的三大基本特征/sem账户托管外包
  • 动态网站建设包括哪些/爱站权重查询
  • 新广告法 做网站的/域名交易平台
  • 阿里巴巴b2b商业模式分析/seo文章
  • 电子手表网站/seo课程培训入门