前言
你好,欢迎来到 Linux 运维第二章的下篇!
上一篇文章我们学习了用户与组管理,掌握了如何创建用户、分组以及通过 sudo 委派特权。用户建好了,组也分好了,但还有一个核心问题没有解决:用户对文件和目录到底能做什么?
这就好比公司给每个员工发了门禁卡,但不同的办公室门禁权限是不一样的——开发人员能进开发部,但不能进财务室;运维人员能进机房,但不能进人事档案室。Linux 系统中的权限管理,就是这套精细化的"门禁系统"。
今天我们将深入浅出地学习:
- UGO 权限模型:属主、属组、其他人
- rwx 权限:读、写、执行对文件和目录的不同含义
- chmod、chown、chgrp:权限和归属的修改命令
- umask:默认权限的秘密
- 删除文件的本质:为什么删除文件需要对目录有写权限
学完今天的内容,你将能独立为任何应用配置合理的权限体系。
好,让我们正式开始今天的旅程 🚀
一、UGO 权限模型概述
1.1 UGO 权限模型
在 Linux 系统中,每个文件和目录都归属于一个属主(User) 和一个属组(Group) ,同时还有一个其他人(Other) 的概念。这三类对象各自有一套独立的权限,这就是 UGO(User-Group-Other)模型。
文件所有者(User)
│
├── 属主权限(u)—— 文件的主人能做什么
│
属组(Group)
│
├── 属组权限(g)—— 同组的小伙伴能做什么
│
其他人(Other)
│
└── 其他人权限(o)—— 陌生人能做什么
一句话理解:文件就像一间办公室——你是主人(User),你的团队成员(Group)可以进来,其他部门的人(Other)不能进。
1.2 查看文件权限
使用 ls -l 命令可以查看文件和目录的详细权限信息:
ls -l
输出示例:
-rwxr-xr-x 1 root root 1234 Jan 15 10:00 file.txt
drwxr-xr-x 2 root root 4096 Jan 15 10:00 dir1
权限字符串详解:
– rwx r-x r-x
│ │ │ │
│ │ │ └── 其他人权限(r-x)
│ │ └────── 属组权限(r-x)
│ └────────── 属主权限(rwx)
└───────────── 文件类型
| – | 普通文件 | 文本文件、二进制程序等 |
| d | 目录 | 文件夹 |
| l | 链接文件 | 软链接 |
二、权限类型及表示方法
2.1 权限类型
Linux 中有三种基本权限,它们对文件和目录的含义完全不同:
| 读 | r | 4 | 可查看文件内容(如 cat) | 可列出目录内容(如 ls) |
| 写 | w | 2 | 可修改文件内容(如 vim) | 可在目录中创建、删除、重命名文件 |
| 执行 | x | 1 | 可执行该文件(程序或脚本) | 可进入该目录(如 cd) |
⚠️ 关键理解:目录的 w 权限并不是让你"修改目录本身",而是让你修改目录中的文件列表——即可以创建、删除、重命名目录里的文件。这就是为什么删除文件需要对目录有写权限!
2.2 权限表示法
字符表示法:rwxr-xr–
rwx r-x r–
│ │ │
│ │ └── 后三位 r–:其他人权限(只读)
│ └────── 中间三位 r-x:属组权限(读+执行)
└────────── 前三位 rwx:属主权限(读+写+执行)
数字表示法(八进制):764
将每组 rwx 看成二进制(有权限为 1,无则为 0),再转换为十进制:
rwx = 111 = 4+2+1 = 7
rw- = 110 = 4+2+0 = 6
r– = 100 = 4+0+0 = 4
rwxrw-r– = 764
| rwx | 111 | 7 |
| rw- | 110 | 6 |
| r-x | 101 | 5 |
| r– | 100 | 4 |
| — | 000 | 0 |
三、修改属主和属组
3.0 准备实验环境
在开始练习之前,先创建测试用户和组:
# 创建测试用户
useradd qianyi
useradd jinghui
# 创建测试组
groupadd qa
groupadd op
groupadd devops
# 创建测试文件和目录
touch file1.txt
mkdir dir1
touch dir1/file{1..10}
3.1 chown —— 修改属主和属组
chown(Change Owner)用于修改文件或目录的属主和属组。
# 仅修改属主为 qianyi
chown qianyi file1.txt
# 仅修改属组为 op(注意冒号)
chown :op file1.txt
# 同时修改属主为 jinghui,属组为 devops
chown jinghui:devops file1.txt
# 递归修改 dir1 目录下所有内容的属主和属组(-R)
chown -R jinghui:op dir1
3.2 chgrp —— 修改文件属组
chgrp(Change Group)专门用于修改文件或目录的属组。
# 仅修改属组为 qa
chgrp qa file1.txt
💡 小技巧:chown :组名 文件 和 chgrp 组名 文件 效果相同,推荐使用 chown 一个命令搞定。
四、chmod —— 修改文件权限
谁可以修改权限?
- 文件的所有者(User)
- root 用户(超级管理员)
4.1 字符模式
字符模式通过操作对象 + 操作符 + 权限来设置:
| u | 属主(User) |
| g | 属组(Group) |
| o | 其他人(Other) |
| a | 所有人(All = u+g+o) |
| + | 添加权限 |
| – | 移除权限 |
| = | 精确设置权限 |
示例:
# 给属主添加执行权限
chmod u+x file1.txt
# 从属组移除读权限
chmod g-r file1.txt
# 为其他人设置权限为读写
chmod o=rw file1.txt
# 为所有人设置权限为读、写、执行
chmod a=rwx file1.txt
# 为属主属组设置读写,其他人只读
chmod ug=rw,o=r file1.txt
4.2 数字模式
数字模式直接使用三位八进制数字设置权限:
# u=rwx (7), g=rx (5), o=rx (5)
chmod 755 file1.txt
# u=rw- (6), g=r– (4), o=r– (4)
chmod 644 file1.txt
# u=rwx (7), g=rwx (7), o=— (0)
chmod 770 file1.txt
# u=rw- (6), g=— (0), o=— (0)
chmod 600 file1.txt
常用权限速查:
| 755 | rwxr-xr-x | 可执行程序、目录(最常见) |
| 644 | rw-r–r– | 普通文件(最常见) |
| 750 | rwxr-x— | 组内可访问的目录或程序 |
| 640 | rw-r—– | 组内可读的配置文件 |
| 600 | rw——- | 私密文件(如私钥) |
| 777 | rwxrwxrwx | ⚠️ 所有用户可读写执行(危险!) |
4.3 权限掩码 umask 【扩展】
umask 决定新创建文件和目录的默认权限。
计算规则:
文件默认权限 = 666 – umask
目录默认权限 = 777 – umask
常见 umask 值及效果:
| 0022 | 666-022=644(rw-r–r–) | 777-022=755(rwxr-xr-x) |
| 0002 | 666-002=664(rw-rw-r–) | 777-002=775(rwxrwxr-x) |
| 0027 | 666-027=640(rw-r—–) | 777-027=750(rwxr-x—) |
修改 umask(临时):
umask 0027
验证效果:
touch file10
mkdir dir10
ls -ld file10 dir10/
输出示例:
drwxr-x—. 2 root root 6 Jul 16 23:34 dir10/
-rw-r—–. 1 root root 0 Jul 16 23:34 file10
修改 umask(永久生效):
echo "umask 0027" >> ~/.bashrc
source ~/.bashrc
五、实战案例:为若依项目配置权限
5.1 需求
为若依项目配置合理的权限体系:
| /opt/ruoyi | ruoyi | ruoyi | 755 | 应用根目录 |
| /opt/ruoyi/config | ruoyi | ruoyi | 750 | 配置文件(组内可访问) |
| /opt/ruoyi/logs | ruoyi | ruoyi | 755 | 日志目录 |
| /opt/ruoyi/backend/ruoyi-admin.jar | ruoyi | ruoyi | 644 | JAR 包文件 |
5.2 实施步骤
第 1 步:创建用户和组
useradd ruoyi
第 2 步:创建目录结构
mkdir -p /opt/ruoyi/{config,logs,backend,frontend,backup}
第 3 步:设置属主和属组
chown -R ruoyi:ruoyi /opt/ruoyi
第 4 步:设置权限
# 根目录 755
chmod 755 /opt/ruoyi
# 日志目录 755
chmod 755 /opt/ruoyi/logs
# 配置目录 750(同组人员可进入查看,其他人无权)
chmod 750 /opt/ruoyi/config
# 如果有 JAR 包文件,设置为 644
chmod 644 /opt/ruoyi/backend/ruoyi-admin.jar
验证结果:
ls -lR /opt/ruoyi
六、删除文件的本质【扩展】
6.1 核心原理
很多初学者会误以为"删除文件需要文件的 w 权限",但实际上:
删除文件 = 从目录中移除文件名的 inode 映射关系
删除操作改的是目录,而不是文件本身。因此:
| 目录 | 必须有 w(写)权限 | 目录的 w 权限 = 修改目录条目(增删改文件名) |
| 文件本身 | 不需要 w 权限 | 删除操作改的是目录,不是文件内容 |
6.2 图解
删除前:
/root/dir 目录
│
├── 文件名:file1.txt ──→ inode: 131420 ──→ 数据块(file1.txt 的内容)
│
└── 文件名:file2.txt ──→ inode: 123456 ──→ 数据块(file2.txt 的内容)
删除后:
/root/dir 目录
│
└── 文件名:file2.txt ──→ inode: 123456 ──→ 数据块(file2.txt 的内容)
inode: 131420 被标记为"未使用"
数据块被释放
删除 file1.txt 时,只是在目录中移除了文件名与 inode 的映射关系,inode 和数据块被标记为"未使用"(数据并没有被立即擦除,这也是数据恢复的原理)。
6.3 实验验证
验证一:目录有写权限,文件无任何权限(000)
# 准备环境
mkdir /opt/data
echo "test content…" > /opt/data/file1.txt
# 设置权限:目录 777,文件 000
chmod 777 /opt/data/
chmod 000 /opt/data/file1.txt
# 查看权限
ls -ld /opt/data/ /opt/data/file1.txt
输出示例:
drwxrwxrwx. 2 root root 23 Jul 16 23:59 /opt/data/
———-. 1 root root 15 Jul 16 23:59 /opt/data/file1.txt
切换到普通用户 jinghui 测试:
su – jinghui
# 查看文件(文件权限 000,无法读取)
ls -l /opt/data/file1.txt
# 输出:———-. 1 root root 15 Jul 16 23:59 /opt/data/file1.txt
# 但可以在目录中创建新文件
touch /opt/data/jinghui.txt
# 可以列出目录内容
ls /opt/data/
# 输出:file1.txt jinghui.txt
# 可以删除目录中的文件
rm -rf /opt/data/*
✅ 结论:目录有 w 权限,即使文件权限为 000,仍然可以删除文件。
验证二:目录无写权限,文件有全部权限(777)
# 准备环境
mkdir /opt/data2
touch /opt/data2/file2.txt
# 设置权限:目录 755(无写权限),文件 777
chmod 755 /opt/data2/
chmod 777 /opt/data2/file2.txt
# 查看权限
ls -ld /opt/data2/ /opt/data2/file2.txt
输出示例:
drwxr-xr-x. 2 root root 23 Jul 17 00:06 /opt/data2/
-rwxrwxrwx. 1 root root 0 Jul 17 00:06 /opt/data2/file2.txt
切换到普通用户 jinghui 测试:
su – jinghui
# 查看目录内容可以(目录有 r 和 x)
ls -l /opt/data2/
# 输出:total 0 -rwxrwxrwx. 1 root root 0 Jul 17 00:06 file2.txt
# 删除文件失败(目录没有 w 权限)
rm -rf /opt/data2/file2.txt
# 输出:rm: cannot remove '/opt/data2/file2.txt': Permission denied
# 创建文件也失败(目录没有 w 权限)
touch /opt/data2/jinghui.txt
# 输出:touch: cannot touch '/opt/data2/jinghui.txt': Permission denied
✅ 结论:目录没有 w 权限,即使文件权限是 777,也无法删除或创建文件。
6.4 核心结论
删除文件,需要的是目录的 w 权限,而不是文件本身的 w 权限!
这一原理同样适用于:
- 创建文件(需要在目录中有 w 权限)
- 重命名文件(需要在目录中有 w 权限)
七、结语
恭喜你!😊 到这里,你已经完成了 Linux 运维第二章(下)的全部学习内容。
今天我们系统学习了:
- UGO 权限模型:属主、属组、其他人的概念
- rwx 权限:读、写、执行对文件和目录的不同含义
- 权限表示法:字符表示法和数字表示法
- chown、chgrp、chmod:权限和归属的修改命令
- umask:默认权限的计算和配置
- 删除文件的本质:为什么删除文件需要对目录有写权限
权限管理是 Linux 安全体系的核心支柱。掌握了今天的内容,你就理解了 Linux"门禁系统"的运作原理。
如果在学习过程中遇到任何问题,欢迎在评论区留言讨论!也别忘了点赞收藏,方便以后查阅~
附录:核心知识点速查表
| 查看文件权限 | ls -l file.txt |
| 查看目录权限 | ls -ld dir/ |
| 修改属主 | chown qianyi file.txt |
| 修改属组 | chown :op file.txt |
| 同时修改属主和属组 | chown qianyi:devops file.txt |
| 递归修改属主属组 | chown -R qianyi:devops dir/ |
| 修改属组 | chgrp qa file.txt |
| 字符模式添加权限 | chmod u+x file.txt |
| 字符模式移除权限 | chmod g-r file.txt |
| 字符模式精确设置 | chmod ug=rw,o=r file.txt |
| 数字模式设置权限 | chmod 755 file.txt |
| 查看 umask | umask |
| 临时设置 umask | umask 0027 |
| 永久设置 umask | echo "umask 0027" >> ~/.bashrc |
| 创建目录并设置权限 | mkdir -p /opt/app && chmod 755 /opt/app |
| 常用文件权限 | 644(文件)、755(目录/程序) |
附录:权限数字速查卡
| — | 0 | r– | 4 |
| –x | 1 | r-x | 5 |
| -w- | 2 | rw- | 6 |
| -wx | 3 | rwx | 7 |
三位数字的组合:
| 755 | rwx | r-x | r-x | 目录/可执行程序(最常用) |
| 644 | rw- | r– | r– | 普通文件(最常用) |
| 750 | rwx | r-x | — | 组内可访问 |
| 640 | rw- | r– | — | 组内可读配置文件 |
| 600 | rw- | — | — | 私密文件 |
| 777 | rwx | rwx | rwx | ⚠️ 危险!所有用户可读写执行 |




