Linux篇(四):拆解 Linux 权限底层逻辑,新手也能秒懂
控制用户能做什么、不能做什么。Linux 是一个多用户操作系统,一台机器上可能同时存在多个用户,甚至多个用户组。如果没有权限控制,任何人都可以随意修改、删除别人的文件,甚至篡改系统文件,那系统早就乱套了。所以权限的核心作用有两个:1.控制用户行为:防止用户误操作,也防止恶意用户破坏系统。2.实现资源隔离:不同用户、不同用户组之间,文件和数据是隔离的,互不干扰。在 Linux 里,一切皆文件,所以权

大家好,前面我们已经聊过了 Linux 基础命令,今天我们来啃下 Linux 系统中最核心也最容易混淆的知识点之一 ——文件权限。权限是 Linux 安全模型的基石,理解了它,你才能真正玩转 Linux 系统,无论是管理服务器还是开发应用,都离不开它。我们将从最底层的概念出发,一步步拆解权限的构成、修改方法、特殊权限以及背后的原理。
概要 & 序论
su / su-
1一、背景与基本概念
1.1 什么是权限?为什么需要权限?
1.2 权限的三大角色:拥有者、所属组、other
1.3 权限的三种动作:读、写、执行
2.二、深入理解权限结构
2.1 权限的数字表示法(rwx 与数字的对应)
2.2 文件类型与权限字符串解析
2.3 目录权限的特殊含义
3.三、权限修改实战
3.1 chmod 命令:修改文件 / 目录权限
3.2 chown/chgrp:修改文件拥有者与所属组
3.3 权限修改中的常见坑与报错解析
4.四、默认权限与 umask
4.1 为什么文件默认权限是 664,目录是 775?
4.2 umask 的作用与修改方法
5.五、特殊权限与高级话题
5.1 粘滞位(Sticky Bit)的作用与场景
5.2 普通用户如何临时获取管理员权限(sudo)
6.六、总结与回顾
概要 & 序论
很多新手刚接触 Linux 时,总会被各种Permission denied搞得头大,或者对着-rwxr-xr-x这样的字符串一脸茫然。其实权限并没有那么复杂,它本质上就是 Linux 为了实现安全隔离和资源管控,给每个文件 / 目录设置的一套 “访问规则”。
在这篇博客里,我们会从 **“什么是权限”** 讲起,一步步拆解权限的构成、修改方法,再到默认权限、特殊权限,最后结合实战中的报错场景,帮你彻底打通 Linux 权限的任督二脉。
在正式了解权限之前,我们先来了解一下两个指令
su / su-
在 Linux 里,su和 su- 是两个最常用的切换用户命令,核心区别只有一个:是否完整切换到目标用户的环境(工作目录、环境变量、PATH)。
最直观的区别(一句话)
su 用户名:只切换身份,不切换环境(保留原来的目录、环境变量)su - 用户名:完全切换身份 + 环境(相当于重新登录目标用户)
最常用场景:切换到 root
su:切换成 root,但还在原来的目录su -:切换成 root,直接进入 root 家目录 /root,并加载 root 的全部环境


一、背景与基本概念
1.1 什么是权限?为什么需要权限?
权限的本质很简单:控制用户能做什么、不能做什么。
Linux 是一个多用户操作系统,一台机器上可能同时存在多个用户,甚至多个用户组。如果没有权限控制,任何人都可以随意修改、删除别人的文件,甚至篡改系统文件,那系统早就乱套了。所以权限的核心作用有两个:
1.控制用户行为:防止用户误操作,也防止恶意用户破坏系统。
2.实现资源隔离:不同用户、不同用户组之间,文件和数据是隔离的,互不干扰。
在 Linux 里,一切皆文件,所以权限问题,本质上都是文件的权限问题,包括普通文件、目录、设备文件等,都有自己的权限规则。
1.2 权限的三大角色:拥有者、所属组、other
Linux 为每个文件 / 目录定义了三类用户角色,权限就是针对这三类角色分别设置的


举个例子:张三创建了一个文件,那么张三就是这个文件的拥有者;
如果张三所在的组是dev组,那么 dev 组里的李四、王五都属于所属组角色;而其他不属于这个组的用户,都属于other角色。
这三类角色是互不冲突、互相补充的,一个用户只能属于其中一种角色,系统会优先匹配拥有者,再匹配所属组,最后匹配 other。
1.3 权限的三种动作:读、写、执行
细心的小伙伴已经发现了,在上面文件权限中有三个常出现的字母"w", "r", "x"

二、深入理解权限结构
2.1 权限的数字表示法(rwx 与数字的对应)

除了用rwx符号表示权限,Linux 还提供了更简洁的数字表示法,它的核心是给每个权限分配一个固定的数值:
r(读):4
w(写):2
x(执行):1
每个角色的权限,就是这三个数值的和。比如:
rwx = 4 + 2 + 1 = 7
rw- = 4 + 2 + 0 = 6
r-x = 4 + 0 + 1 = 5
r-- = 4 + 0 + 0 = 4
举个例子:文件权限-rwxr-xr--,拆分成三个角色:
拥有者:rwx → 7
所属组:r-x → 5
other:r-- → 4
所以数字表示就是754

2.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(所属组)、o(other)、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权限,就算文件有读权限也无法访问。
坑 3:
root 用户不受权限限制
root 用户对所有文件都有最高权限,就算文件权限是000,root 也能读写执行。所以用 root 用户测试权限时,是看不出效果的,要用普通用户测试。
四、默认权限与 umask
4.1 为什么文件默认权限是 664,目录是 775?
我们新建一个文件,默认权限是-rw-rw-r--(664),新建一个目录,默认权限是drwxrwxr-x(775),这是为什么呢?
Linux 规定了文件和目录的初始最大权限:
普通文件:初始最大权限是666(rw-rw-rw-),因为文件默认不能被执行,所以没有 x 权限。
目录:初始最大权限是777(rwxrwxrwx),因为目录默认需要进入和列出,所以有 x 权限。
而实际的默认权限,是初始最大权限减去 umask 的值。
4.2 umask 的作用与修改方法
umask是系统的权限掩码,它的作用是 “从初始最大权限中减去这些权限”,防止文件 / 目录默认权限过大,带来安全风险。
查看当前 umask:

默认一般是0002(普通用户),root 用户默认是0022。

计算默认权限:
文件默认权限 = 666 - umask
比如 umask 是 0002:666 - 002 = 664
目录默认权限 = 777 - umask
比如 umask 是 0002:777 - 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 安全的第一道防线,也是很多新手的痛点,建议大家多练习,多踩几次坑,就能彻底掌握了。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)