Linux 12位权限管理体系全攻略(从基础到实战)
Linux 12位权限管理体系全攻略(从基础到实战)
一、概述
Linux权限管理是系统安全的核心基石,通过精细化控制文件/目录的访问权限,实现用户、进程与资源的隔离防护。从基础的rwx三位权限,到扩展的9位标准权限,再到3位特殊权限,共同构成了Linux完整的12位权限体系。
二、核心知识点
2.1 权限管理基础认知
2.1.1 权限体系概述
Linux通过权限控制保护系统资源,核心分为三大类权限:
- 基础权限(rwx):read(读)、write(写)、execute(执行),是权限控制的核心;
- 标准权限(9位):基于“所有者→用户组→其他人”的三层关系,将rwx组合为9位权限,覆盖绝大多数日常场景;
- 特殊权限(3位):setuid(suid)、setgid(sgid)、sticky(粘滞位),用于特殊场景的权限增强;
- 12位权限:9位标准权限 + 3位特殊权限,构成Linux完整的权限控制体系。
2.1.2 权限与用户的三层关系
Linux中任何文件/目录与用户都存在以下三种关系,权限配置需基于关系生效:
| 关系类型 | 含义 | 通俗理解 |
|---|---|---|
| 所有者(user) | 文件/目录的创建者或指定归属用户 | “文件是谁的” |
| 用户组(group) | 文件/目录归属的用户组 | “文件属于哪个家庭” |
| 其他人(other) | 既非所有者也不属于归属用户组的用户 | “陌生人” |
2.2 基础权限(rwx)核心说明
| 权限字符 | 含义 | 对应数字 | 核心作用 |
|---|---|---|---|
| r(read) | 读权限 | 4 | 文件:可读取内容;目录:可查看内容(需x配合) |
| w(write) | 写权限 | 2 | 文件:可修改内容(需r配合);目录:可创建/删除/重命名文件(需x配合) |
| x(execute) | 执行权限 | 1 | 文件:可运行(命令/脚本,需r配合);目录:可进入,可访问文件属性 |
| - | 无权限 | 0 | 无对应操作权限 |
2.3 9位标准权限计算
2.3.1 权限结构
9位权限按“所有者(u)→用户组(g)→其他人(o)”分为三组,每组3位(rwx/-),示例:-rwxr-xr--
- 第一组(u):
rwx→ 所有者权限; - 第二组(g):
r-x→ 用户组权限; - 第三组(o):
r--→ 其他人权限。
2.3.2 权限计算规则
- 每组权限数值 = 对应r/w/x的数字之和(无权限记0);
- 完整权限数值 = 所有者数值×100 + 用户组数值×10 + 其他人数值;
- 示例:
rwxr-xr--→ 所有者(4+2+1=7)+ 用户组(4+0+1=5)+ 其他人(4+0+0=4)→ 754;rw-r--r--→ 6(4+2)+4+4 → 644;rwx------→ 7+0+0 → 700。
2.4 文件与目录的权限差异(核心难点)
权限对文件和目录的作用完全不同,需精准区分:
| 权限 | 文件 | 目录 |
|---|---|---|
| r | 可读取文件内容(如cat、head) |
可查看目录下的文件列表(需x配合,如ls),无x则显示“?”无法查看属性 |
| w | 可修改文件内容(如echo追加、vim编辑),仅w无r时只能追加,无法查看原有内容 |
可创建(touch)、删除(rm)、重命名(mv)目录内文件(需x配合) |
| x | 可执行文件(如命令、脚本),仅x无r时无法运行(需r配合) | 可进入目录(cd),可访问目录内文件的属性(如ll 文件名) |
2.5 特殊权限(3位)
特殊权限是9位标准权限的补充,对应权限位最前方(第10-12位),核心作用是扩展权限控制场景:
| 特殊权限 | 字符标识 | 对应数字 | 核心作用 | 典型示例 |
|---|---|---|---|---|
| setuid(suid) | s(所有者x位) | 4 | 运行命令时,获取命令所有者的权限(而非当前用户权限) | /bin/passwd(所有者root,普通用户可修改自身密码) |
| setgid(sgid) | s(用户组x位) | 2 | 运行命令时,获取命令用户组的权限;目录:新建文件继承目录用户组 | 团队共享目录(确保组内用户可访问) |
| sticky(粘滞位) | t(其他人x位) | 1 | 目录:用户仅能管理自己创建的文件,无法删除他人文件 | /tmp目录(所有用户可创建,仅自身可删除) |
2.6 系统默认权限(umask)
2.6.1 核心规则
Linux通过umask控制文件/目录的默认权限,默认umask=022:
- 文件默认基准权限:666(无x权限,避免默认可执行);
- 目录默认基准权限:777(需x权限,默认可进入);
- 实际默认权限 = 基准权限 - umask(文件若某一位结果为奇数,需+1)。
2.6.2 计算示例
- 当
umask=022:- 文件:666 - 022 = 644(
rw-r--r--); - 目录:777 - 022 = 755(
rwxr-xr-x);
- 文件:666 - 022 = 644(
- 当
umask=021:- 文件:666 - 021 = 645(奇数+1)→ 646(
rw-r--rw-); - 目录:777 - 021 = 756(
rwxr-xrw-)。
- 文件:666 - 021 = 645(奇数+1)→ 646(
2.7 特殊属性(文件保护)
通过chattr设置特殊属性,预防重要文件被修改/删除,优先级高于权限:
| 属性 | 含义 | 核心作用 |
|---|---|---|
| a(append) | 追加属性 | 仅可追加内容,无法修改/删除(echo >>可行,vim修改不可行) |
| i(immutable) | 不可变属性 | 无法修改、删除、重命名,无法创建链接,root也受限制 |
2.8 Permission denied故障核心场景
| 日常操作 | 所需权限 | 故障原因 |
|---|---|---|
| 查看文件内容 | 文件r权限 | 缺少文件r权限 |
| 编辑文件内容 | 文件rw权限 | 缺少文件r或w权限 |
| 运行脚本/命令 | 文件rx权限 | 缺少文件r或x权限 |
| 查看目录内容 | 目录rx权限 | 缺少目录r或x权限 |
| 创建/删除文件 | 目录rwx权限 | 缺少目录w或x权限 |
| 重命名文件 | 目录rwx权限 | 缺少目录w或x权限 |
三、步骤/命令
3.1 权限查看命令
# 查看文件/目录权限(核心命令)
ls -l 文件名/目录名
# 示例:查看oldboy.sh权限
ls -l oldboy.sh
# 查看目录本身权限(不显示内部文件)
ls -d 目录名
# 示例:查看/oldboy-mode目录权限
ls -d /oldboy-mode
# 查看特殊属性
lsattr 文件名
# 示例:查看oldboy.txt的特殊属性
lsattr oldboy.txt
3.2 权限修改命令(chmod)
3.2.1 数字形式修改(推荐,简洁高效)
# 语法:chmod 权限数值 目标
chmod 755 oldboy.sh # 所有者rwx,用户组r-x,其他人r--
chmod 644 /etc/passwd # 文件默认权限
chmod 755 /oldboy-mode # 目录默认权限
chmod 700 ~/.ssh # 仅所有者可访问(安全配置)
3.2.2 字符形式修改(灵活,精准调整)
# 语法:chmod [u/g/o/a] [+/-/=] [r/w/x] 目标
# u:所有者,g:用户组,o:其他人,a:所有(u+g+o)
# +:添加权限,-:移除权限,=:覆盖权限
# 给所有者添加w权限
chmod u+w oldboy.txt
# 给用户组添加x权限,移除其他人r权限
chmod g+x,o-r oldboy.sh
# 给所有用户添加x权限(常用,如给脚本加执行权限)
chmod a+x /etc/rc.d/rc.local
# 简写(等价于a+x)
chmod +x /etc/rc.d/rc.local
# 覆盖所有者权限为rw-,用户组和其他人为r--
chmod u=rw,g=r,o=r oldboy.txt
3.3 所有者/用户组修改命令(chown)
# 语法:chown 所有者[:用户组] 目标
# 修改所有者为oldboy
chown oldboy oldboy.txt
# 修改所有者和用户组为oldboy(点分隔)
chown oldboy.oldboy oldboy.txt
# 修改目录及内部所有文件的所有者/用户组(-R递归)
chown -R oldboy.oldboy /oldboy-mode/oldboydir
# 仅修改用户组(也可用chgrp命令)
chown :oldboy oldboy.txt
chgrp oldboy oldboy.txt # 等价命令
3.4 特殊权限设置
# 1. setuid(4):数字形式(4开头)
chmod 4755 /bin/rm # 给rm添加suid权限(示例,生产环境慎用)
# 字符形式
chmod u+s /bin/rm
# 2. setgid(2):数字形式(2开头)
chmod 2755 /data/share # 给共享目录添加sgid权限
# 字符形式
chmod g+s /data/share
# 3. sticky(1):数字形式(1开头)
chmod 1777 /tmp/test # 给测试目录添加粘滞位
# 字符形式
chmod o+t /tmp/test
3.5 特殊属性设置(chattr)
# 添加a属性(仅可追加)
chattr +a oldboy.log
# 移除a属性
chattr -a oldboy.log
# 添加i属性(不可修改/删除)
chattr +i /etc/passwd # 保护核心配置文件
# 移除i属性
chattr -i /etc/passwd
3.6 权限测试实操(文件+目录)
3.6.1 文件权限测试
# 1. 环境准备
mkdir -p /oldboy-mode
echo 'hostname' > /oldboy-mode/oldboy.sh
chown oldboy.oldboy /oldboy-mode/oldboy.sh
# 2. 测试r权限(仅读,无写/执行)
chmod u=r /oldboy-mode/oldboy.sh
su - oldboy -c "cat /oldboy-mode/oldboy.sh" # 可读取
su - oldboy -c "echo 'test' >> /oldboy-mode/oldboy.sh" # 无w权限,失败
su - oldboy -c "/oldboy-mode/oldboy.sh" # 无x权限,失败
# 3. 测试w权限(仅写,无读/执行)
chmod u=w /oldboy-mode/oldboy.sh
su - oldboy -c "cat /oldboy-mode/oldboy.sh" # 无r权限,失败
su - oldboy -c "echo 'test' >> /oldboy-mode/oldboy.sh" # 可追加
su - oldboy -c "/oldboy-mode/oldboy.sh" # 无x权限,失败
# 4. 测试x权限(需配合r)
chmod u=rx /oldboy-mode/oldboy.sh
su - oldboy -c "cat /oldboy-mode/oldboy.sh" # 可读取
su - oldboy -c "/oldboy-mode/oldboy.sh" # 可执行
3.6.2 目录权限测试
# 1. 环境准备
mkdir -p /oldboy-mode/oldboydir
touch /oldboy-mode/oldboydir/oldboy{10..20}.txt
chown -R oldboy.oldboy /oldboy-mode/oldboydir
# 2. 测试r权限(无x)
chmod u=r /oldboy-mode/oldboydir
su - oldboy -c "ls /oldboy-mode/oldboydir" # 无x权限,显示"?",失败
# 3. 测试rx权限(可查看/进入)
chmod u=rx /oldboy-mode/oldboydir
su - oldboy -c "ls /oldboy-mode/oldboydir" # 可查看
su - oldboy -c "cd /oldboy-mode/oldboydir" # 可进入
# 4. 测试rwx权限(可创建/删除)
chmod u=rwx /oldboy-mode/oldboydir
su - oldboy -c "touch /oldboy-mode/oldboydir/test.txt" # 可创建
su - oldboy -c "rm -f /oldboy-mode/oldboydir/oldboy10.txt" # 可删除
3.7 删除文件的权限测试(关键知识点)
# 场景1:删除文件的权限取决于所在目录,与文件本身权限无关
mkdir -p /lidao-dir
chown oldboy.oldboy /lidao-dir # 目录所有者为oldboy
touch /lidao-dir/root01.txt # 文件所有者为root
su - oldboy -c "rm -f /lidao-dir/root01.txt" # 目录有rwx,可删除root所有的文件
# 场景2:目录无w权限,无法删除文件
chmod u=rx /lidao-dir
su - oldboy -c "rm -f /lidao-dir/root01.txt" # 无w权限,删除失败
3.8 Permission denied故障排查流程
故障现象
执行操作时提示“Permission denied”(权限拒绝)。
排查步骤
# 1. 确认当前用户
whoami
# 2. 查看目标文件/目录的权限和所有者
ls -l 目标路径 # 文件
ls -ld 目标路径 # 目录
# 3. 分析用户与目标的关系(u/g/o),判断应有权限
# 示例:oldboy用户无法读取/root/test.txt
whoami # 输出oldboy
ls -l /root/test.txt # -rw-r--r--. 1 root root 0 测试
# 分析:oldboy属于"其他人",有r权限,但/root目录权限为r-xr-x---(其他人无x)
ls -ld /root # dr-xr-x---. 1 root root 4096 测试
# 结论:目录无x权限,导致无法访问文件
# 4. 解决方案:给目录添加其他人x权限(生产环境慎用,建议用sudo)
chmod o+x /root
四、原理说明
4.1 权限生效原理
- Linux系统判断操作是否允许时,按以下顺序校验:
- 若为root用户,直接允许(忽略权限限制);
- 若为文件所有者,校验所有者权限;
- 若属于文件用户组,校验用户组权限;
- 校验其他人权限;
- 均无对应权限则提示“Permission denied”。
4.2 特殊权限生效原理
- setuid:运行命令时,进程的有效UID变为命令所有者的UID,而非当前用户UID(如
passwd命令所有者为root,普通用户运行时临时获得root权限修改/etc/shadow); - setgid:运行命令时,进程的有效GID变为命令用户组的GID;目录设置后,新建文件继承目录的用户组;
- sticky:目录设置后,内核会检查文件所有者是否为当前用户,或用户是否为root,仅允许所有者/root删除文件。
4.3 umask默认权限原理
umask是系统环境变量,默认值存储在/etc/profile或~/.bashrc中;- 新建文件/目录时,系统会根据基准权限减去
umask值计算默认权限; - 文件默认无x权限是因为基准权限为666(无x),避免误创建可执行文件带来安全风险。
4.4 特殊属性生效原理
chattr设置的属性存储在文件的inode节点中,优先级高于标准权限;i属性会禁止所有写操作(包括修改、删除、重命名、链接),即使root用户也需先移除i属性才能操作;a属性仅允许追加操作,适合日志文件(避免误删或修改历史日志)。
五、注意事项
-
权限配置注意:
- 遵循“最小权限原则”:仅授予必要权限,避免过度开放(如
777权限仅用于临时测试,生产环境禁用); - 目录若需“写”权限,必须同时授予x权限(否则w权限无效);
- 文件的执行权限(x)需谨慎授予,避免恶意脚本被运行。
- 遵循“最小权限原则”:仅授予必要权限,避免过度开放(如
-
特殊权限注意:
- setuid权限不可随意给系统命令(如
rm、cp),可能导致权限泄露; - sticky权限仅对目录有效,对文件无效;
/tmp目录默认已设置sticky权限(1777),无需手动修改。
- setuid权限不可随意给系统命令(如
-
特殊属性注意:
- 给
/etc/passwd、/etc/shadow等核心文件添加i属性前,需确保配置正确,避免无法修改; - 移除
i属性需root权限,普通用户无权限操作。
- 给
-
网站权限配置注意(生产环境实战):
- 网站程序文件:所有者root,权限644;目录:所有者root,权限755;
- 上传目录(如upload):所有者为网站运行用户(如www、nginx),权限755;
- 禁止上传目录的执行权限,避免恶意脚本执行;
- 核心配置文件(如数据库密码文件)添加
i属性保护。
六、总结与避坑指南
6.1 总结
本文覆盖Linux 12位权限管理的完整体系,核心可概括为四大模块:
- 基础核心:rwx权限的含义、数字对应关系,9位权限的计算方法;
- 实操技能:
chmod/chown/chattr命令的使用,文件与目录的权限测试; - 核心难点:文件与目录的权限差异,删除文件的权限逻辑;
- 安全配置:特殊权限、特殊属性的应用,网站权限的最佳实践。
核心原则:权限管理的核心是“隔离与最小授权”,既要保证业务正常运行,也要防范非法操作,是Linux系统安全的第一道防线。
6.2 避坑指南
- 权限计算坑:混淆文件与目录的权限作用,如认为目录r权限可直接查看内容(需x配合);
- 删除权限坑:误以为删除文件需要文件本身的w权限,实际取决于所在目录的w权限;
- 特殊权限坑:给
rm、bash等命令添加setuid权限,导致普通用户获得root权限; - 默认权限坑:新建文件无执行权限是正常现象(基准权限666),无需手动添加x;
- 网站权限坑:上传目录设置为777权限,导致恶意用户上传恶意脚本并执行;
- 特殊属性坑:给文件添加
i属性后忘记移除,导致无法修改配置(需用chattr -i); - 递归权限坑:修改目录权限时忘记
-R,导致内部文件权限未同步修改; - 用户组坑:修改文件所有者后,未同步修改用户组,导致用户组权限失效。

浙公网安备 33010602011771号