<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 : 可查看文件详细信息:判断是什么文件(文本文件,二进制可执行文件,目录...)

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

相关推荐
froginwe111 小时前
Memcached get 命令详解
开发语言
renhongxia11 小时前
计算机视觉实战:图像去噪模型训练与应用
开发语言·人工智能·机器学习·计算机视觉·prompt
Victor3562 小时前
MongoDB(100)如何解决性能瓶颈?
后端
寒秋花开曾相惜2 小时前
(学习笔记)4.1 Y86-64指令集体系结构(4.1.6 一些Y86-64指令 )
linux·运维·服务器·开发语言·笔记·学习·安全
神奇小汤圆2 小时前
面试官:“线上突然大量报错,你先查什么?” 我:“先查今天谁发了版” 面试官:......
后端
Victor3562 小时前
MongoDB(99)如何处理MongoDB中的孤立数据?
后端
freewlt2 小时前
TypeScript 5.5 新特性深度解析:类型系统的又一次进化
linux·ubuntu·typescript
сокол2 小时前
【网安-Web渗透测试-Linux提权】SUID提权
linux·前端·web安全·网络安全
掘金者阿豪2 小时前
时序数据库选型避坑指南:为什么我们最终选择了IoTDB
后端