吃透Linux文件权限!基础权限+UMASK+特殊权限+扩展属性 全网超全实战教程
2026/7/23 0:54:07 网站建设 项目流程

吃透Linux文件权限!基础权限+UMASK+特殊权限+扩展属性 全网超全实战教程

前言:Linux权限是运维、开发、云计算面试必考核心知识点,也是生产环境权限安全管控的基础。很多同学只会简单chmod 777,却不懂rwx本质、umask原理、SUID/SGID/粘滞位、文件锁属性。

本文从零拆解Linux普通权限、数字权限、属主属组、默认umask、特殊权限、扩展锁属性,全程可复现实战命令,零基础也能彻底吃透!


一、Linux权限核心架构(三大权限主体)

Linux所有文件/目录权限,只针对三类用户生效,这是权限体系的基石:

  • u(user 属主):文件创建者、所有者,权限优先级最高

  • g(group 属组):文件所属用户组,组内所有成员拥有对应权限

  • o(other 其他用户):除属主、属组外的所有系统用户

1.1 ls -l 权限字符串完整拆解

执行查看文件详情命令:

# 查看文件[fangbing@centos7 ~17:06:56]$ls-l/etc/passwd -rw-r--r--.1root root272672016:04 /etc/passwd

整行权限字符分为文件类型 + 三段权限 + SELinux标记

  1. 第1位:文件类型

    • -:普通文件

    • d:目录

    • l:软链接文件

  2. 2-4位(u权限):属主用户权限

  3. 5-7位(g权限):属组用户权限

  4. 8-10位(o权限):其他用户权限

  5. 末尾.:文件开启SELinux安全上下文(CentOS7默认存在)

1.2 权限优先级(高频易错)

如果一个用户既是文件属主,又在文件属组内

优先生效属主权限,组权限不生效!

Linux权限匹配规则:精准匹配优先,属主权限优先级 > 属组权限 > 其他用户权限。


二、rwx权限深度解析(文件 vs 目录完全不同)

这是90%新手踩坑点:文件和目录的rwx权限含义完全不一样

2.1 普通文件 rwx 作用

