:基本权限管理——UGO模型、rwx权限与chmod实战,一篇全搞定!)
前言你好欢迎来到 Linux 运维第二章的下篇上一篇文章我们学习了用户与组管理掌握了如何创建用户、分组以及通过sudo委派特权。用户建好了组也分好了但还有一个核心问题没有解决用户对文件和目录到底能做什么这就好比公司给每个员工发了门禁卡但不同的办公室门禁权限是不一样的——开发人员能进开发部但不能进财务室运维人员能进机房但不能进人事档案室。Linux 系统中的权限管理就是这套精细化的门禁系统。今天我们将深入浅出地学习UGO 权限模型属主、属组、其他人rwx 权限读、写、执行对文件和目录的不同含义chmod、chown、chgrp权限和归属的修改命令umask默认权限的秘密删除文件的本质为什么删除文件需要对目录有写权限学完今天的内容你将能独立为任何应用配置合理的权限体系。好让我们正式开始今天的旅程 一、UGO 权限模型概述1.1 UGO 权限模型在 Linux 系统中每个文件和目录都归属于一个属主User和一个属组Group同时还有一个其他人Other的概念。这三类对象各自有一套独立的权限这就是UGOUser-Group-Other模型。文件所有者User │ ├── 属主权限u—— 文件的主人能做什么 │ 属组Group │ ├── 属组权限g—— 同组的小伙伴能做什么 │ 其他人Other │ └── 其他人权限o—— 陌生人能做什么一句话理解文件就像一间办公室——你是主人User你的团队成员Group可以进来其他部门的人Other不能进。1.2 查看文件权限使用ls -l命令可以查看文件和目录的详细权限信息ls-l输出示例-rwxr-xr-x1root root1234Jan1510:00 file.txt drwxr-xr-x2root root4096Jan1510:00 dir1权限字符串详解- rwx r-x r-x │ │ │ │ │ │ │ └── 其他人权限r-x │ │ └────── 属组权限r-x │ └────────── 属主权限rwx └───────────── 文件类型首字符文件类型说明-普通文件文本文件、二进制程序等d目录文件夹l链接文件软链接二、权限类型及表示方法2.1 权限类型Linux 中有三种基本权限它们对文件和目录的含义完全不同权限符号数字对文件的含义对目录的含义读r4可查看文件内容如cat可列出目录内容如ls写w2可修改文件内容如vim可在目录中创建、删除、重命名文件执行x1可执行该文件程序或脚本可进入该目录如cd⚠️ 关键理解目录的w权限并不是让你修改目录本身而是让你修改目录中的文件列表——即可以创建、删除、重命名目录里的文件。这就是为什么删除文件需要对目录有写权限2.2 权限表示法字符表示法rwxr-xr--rwx r-x r-- │ │ │ │ │ └── 后三位 r--其他人权限只读 │ └────── 中间三位 r-x属组权限读执行 └────────── 前三位 rwx属主权限读写执行数字表示法八进制764将每组 rwx 看成二进制有权限为 1无则为 0再转换为十进制rwx1114217rw-1104206r--1004004rwxrw-r--764权限组合二进制数字rwx1117rw-1106r-x1015r--1004---0000三、修改属主和属组3.0 准备实验环境在开始练习之前先创建测试用户和组# 创建测试用户useraddqianyiuseraddjinghui# 创建测试组groupaddqagroupaddopgroupadddevops# 创建测试文件和目录touchfile1.txtmkdirdir1touchdir1/file{1..10}3.1chown—— 修改属主和属组chownChange Owner用于修改文件或目录的属主和属组。# 仅修改属主为 qianyichownqianyi file1.txt# 仅修改属组为 op注意冒号chown:op file1.txt# 同时修改属主为 jinghui属组为 devopschownjinghui:devops file1.txt# 递归修改 dir1 目录下所有内容的属主和属组-Rchown-Rjinghui:op dir13.2chgrp—— 修改文件属组chgrpChange Group专门用于修改文件或目录的属组。# 仅修改属组为 qachgrpqa file1.txt 小技巧chown :组名 文件和chgrp 组名 文件效果相同推荐使用chown一个命令搞定。四、chmod—— 修改文件权限谁可以修改权限文件的所有者Userroot 用户超级管理员4.1 字符模式字符模式通过操作对象 操作符 权限来设置操作对象含义u属主Userg属组Groupo其他人Othera所有人All ugo操作符含义添加权限-移除权限精确设置权限示例# 给属主添加执行权限chmodux file1.txt# 从属组移除读权限chmodg-r file1.txt# 为其他人设置权限为读写chmodorw file1.txt# 为所有人设置权限为读、写、执行chmodarwx file1.txt# 为属主属组设置读写其他人只读chmodugrw,or file1.txt4.2 数字模式数字模式直接使用三位八进制数字设置权限# urwx (7), grx (5), orx (5)chmod755file1.txt# urw- (6), gr-- (4), or-- (4)chmod644file1.txt# urwx (7), grwx (7), o--- (0)chmod770file1.txt# urw- (6), g--- (0), o--- (0)chmod600file1.txt常用权限速查数字权限适用场景755rwxr-xr-x可执行程序、目录最常见644rw-r--r--普通文件最常见750rwxr-x---组内可访问的目录或程序640rw-r-----组内可读的配置文件600rw-------私密文件如私钥777rwxrwxrwx⚠️ 所有用户可读写执行危险4.3 权限掩码umask【扩展】umask决定新创建文件和目录的默认权限。计算规则文件默认权限666-umask目录默认权限777-umask常见 umask 值及效果umask文件权限目录权限0022666-022644rw-r--r--777-022755rwxr-xr-x0002666-002664rw-rw-r--777-002775rwxrwxr-x0027666-027640rw-r-----777-027750rwxr-x---修改 umask临时umask0027验证效果touchfile10mkdirdir10ls-ldfile10 dir10/输出示例drwxr-x---.2root root6Jul1623:34 dir10/ -rw-r-----.1root root0Jul1623:34 file10修改 umask永久生效echoumask 0027~/.bashrcsource~/.bashrc五、实战案例为若依项目配置权限5.1 需求为若依项目配置合理的权限体系目录/文件属主属组权限说明/opt/ruoyiruoyiruoyi755应用根目录/opt/ruoyi/configruoyiruoyi750配置文件组内可访问/opt/ruoyi/logsruoyiruoyi755日志目录/opt/ruoyi/backend/ruoyi-admin.jarruoyiruoyi644JAR 包文件5.2 实施步骤第 1 步创建用户和组useraddruoyi第 2 步创建目录结构mkdir-p/opt/ruoyi/{config,logs,backend,frontend,backup}第 3 步设置属主和属组chown-Rruoyi:ruoyi /opt/ruoyi第 4 步设置权限# 根目录 755chmod755/opt/ruoyi# 日志目录 755chmod755/opt/ruoyi/logs# 配置目录 750同组人员可进入查看其他人无权chmod750/opt/ruoyi/config# 如果有 JAR 包文件设置为 644chmod644/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/dataechotest content.../opt/data/file1.txt# 设置权限目录 777文件 000chmod777/opt/data/chmod000 /opt/data/file1.txt# 查看权限ls-ld/opt/data/ /opt/data/file1.txt输出示例drwxrwxrwx.2root root23Jul1623:59 /opt/data/ ----------.1root root15Jul1623: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/data2touch/opt/data2/file2.txt# 设置权限目录 755无写权限文件 777chmod755/opt/data2/chmod777/opt/data2/file2.txt# 查看权限ls-ld/opt/data2/ /opt/data2/file2.txt输出示例drwxr-xr-x.2root root23Jul1700:06 /opt/data2/ -rwxrwxrwx.1root root0Jul1700:06 /opt/data2/file2.txt切换到普通用户jinghui测试su- jinghui# 查看目录内容可以目录有 r 和 xls-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 ux file.txt字符模式移除权限chmod g-r file.txt字符模式精确设置chmod ugrw,or file.txt数字模式设置权限chmod 755 file.txt查看 umaskumask临时设置 umaskumask 0027永久设置 umaskecho umask 0027 ~/.bashrc创建目录并设置权限mkdir -p /opt/app chmod 755 /opt/app常用文件权限644文件、755目录/程序附录权限数字速查卡权限数字权限数字---0r--4--x1r-x5-w-2rw-6-wx3rwx7三位数字的组合数字属主属组其他人含义755rwxr-xr-x目录/可执行程序最常用644rw-r--r--普通文件最常用750rwxr-x---组内可访问640rw-r-----组内可读配置文件600rw-------私密文件777rwxrwxrwx⚠️ 危险所有用户可读写执行