目录一.shell命令以及运行原理二.Linux权限2.1Linux权限管理2.1.2sudo讲解2.2.2认识文件权限2.2.3认识目录权限2.2.4理解Linux多用户之间是怎么隔离的2.2.5缺省权限2.2.6共享目录一.shell命令以及运行原理Linux 严格意义上说的是一个操作系统我们称之为 “核心kernel“但我们一般用户不能直接使用 kernel。而是通过 kernel 的 “外壳” 程序也就是所谓的 shell来与 kernel 沟通。如何理解为什么不能直接使用 kernel从技术角度Shell 的最简单定义命令行解释器command Interpreter主要包含将使用者的命令翻译给核心kernel处理。同时将核心的处理结果翻译给使用者。对比 windows GUI我们操作 windows 不是直接操作 windows 内核而是通过图形接口点击从而完成我们的操作比如进入 D 盘的操作我们通常是双击 D 盘盘符。或者运行起来一个应用程序。shell 对于 Linux有相同的作用主要是对我们的指令进行解析解析指令给 Linux 内核。反馈结果在通过内核运行出结果通过 shell 解析给用户。为什么需要shell外壳程序1. 内核的缺陷只能识别系统调用不认识人类命令内核只提供一套底层接口 ——系统调用open、read、write…它看不懂ls、cd、mkdir这种英文命令。假设没有 Shell 你想看目录不能输入ls你必须手动编写程序连续发起一堆系统调用去读取磁盘目录。 门槛极高普通用户根本无法使用计算机。Shell 的第一价值把人类易懂的命令 → 翻译成内核能听懂的系统调用2. 隔离保护用户不能直接访问内核CPU 分为两种运行状态内核态内核运行拥有全部硬件权限用户态普通程序运行权限受限用户直接操作内核极其危险 误操作容易破坏文件系统、篡改内存、崩溃系统。工作流程 用户 → Shell用户态→ 发起系统调用 → 短暂进入内核态执行 → 返回 Shell 充当安全缓冲限制用户随意调用内核底层功能。3. 统一交互入口简化操作Shell 提供一套标准语法 命令、参数、通配符*、管道|、重定向 如果没有 Shell每个程序都要自己实现 文件匹配、输出重定向、连续命令串联。二.Linux权限Linux 下有两种用户超级用户root、普通用户。超级用户可以在 linux 系统下做任何事情不受限制普通用户在 linux 下做有限的事情。超级用户的命令提示符是 “#”普通用户的命令提示符是 “$”。命令su [用户名] 功能切换用户。 例如要从 root 用户切换到普通用户 user则使用 su user。 要从普通用户 user 切换到 root 用户则使用 su rootroot 可以省略此时系统会提示输入 root 用户的口令。补充课堂小知识点拓展su和su -的区别su root只切换用户身份不加载 root 环境变量su - root完整切换登录式切换加载目标用户全部环境推荐sudo普通用户临时借用 root 权限需要输入密码有10-15分钟再次调用不要密码。注超级用户切换为普通用户不需要输入密码普通用户切换为超级用户需要输入密码2.1Linux权限管理下面我们用实例进行演示执行了cd /你现在处在Linux 根目录 /也就是整个文件系统的最顶层所有目录都挂载在它下面。/ ├── bin → 软链接指向/usr/bin基础用户命令 ├── boot → 内核、启动相关文件 ├── dev → 设备文件硬盘、网卡、串口等 ├── etc → 系统各类配置文件重中之重 ├── home → 普通用户家目录存放处 ├── lib/lib64 → 系统共享库 ├── lostfound → 文件系统异常找回文件 ├── media → 自动挂载U盘、光盘等外设 ├── mnt → 手动临时挂载目录 ├── opt → 第三方大型软件安装目录 ├── proc → 伪文件系统存放进程、内核实时信息内存里无磁盘占用 ├── root → root超级用户自己的家目录和普通用户不在home下 ├── run → 运行时临时数据进程pid、套接字 ├── sbin → 管理员命令软链接/usr/sbin ├── snap → snap应用目录Ubuntu特有 ├── srv → 服务数据目录 ├── sys → 伪文件系统内核硬件信息 ├── tmp → 临时文件目录所有用户可读写系统定期清理 ├── usr → 用户程序、文档、库unix system resource └── var → 动态可变数据日志、缓存、数据库文件2.1.2sudo讲解sudo superuser do作用普通用户临时获取超级管理员权限执行一条命令核心特点必背不需要知道 root 的密码只需要输入自己普通用户的密码权限是临时、单次生效只作用于当前这一条命令权限受配置文件管控管理员可以限定用户能执行 / 不能执行哪些指令对比susu完整切换成目标用户身份需要目标用户密码切 root 就要 root 密码sudo普通用户临时借用权限输入自己密码这里就想到如果每个人都加个sudo不都成root用户了吗不就可以随便修改这里后面会讲只有将用户添加到这里面用户可以免密码放大权限没有添加进来的必须输入root用户密码才能放大权限否则无法放大权限2.2.2认识文件权限拆分结构-rw-rw-r---→ 文件类型普通文件第 1 组 rw-属主拥有者 ubuntu权限第 2 组 rw-属组ubuntu 组权限第 3 组 r--other其他用户权限 ✅问题一为什么不见otherother没有单独名字显示在 ll 输出里ll 输出只会打印属主用户名、属组名other 所有不属于「属主」、也不在「属组」内的其余用户是一个泛指群体没有固定账号名称所以不会展示。问题二什么是所属组为什么要有所属组Linux 里可以把多个用户放进同一个组。 每个文件都绑定属主单个用户 所属组一个用户组属主ubuntu文件拥有者所属组ubuntuubuntu 用户所在的用户组规则划分三类身份owner 属主文件主人group 所属组属于这个用户组里的任意成员other 其他人既不是主人也不在组内1. 方便批量授权不用逐个用户设置权限场景项目组有 A、B、C 三个开发需要共同读写一批文档。 如果没有用户组 文件主人只能给每个人单独开放权限新增成员、移除成员要逐个修改极其麻烦。有用户组之后 把 A、B、C 加入同一个dev组 文件归属dev组给组设置读写权限。 只要调整组内成员所有人自动继承权限一键管理。2. 实现分层权限控制三类身份三层权限 属主权限 所属组权限 other 权限 可以做到文件主人最高权限读写同组成员可以读写协作外部其他人只能看不能修改示例权限-rw-rw-r--主人、同组用户可读写外人只能读。3. 区分「所有者」和「协作人群」属主是唯一拥有者 所属组是一群协作的人。 文件主人可以保留最高权限同时开放权限给团队成员协同工作。所以现在我们已经知道了权限角色属性那么我们描述一下上面文件的权限信息是什么该文件是普通文件文件拥有者 ubuntu 拥有读、写权限没有执行权限属于 ubuntu 用户组内的所有成员拥有读、写权限没有执行权限除此之外的其他所有用户仅拥有读取权限不能写入和执行。如何修改权限呢1.修改权限属性第一种采取加命令的方式进行修改第二种采取8进制进行修改2.更改权限角色可以用下列这种修改直接修改拥有者和所属组修改文件【属主owner】只有 root拥有 CAP_CHOWN 特权可以做到普通用户无权转让文件所有权。补充一条容易混淆规则 普通用户可以修改文件所属组但有限制 只能改成「你自己已经加入的用户组」。一句话区分 ✅ 改组普通用户有部分权限 ❌ 换主人只能 root 操作1. 防止磁盘配额绕过资源管控服务器一般会限制每个用户最大磁盘占用容量磁盘配额。 如果允许普通人随意把文件 “转送” 给别人 用户 A 磁盘满了直接把超大文件 chown 转给用户 B逃脱自己容量限制破坏资源管理机制。2. 防范安全漏洞、权限逃逸攻击如果用户可以自由转让文件拥有者 攻击者可以创建带特殊权限SUID 程序的文件转让给 root 或者其他高权限用户利用文件提权入侵系统。 Linux 限制转让所有权堵死这类攻击路径。3. 文件归属权责清晰文件所有权变更属于重要元数据变更属于系统级管理操作。 系统设计思想文件共享推荐用权限 / 用户组实现而不是直接移交文件主人。 移交所有权属于重大变更需要管理员root/sudo确认。4. 历史 UNIX 安全规范POSIX 标准这是 UNIX 系传统规则文件可以共享但不能随意 “送人”。 共享文件 开放 r/w 权限 真正转移所有权必须管理员介入。2.2.3认识目录权限2.2.4理解Linux多用户之间是怎么隔离的如何多用户查看和修改同一文件2.2.5缺省权限创建目录和文件默认是下面的这种全限对于普通文件来讲起始权限 666默认不带可执行对于目录文件来讲起始权限 777默认携带x出现这钟情况因为系统默认会存在一个掩码的概念为什么要有掩码2.2.6共享目录我们先来看一个现象这里提出一个问题如果两个人要同时对同一文件进行操作该怎么办上面提供解决办法但是太麻烦这里我们可以将文件放在共享目录下不在私人目录下创建这样就可以解决多人协作的问题了在根目录下创建一个文件任何人都可以看见把权限改了任何人都可以修改该文件我们可以看到在根目录下创建一个权限开外放的目录所有人都可以访问那么别人能删我的文件吗这里我们可以看出我们的文件别删除了所以验证了前面说的删除文件只与目录的权限有关。但是这里有个问题把文件数据放在共有既想让别人修改又不想让别人删除但这两个操作由w来决定那么不就矛盾了该怎么解决这里我们引出一个知识点叫做粘滞位什么是粘滞位呢正常目录用户拥有目录wx→ 可以删除目录内任意文件哪怕文件是别人创建的 开启粘滞位后 目录即便有写权限用户只能删除 / 重命名自己创建的文件不能删除他人文件。典型例子系统/tmp目录权限drwxrwxrwt粘滞位作用于目录设置粘滞位后目录内用户仅可删除自身拥有的文件无法删除其他用户创建的文件常用于公共共享目录/tmp防止文件被随意删除这里我们可以看出把文件最后一个改为t别人就无法强制删除自己创的文件