文件存储的是数据内容

  • r(读):查看文件内容(cat、less、vim查看)

  • w(写):修改、覆盖、追加文件内容

  • x(执行):运行脚本/二进制程序(无r权限无法执行

2.2 目录 rwx 作用(核心重点)

目录存储的是文件索引列表,不存真实数据:

  • r(读):列出目录内文件名(ls 目录),无法进入目录、无法查看文件详情

  • x(执行):进入目录(cd)、访问目录内文件内容(必须权限)

  • w(写):新建、删除、重命名目录内文件/子目录(必须搭配x权限生效

终极结论:删除文件的权限,看文件所在目录的wx权限,和文件本身的w权限无关!


三、chmod 权限修改命令(两种用法)

chmod专门用于修改文件/目录的读写执行权限,支持符号法数字法

3.1 符号语法(灵活精准)

语法:chmod WhoHowWhat 文件/目录

  • Who: u(user) g(group) o(other) a(all)

  • How: +(添加) -(减去) =(精确设置)

  • What: r(read) w(write) x(excute) -(读、写、执行权限)

实战示例:

  1. 针对文件
# 创建环境,新建/lab文件,且复制文件到该目录下[root@centos7 ~21:12:41]# mkdir /lab[root@centos7 ~21:12:58]# cd /lab[root@centos7 lab21:13:08]# cp /etc/passwd .[root@centos7 lab21:13:43]# ls -l passwd-rw-r--r--.1root root272672021:13passwd# 给u增加x权限[root@centos7 lab21:13:47]# chmod u+x passwd[root@centos7 lab21:15:05]# ls -l passwd-rwxr--r--.1root root272672021:13passwd#一次性修改多个权限[root@centos7 lab21:15:08]# chmod u-wx,g+w,o=- passwd[root@centos7 lab21:16:19]# ls -l passwd-r--rw----.1root root272672021:13passwd# 一次性设置全部对象[root@centos7 lab21:16:34]# chmod a=rwx passwd[root@centos7 lab21:17:50]# ls -l passwd-rwxrwxrwx.1root root272672021:13passwd
  1. 针对目录
# 准备目录和文件[root@centos7 lab21:20:47]# ls -ld dir01 dir01/file01drwxr-xr-x.2root root2072021:20 dir01 -rw-r--r--.1root root072021:20 dir01/file01[root@centos7 lab21:20:54]## 递归清除所有对象权限[root@centos7 lab21:20:54]# chmod -R a=- dir01[root@centos7 lab21:21:39]# ls -ld dir01 dir01/file01d---------.2root root2072021:20 dir01 ----------.1root root072021:20 dir01/file01# 递归修改user的权限[root@centos7 lab21:23:18]# ls -ld dir01 dir01/file01drwx------.2root root2072021:20 dir01 -rwx------.1root root072021:20 dir01/file01

3.2 数字八进制语法(工作最常用)

语法:chmod ### 文件/目录

通过二进制换算权限,三位数字依次对应u g o

二进制八进制权限含义
0000--- 无权限
0011--x 执行
0102-w- 写入
1004r-- 读取
1106rw- 读写
1015r-x 读执行
1117rwx 读写执行

实战换算:

  • 644:-rw-r--r-- (文件默认权限)

  • 755:drwxr-xr-x (目录默认权限)

  • 700:drwx------ (私有目录)

# 文件权限为634对应的权限[root@centos7 lab21:30:02]# chmod 634 passwd[root@centos7 lab21:30:26]# ls -l passwd-rw--wxr--.1root root272672021:13passwd

查看权限显示方式

stat:Linux 文件元信息查看命令,可读取权限、属主、时间、inode 等文件属性

  • -c:Linux 文件元信息查看命令,可读取权限、属主、时间、inode 等文件属性
  • % A:以符号形式输出文件权限字符串(rwxrwxrwx 格式,直观可读)
  • % a:以八进制数字形式输出文件权限(数字权限,chmod 用的 3 位数字)
# 示例[root@centos7 lab21:30:29]# stat -c %A passwd-rw--wxr--[root@centos7 lab21:34:20]# stat -c %a passwd634

四、chown / chgrp 修改文件归属

权限是规则,归属是身份,通过修改属主、属组,可改变权限生效对象。

# 仅修改属主[root@centos7 lab21:34:31]# ls -l passwd-rw--wxr--.1root root272672021:13passwd[root@centos7 lab21:38:28]# chown fangbing passwd[root@centos7 lab21:38:51]# ls -l passwd-rw--wxr--.1fangbing root272672021:13passwd# 仅修改属组[root@centos7 lab21:38:54]# chgrp wheel passwd[root@centos7 lab21:40:31]# ls -l passwd-rw--wxr--.1fangbing wheel272672021:13passwd# 同时修改属主+属组[root@centos7 lab21:40:35]# chown root:root passwd[root@centos7 lab21:41:04]# ls -l passwd-rw--wxr--.1root root272672021:13passwd# 递归修改目录及所有文件归属[root@centos7 lab21:41:32]# ls -ld dir01/ dir01/file01drwx------.2root root2072021:20 dir01/ -rwx------.1root root072021:20 dir01/file01[root@centos7 lab21:41:45]# chown -R fangbing:wheel dir01/[root@centos7 lab21:42:07]# ls -ld dir01/ dir01/file01drwx------.2fangbing wheel2072021:20 dir01/ -rwx------.1fangbing wheel072021:20 dir01/file01

权限补充说明

  • 对于文件来说:
  • 赋予 w 权限的时候,也会赋予 r 权限。
  • 赋予 x 权限的时候,也会赋予 r 权限。
  • 对于目录来说:
  • 赋予 r 权限的时候,也会赋予 x 权限。
  • 赋予 w 权限的时候,也会赋予 rx 权限

常见命令所需权限


五、umask 默认权限掩码(新手最难懂)

5.1 核心原理

umask:新建文件/目录需要减掉的权限

  • 目录最大默认权限:777

  • 文件最大默认权限:666(默认无执行权限)

计算公式:

  • 新建目录权限 =777 - umask

  • 新建文件权限 =666 - umask

5.2 四位umask详解(0027)

输出0027四位结构:特殊位 属主 属组 其他

  • 第一位0:不屏蔽SUID/SGID/粘滞位特殊权限(日常均为0)

  • 后三位:控制普通读写执行权限,设置创建新文件时,要取消的权限。

示例:

# 设置umask值为0,创建目录和文件,表示目录和文件均不剔除,目录是777,文件是666权限[root@centos7 lab21:49:21]# umask 0[root@centos7 lab21:49:33]# umask0000[root@centos7 lab21:49:38]# touch f1;mkdir d1[root@centos7 lab21:50:23]# ls -ld d1 f1drwxrwxrwx.2root root672021:50 d1 -rw-rw-rw-.1root root072021:50 f1# 设置umask值为0027,表示目录(u不剔除权限,设置为rwx,g剔除w权限,只有rx权限,0权限全剔除),文件(u只保留rw,g保留r,0无权限)[root@centos7 lab21:50:33]# umask 027[root@centos7 lab21:53:07]# umask0027[root@centos7 lab21:53:10]# touch f2;mkdir d2[root@centos7 lab21:53:28]# ls -ld f2 d2drwxr-x---.2root root672021:53 d2 -rw-r-----.1root root072021:53 f2# 当前用户永久生效[root@centos7 lab21:53:35]# echo 'umask 077' >> ~/.bashrc# 全局所有用户生效(root)[root@centos7 lab21:53:35]# echo 'umask 077' >> /etc/bashrc

六、Linux三大特殊权限(面试高频)

6.1 SUID 特殊权限(4000)

作用对象:可执行文件

核心功能:普通用户执行该命令时,临时拥有文件属主的身份

经典案例:passwd命令,普通用户可修改自己密码,本质是临时获得root权限,修改/etc/shadow

# -rwsr-xr-x 带s标记,SUID生效[fangbing@centos7 ~21:08:58]$ls-l/bin/passwd -rwsr-xr-x.1root root27856412020/bin/passwd

6.2 SGID 特殊权限(2000)

作用对象:目录(多用于团队共享)

核心功能:目录开启SGID后,内部新建文件自动继承目录的属组,实现团队文件共享编辑。

实战案例:

# 创建用户组和用户root@centos7 lab22:05:47]# groupadd devops[root@centos7 lab22:05:55]# useradd -G devops dev1正在创建信箱文件: 文件已存在[root@centos7 lab22:06:07]# useradd -G devops dev2# 准备目录[root@centos7 lab22:06:13]# mkdir webapp[root@centos7 lab22:07:15]# chgrp devops webapp[root@centos7 lab22:07:27]# chmod g=rwx webapp# 准备默认权限[root@centos7 lab22:07:39]# umask 002# 实验一:普通用户创建文件,只有自己可以编辑[root@centos7 lab22:07:53]# su dev1[dev1@centos7 lab22:08:35]$touchwebapp/dev-f1[dev1@centos7 lab22:08:48]$ ll webapp/dev-f1 -rw-rw-r--.1dev1 dev1072022:08 webapp/dev-f1# 实验二:普通用户创建文件,组中成员也可以编辑[root@centos7 lab22:12:00]# chmod g+s webapp/[root@centos7 lab22:12:27]# ll -d webapp/drwxrws---.2root devops2072022:08 webapp/[root@centos7 lab22:12:33]# su dev1[dev1@centos7 lab22:13:34]$touchwebapp/dev-f2[dev1@centos7 lab22:13:48]$ ll webapp/ 总用量0-rw-rw-r--.1dev1 dev1072022:08 dev-f1 -rw-rw-r--.1dev1 devops072022:13 dev-f2[root@centos7 lab22:14:32]# su dev2[dev2@centos7 lab22:15:02]$echohello world>>webapp/dev-f2[dev2@centos7 lab22:15:23]$catwebapp/dev-f2 hello world

6.3 Sticky 粘滞位(1000)

作用对象:公共目录

典型目录:/tmp,权限1777

核心功能:公共目录所有人都能读写,但只能删除自己创建的文件,无法删除他人文件。

实战案例:

# 示例文件[root@centos7 lab22:20:25]# ls -ld /tmp /tmp/VMwareDnD/drwxrwxrwt.95root root819272022:20 /tmp drwxrwxrwt.2fangbing fangbing3471415:15 /tmp/VMwareDnD/# 普通用户在/tmp目录中创建1个文件,且把o权限设置为7[fangbing@centos7 ~22:22:24]$touch/tmp/test01[fangbing@centos7 ~22:23:41]$ls-ld/tmp/test01 -rw-rw-r--.1fangbing fangbing072022:23 /tmp/test01[fangbing@centos7 ~22:24:12]$chmodo=rwx /tmp/test01[fangbing@centos7 ~22:24:16]$ls-ld/tmp/test01 -rw-rw-rwx.1fangbing fangbing072022:23 /tmp/test01# 非文件创建者无法删除[root@centos7 lab22:20:42]# su -l dev1上一次登录:一72022:13:34 CST 2026pts/0 上[dev1@centos7 ~22:24:35]$rm-rf/tmp/test01 rm: 无法删除"/tmp/test01":不允许的操作# 用户只能删除自己创建的文件[fangbing@centos7 ~22:24:23]$rm-f/tmp/test01[fangbing@centos7 ~22:27:17]$ls-ld/tmp/test01 ls: 无法访问/tmp/test01: 没有那个文件或目录

七、文件扩展属性(chattr 锁文件)

普通权限root可以强制突破,而chattr扩展属性可以锁住文件,root也无法修改删除

[root@centos7 lab22:29:06]# chattr --helpUsage: chattr[-RVf][-+=aAcCdDeijsStTu][-v version]files...

两个常用属性:

  • append only (a),只能追加文件内容。
  • immutable (i),不可变更属性。

7.1 a 属性:仅追加模式

只能追加内容,不能覆盖、不能删除文件,适合日志文件。

[root@centos7 ~22:31:10]# touch operator.log[root@centos7 ~22:31:50]# chattr +a operator.log# 不可覆盖。不可删除,可追加[root@centos7 ~22:32:00]# echo hell world >operator.log-bash: operator.log: 不允许的操作[root@centos7 ~22:32:19]# echo hell world >>operator.log[root@centos7 ~22:32:29]# cat operator.loghell world[root@centos7 ~22:33:01]# rm -f operator.logrm: 无法删除"operator.log":不允许的操作

7.2 i 属性:不可变更模式(最强锁)

锁定文件,无法修改、无法追加、无法删除、无法改名,root也无效!

# 加锁[root@centos7 ~22:33:08]# cp /etc/passwd .[root@centos7 ~22:34:57]# chattr +i passwd[root@centos7 ~22:35:13]# echo hello world >passwd-bash: passwd: 权限不够[root@centos7 ~22:35:43]# echo hello world >> passwd-bash: passwd: 权限不够[root@centos7 ~22:36:03]# echo 'lw:x:1000:1000:lw:/home/lw:/bin/bash' >> passwd-bash: passwd: 权限不够[root@centos7 ~22:36:16]# ls -l passwd-rw-r--r--.1root root272672022:34passwd[root@centos7 ~22:36:30]# rm -f passwdrm: 无法删除"passwd":不允许的操作[root@centos7 ~22:38:20]# mv passwd passwd01mv:是否覆盖"passwd01"yesmv: 无法将"passwd"移动至"passwd01":不允许的操作# 解锁之后,可以正常删除[root@centos7 ~22:38:50]# chattr -i passwd[root@centos7 ~22:39:03]# rm -f passwd

八、全文总结(面试/工作速记)

  1. 权限三段式:属主(u) > 属组(g) > 其他(o),属主权限优先级最高

  2. 文件rwx:读写执行;目录rwx:列目录、进入、增删文件

  3. 删除文件看目录wx权限,不看文件本身权限

  4. umask是减法掩码,控制新建文件目录默认权限

  5. SUID临时继承文件属主身份,SGID继承目录属组,Sticky保护公共目录

  6. chattr+i 终极锁文件,防止误删误改核心配置


💡 码字不易,如果对你有帮助,欢迎点赞收藏+关注!后续持续更新Linux运维实战干货!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询