<4>Linux 权限:从 Shell 核心原理 到 权限体系的底层逻辑 详解

[1. shell 命令 以及 运行原理](#1. shell 命令 以及 运行原理)

[1.1 操作系统内核 和 shell 命令行解释器](#1.1 操作系统内核 和 shell 命令行解释器)

[1.2 shell外壳程序的执行](#1.2 shell外壳程序的执行)

[1.3 shell外壳程序的作用](#1.3 shell外壳程序的作用)

[2. 权限](#2. 权限)

[2.1 普通账号 权限受限](#2.1 普通账号 权限受限)

[2.2 su [用户名]](#2.2 su [用户名])

[2.3 ctrl + d / exit](#2.3 ctrl + d / exit)

[2.4 su - [用户名]](#2.4 su - [用户名])

[2.5 root 登录普通账号不需要密码](#2.5 root 登录普通账号不需要密码)

[2.6 sudo 与 sudoers (权限白名单)](#2.6 sudo 与 sudoers (权限白名单))

[3. Linux 权限管理](#3. Linux 权限管理)

[3.1 权限的认知 and 权限角色rwx](#3.1 权限的认知 and 权限角色rwx)

[3.2 为什么分 所属组 ?](#3.2 为什么分 所属组 ?)

[3.3 groups](#3.3 groups)

[3.4 usermod -aG](#3.4 usermod -aG)

[3.5 修改 rwx 权限](#3.5 修改 rwx 权限)

[3.5.1 chmod u/g/o/a +/- /r/w/x](#3.5.1 chmod u/g/o/a +/- /r/w/x)

user

group

other

all

[u,g,o,a 都可组合,用逗号分隔](#u,g,o,a 都可组合,用逗号分隔)

[3.6 rwx 权限 的作用](#3.6 rwx 权限 的作用)

[3.7 root 账号几乎不受权限限制​编辑](#3.7 root 账号几乎不受权限限制编辑)

[3.8 权限 只匹配一次](#3.8 权限 只匹配一次)

[3.9 二进制方式 修改 rwx 权限](#3.9 二进制方式 修改 rwx 权限)

[chmod 000/777](#chmod 000/777)

[3.10 更改文件的角色](#3.10 更改文件的角色)

[sudo chown [用户名] [文件]](#sudo chown [用户名] [文件])

[sudo chgrp [用户名] [文件]](#sudo chgrp [用户名] [文件])

[sudo chown [用户名]:[用户名]](#sudo chown [用户名]:[用户名])

[3.11 文件类型补充](#3.11 文件类型补充)

[4. rwx 权限的经典面试问题](#4. rwx 权限的经典面试问题)

[4.1 目录权限特殊,不能与普通文件混为一谈](#4.1 目录权限特殊,不能与普通文件混为一谈)

[5. 权限掩码](#5. 权限掩码)

[5.0 文件的起始权限](#5.0 文件的起始权限)

[5.1 umask 权限掩码的作用,意义,计算,使用场景](#5.1 umask 权限掩码的作用,意义,计算,使用场景)

[5.2 umask [000~777]](#5.2 umask [000~777])

[5.3 权限掩码细节问题](#5.3 权限掩码细节问题)

[6. 粘滞位 :解决文件删除漏洞](#6. 粘滞位 :解决文件删除漏洞)

[6.0 Linux 权限漏洞](#6.0 Linux 权限漏洞)

[6.1 Linux 共享文件 的问题](#6.1 Linux 共享文件 的问题)

[6.2 粘滞位 : chmod +t [目标目录]](#6.2 粘滞位 : chmod +t [目标目录])

[6.3 Linux中,固定存在 tmp 共享目录](#6.3 Linux中,固定存在 tmp 共享目录)

[7. file](#7. file)

1. shell 命令 以及 运行原理

1.1 操作系统内核 和 shell 命令行解释器

广义操作系统:操作系统 + 应用

狭义操作系统:操作系统内核 ,也叫kernal

我们不能直接使用操作系统内核。我们启动各种应用程序,都是经过一个翻译器,将我们的行为翻译给操作系统内核,然后内核再理解,执行我们的指令,从而打开应用程序

1.2 shell外壳程序的执行

这个翻译器是什么? ------shell(外壳)------ 命令行解释器

作用:接收用户指令,分析指令,发起执行,交给操作系统内核 加载、执行,返回执行结果:说到底就是执行二进制文件。

我们的指令,比如 ls ,大部分都是二进制文件,由C/C++代码写的。

指令也叫做:命令行提示符 ------ shell接收分析后,交给内核执行,并返回结果(操作的反馈)

1.3 shell外壳程序的作用

shell 外壳程序 可以拦截非法请求,变相保护操作系统内核

shell 外壳程序 不会直接分析命令行,而是创建子进程的方式,让子进程去分析命令,然后交给内核执行。

目的是:保护shell的安全

原因:执行可能会失败,失败会有概率挂掉子进程,而保护shell外壳程序自己不被挂掉。如果shell挂掉了,用户就无法与内核沟通了,所以shell不能轻易挂掉
1. Linux用到的 shell 外壳程序 叫做 : bash

2. shell外壳程序是命令行解释器的总称,bash是具体的某一种命令行解释器

3.windows的外壳程序是------图形界面。我们使用鼠标点击图标,这个行为就是命令,被转化为了图形界面的指令,交给内核

4.安卓手机就是Linux内核

2. 权限

root超级账号,无视大部分权限。

普通账号,受到大部分权限限制。

2.1 普通账号 权限受限

2.2 su [用户名]

su : 切换用户,需要输入对应用户的密码,密码不回显

su,切换账号,路径不会发生变化

2.3 ctrl + d / exit

ctrl + d / exit: 退出登录当前账户,回到上一个账户。可快捷撤销 su 操作

exit 和 ctrl + d 效果一样

2.4 su - [用户名]

2.5 root 登录普通账号不需要密码

2.6 sudo 与 sudoers (权限白名单)

既然sudo一下,输入自己密码就可以获取权限,那要权限干嘛?要root干什么?

其实,默认情况下,普通账号无法sudo提权!会报错!需要特殊设置,在sudoer这个文件(白名单,一个普通文本配置文件)中加名,才准许使用!

普通账户是由它的root账号创建的!所以白名单也只能是root才能修改!

3. Linux 权限管理

3.1 权限的认知 and 权限角色rwx

权限的本质是:能 ?不能

权限是为了限制"角色"!

你能随意进入校长办公室,不是因为你是 人 ,而是因为 你是 校长! 权限限制角色


权限 = 角色 + 文件属性

举例:拥有者 + rwx = 作为拥有者,有读写执行权

3.2 为什么分 所属组 ?

答案:解决团队对共享文件的权限问题!

如果只有拥有者 和 other,那除了拥有者,其他人都能随意修改,安全风险极高

但是去掉other权限---,上级等其他用户就无法查看内容,这样就不易检查维护,协作效率极低

权限中间层------所属组------避免两级分化

对于同项目的工作人员以及上级,可以拉入一个组,这样都可以查看,极大提高协作效率的同时,规避了外人对文件的修改

所以还有一个结论:所有用户,默认自成一组!

3.3 groups

3.4 usermod -aG

3.5 修改 rwx 权限

3.5.1 chmod u/g/o/a +/- /r/w/x

符号 英文全称 代表角色 含义
u user 文件拥有者 只对文件所有者生效
g group 文件所属组 只对文件所属组内用户生效
o other 其他用户 既不是所有者、也不在组内的所有人
a all 全部三者 u + g + o 所有角色一起生效

user

group

other

all

u,g,o,a 都可组合,用逗号分隔

3.6 rwx 权限 的作用

那 x :可执行权呢?

可执行权,前提是二进制可执行文件!

3.7 root 账号几乎不受权限限制

3.8 权限 只匹配一次

如果你是拥有者,并且是所属组,但是你拥有者权限是 --- ,即便你所属组是rwx,你也无法执行任何操作

因为权限只匹配一次,匹配了,就中止向后查找。匹配了拥有者,所属组权限就不作数

如果验证?如下

3.9 二进制方式 修改 rwx 权限

chmod 000/777

rwx 对应二进制:111 ,--- 就是 000, 000-111十进制取值范围 :0 ~ 7

一共有3个"角色" :拥有者,所属组,other,每个范围都是0 ~ 7

十进制的方式,3个合在一起就是:000 ~ 777

二进制 十进制 权限 说明
000 0 --- 无任何权限
001 1 --x 仅执行
010 2 -w- 仅写入
011 3 -wx 写 + 执行
100 4 r-- 仅读取
101 5 r-x 读 + 执行
110 6 rw- 读 + 写
111 7 rwx 读 + 写 + 执行

3.10 更改文件的角色

sudo chown [用户名] [文件]

sudo chgrp [用户名] [文件]

sudo chown [用户名]:[用户名]

3.11 文件类型补充

4. rwx 权限的经典面试问题

进入一个 目录 需要什么权限?

什么决定了 文件 或 目录 的默认权限?

root新建的文件,普通用户无法读写执行,那可以删除吗?

对目录的权限 对目录的真实作用 通俗理解
r 读取目录内容(列表) ls 看文件名字
w 修改目录结构(增 / 删 / 改文件名) 删文件 、能新建文件,哪怕是任何人创建的!
x 访问目录(进入 / 使用路径) cd 进去,能访问文件内容

4.1 目录权限特殊,不能与普通文件混为一谈

权限符号 普通文件的作用 目录的作用 区别
r 读取文件内容 读取目录内的文件列表 目录内都是文件,文件内都是内容
w 修改文件内容 修改目录结构,删除文件 目录是文件结构,可删文件,文件是内容,可改内容
x 执行文件 进入目录 执行,完成文件的功能,进入目录,完成目录的功能

5. 权限掩码

5.0 文件的起始权限

类型 起始权限 起始十进制 umask 权限掩码 掩码后最终权限 最终十进制
普通文件 rw-rw-rw- 666 002 rw-rw-r-- 664
目录 rwxrwxrwx 777 002 rwxrwxr-x 775

普通文件,不需要执行权 x ,默认不给 x 权限。若是二进制可执行文件,chmod手动添加 x

目录的执行权决定能否进入目录,目录就是为了被进入!所以是刚需,必须给

5.1 umask 权限掩码的作用,意义,计算,使用场景

Linux中,存在权限掩码

作用:从起始权限中,掩盖掉权限掩码中出现的权限

意义:灵活调整创建文件的最终权限!

使用场景:批量化处理文件的最终权限,配合test{1..1000}.txt 使用

最终权限 = 起始权限 & (~ 权限掩码)

5.2 umask [000~777]

5.3 权限掩码细节问题

6. 粘滞位 :解决文件删除漏洞

6.0 Linux 权限漏洞

普通账号可删除 root账号创建的文件,即使无权限 rwx

因为删除文件,是由目录的权限 w 决定!你的文件创建在我的目录,我有权删你

目录最终权限775,说明:其他普通用户,无法在我的目录创建文件,因为没有 w 权

6.1 Linux 共享文件 的问题

共享文件,必须去公共的区域,不能在家目录。因为其他用户(除root)无法进入别人家目录,一般在root根目录下

共享文件,假设不给other权限,只给u,g权限,

这意味着:任何第三方(除root)都无法查看,修改该文件!

但存在隐患:任意第三方都能删除该文件!因为该文件无权出现在我的目录!
如何解决?给共享目录去掉 w 权限?

No,这样共享双方都无法修改,交流,失去了共享的意义。

6.2 粘滞位 : chmod +t [目标目录]

给 共享目录设置 粘滞位 : chmod +t [目标目录]

需求:

任何人(共享者)都能在共享目录新建文件,但是,自己只能删除自己所创建的!
设置 粘滞位 后,能删除文件的只有:

1.root 2.目录所有者 3. 自己的文件

6.3 Linux中,固定存在 tmp 共享目录

根目录下,Linux默认存在一个共享目录------tmp,这是官方设置的,带粘滞位的标准共享目录

7. file

file : 可查看文件详细信息:判断是什么文件(文本文件,二进制可执行文件,目录...)

判断文件是否为空,显示详细信息:

相关推荐
xingyuzhisuan5 分钟前
哪里可以一键部署Stable Diffusion XL的GPU云环境?(2026实测指南)
运维·人工智能·stable diffusion·gpu算力
长安不见7 分钟前
从CompletionService的一个错误用法谈起
后端
Agent手记15 分钟前
采购合同智能审核自动化,落地步骤与落地风险管控方案 —— 2026年企业级Agent深度实战指南
运维·人工智能·ai·自动化
3D探路人30 分钟前
模灵 大模型聚合API 转发流程技术实现
java·大数据·开发语言·前端·人工智能·计算机视觉
Liangwei Lin32 分钟前
LeetCode 22. 括号生成
linux·运维·服务器
win水33 分钟前
八、命令行参数和环境变量
linux·环境变量·命令行参数
( •̀∀•́ )92034 分钟前
Linux 下部署 `social-auto-upload` 遇到的问题及完整解决方案
linux·运维·服务器
高锰酸钾_34 分钟前
计算机网络-链路层-差错控制
服务器·网络·计算机网络
代码中介商35 分钟前
Libevent实战:高性能网络编程指南
linux·运维·网络
happytree00139 分钟前
linux0.11 - setup.s第一阶段(获取系统信息)
linux