:权限篇(一):拆解 Linux 权限底层逻辑,新手也能秒懂)
大家好前面我们已经聊过了 Linux 基础命令今天我们来啃下 Linux 系统中最核心也最容易混淆的知识点之一 ——文件权限。权限是 Linux 安全模型的基石理解了它你才能真正玩转 Linux 系统无论是管理服务器还是开发应用都离不开它。我们将从最底层的概念出发一步步拆解权限的构成、修改方法、特殊权限以及背后的原理。概要 序论su / su-1一、背景与基本概念1.1 什么是权限为什么需要权限1.2 权限的三大角色拥有者、所属组、other1.3 权限的三种动作读、写、执行2.二、深入理解权限结构2.1 权限的数字表示法rwx 与数字的对应2.2 文件类型与权限字符串解析2.3 目录权限的特殊含义3.三、权限修改实战3.1 chmod 命令修改文件 / 目录权限3.2 chown/chgrp修改文件拥有者与所属组3.3 权限修改中的常见坑与报错解析4.四、默认权限与 umask4.1 为什么文件默认权限是 664目录是 7754.2 umask 的作用与修改方法5.五、特殊权限与高级话题5.1 粘滞位Sticky Bit的作用与场景5.2 普通用户如何临时获取管理员权限sudo6.六、总结与回顾概要 序论很多新手刚接触 Linux 时总会被各种Permission denied搞得头大或者对着-rwxr-xr-x这样的字符串一脸茫然。其实权限并没有那么复杂它本质上就是 Linux 为了实现安全隔离和资源管控给每个文件 / 目录设置的一套 “访问规则”。在这篇博客里我们会从 **“什么是权限”** 讲起一步步拆解权限的构成、修改方法再到默认权限、特殊权限最后结合实战中的报错场景帮你彻底打通 Linux 权限的任督二脉。在正式了解权限之前我们先来了解一下两个指令su / su-在 Linux 里su和 su-是两个最常用的切换用户命令核心区别只有一个是否完整切换到目标用户的环境工作目录、环境变量、PATH。最直观的区别一句话su 用户名只切换身份不切换环境保留原来的目录、环境变量su - 用户名完全切换身份 环境相当于重新登录目标用户最常用场景切换到 rootsu切换成 root但还在原来的目录su -切换成 root直接进入 root 家目录 /root并加载 root 的全部环境一、背景与基本概念1.1 什么是权限为什么需要权限权限的本质很简单控制用户能做什么、不能做什么。Linux 是一个多用户操作系统一台机器上可能同时存在多个用户甚至多个用户组。如果没有权限控制任何人都可以随意修改、删除别人的文件甚至篡改系统文件那系统早就乱套了。所以权限的核心作用有两个1.控制用户行为防止用户误操作也防止恶意用户破坏系统。2.实现资源隔离不同用户、不同用户组之间文件和数据是隔离的互不干扰。在 Linux 里一切皆文件所以权限问题本质上都是文件的权限问题包括普通文件、目录、设备文件等都有自己的权限规则。1.2 权限的三大角色拥有者、所属组、otherLinux 为每个文件 / 目录定义了三类用户角色权限就是针对这三类角色分别设置的举个例子张三创建了一个文件那么张三就是这个文件的拥有者如果张三所在的组是dev组那么 dev 组里的李四、王五都属于所属组角色而其他不属于这个组的用户都属于other角色。这三类角色是互不冲突、互相补充的一个用户只能属于其中一种角色系统会优先匹配拥有者再匹配所属组最后匹配 other。1.3 权限的三种动作读、写、执行细心的小伙伴已经发现了在上面文件权限中有三个常出现的字母w, r, x二、深入理解权限结构2.1 权限的数字表示法rwx 与数字的对应除了用rwx符号表示权限Linux 还提供了更简洁的数字表示法它的核心是给每个权限分配一个固定的数值r读4w写2x执行1每个角色的权限就是这三个数值的和。比如rwx 4 2 1 7rw- 4 2 0 6r-x 4 0 1 5r-- 4 0 0 4举个例子文件权限-rwxr-xr--拆分成三个角色拥有者rwx → 7所属组r-x → 5otherr-- → 4所以数字表示就是7542.2 文件类型与权限字符串解析我们平时用ls -l看到的权限字符串格式是这样的我们把它拆成几部分来看第 1 个字符文件类型比如-代表普通文件d代表目录l代表软链接。第 2-4 个字符拥有者权限u第 5-7 个字符所属组权限g第 8-10 个字符other 权限o所以上面的-rw-r--r--表示文件类型普通文件-拥有者可读可写rw-所属组可读r--other可读r--2.3 目录权限的特殊含义目录有r权限没有x权限能看到目录下的文件名但无法进入目录也无法读取文件内容。目录有x权限没有r权限能进入目录但无法列出目录下的文件列表除非你知道文件名。目录有w权限能在目录中创建、删除、重命名文件和文件本身的权限无关这一点非常重要只要你对目录有写权限就算文件本身是只读的你也可以删除它。为什么呢删除文件这个动作本质是修改目录里的文件列表所以它只受目录的写权限控制和文件本身的读写权限无关。三、权限修改实战3.1 chmod 命令修改文件 / 目录权限在上面的操作中我们不难看到chmod这个指令那么它到底是什么呢chmod是修改权限的核心命令有两种用法符号法和数字法。符号法推荐新手用更直观格式chmod [角色]/-/[权限] 文件名角色u拥有者、g所属组、oother、a所有角色动作添加权限、-移除权限、设置为指定权限权限r、w、x数字法简洁高效适合快速设置直接用三位数字设置权限格式chmod 数字 文件名3.2 chown/chgrp修改文件拥有者与所属组如果文件的拥有者或所属组不对就算权限设置了也无法正常访问这时候需要用chown和chgrp修改。chown修改拥有者 / 所属组chgrp只修改所属组3.3 权限修改中的常见坑与报错解析坑 1修改文件权限时提示Operation not permitted原因你不是文件的拥有者也不是 root 用户无法修改别人的文件权限。解决方法用sudo提权或者让文件的拥有者修改。坑 2访问文件提示Permission denied排查步骤1.先看文件本身有没有读权限ls -l my.txt看r权限是否开启。2.再看文件所在的目录你有没有x权限如果目录没有x权限就算文件有读权限也无法访问。坑 3root 用户不受权限限制root 用户对所有文件都有最高权限就算文件权限是000root 也能读写执行。所以用 root 用户测试权限时是看不出效果的要用普通用户测试。四、默认权限与 umask4.1 为什么文件默认权限是 664目录是 775我们新建一个文件默认权限是-rw-rw-r--664新建一个目录默认权限是drwxrwxr-x775这是为什么呢Linux 规定了文件和目录的初始最大权限普通文件初始最大权限是666rw-rw-rw-因为文件默认不能被执行所以没有 x 权限。目录初始最大权限是777rwxrwxrwx因为目录默认需要进入和列出所以有 x 权限。而实际的默认权限是初始最大权限减去 umask 的值。4.2 umask 的作用与修改方法umask是系统的权限掩码它的作用是 “从初始最大权限中减去这些权限”防止文件 / 目录默认权限过大带来安全风险。查看当前 umask默认一般是0002普通用户root 用户默认是0022。计算默认权限文件默认权限 666 - umask比如 umask 是 0002666 - 002 664目录默认权限 777 - umask比如 umask 是 0002777 - 002 775一般我们修改的 umask只是临时生效重启后失效当然也可以进行永久修改五、特殊权限与高级话题5.1 粘滞位Sticky Bit的作用与场景我们经常会看到目录权限里有个t比如drwxrwxrwt这就是粘滞位Sticky Bit。粘滞位的作用只有文件的拥有者和 root 用户才能删除 / 修改这个目录里的文件就算其他用户对目录有写权限也无法删除别人的文件。最典型的例子就是/tmp目录它默认设置了粘滞位所有用户都能在里面创建文件但只能删除自己的文件防止别人误删。示例设置粘滞位的意义让 “所有用户都能写的目录”依然能保护每个用户自己的文件不被他人删除。5.2 普通用户如何临时获取管理员权限sudo普通用户没有 root 权限无法修改系统文件或修改别人的文件这时候可以用sudo命令临时获取管理员权限。第一次使用 sudo 需要输入当前用户的密码验证通过后就可以临时以 root 权限执行命令了。六、总结与回顾今天我们从基础到实战彻底梳理了 Linux 文件权限的核心知识点1.权限的本质是控制用户行为核心角色分为拥有者、所属组、other 三类。2.权限动作分为读、写、执行文件和目录的权限含义完全不同尤其是目录的x权限。3.权限可以用符号法和数字法表示修改权限用chmod修改拥有者 / 所属组用chown/chgrp。4.默认权限由初始最大权限和 umask 共同决定umask 的作用是收紧默认权限提升安全性。5.粘滞位可以防止用户误删共享目录里的文件普通用户可以用sudo临时获取管理员权限。权限是 Linux 安全的第一道防线也是很多新手的痛点建议大家多练习多踩几次坑就能彻底掌握了。