Linux修改文件权限
Linux指南
2025-12-14 00:23
6707
引言:
Linux 的“权限”不是玄学,而是 9 个二进制位组成的守门人。本文用 5 分钟带你拆解 rwx 与 644、755、777 背后的计算逻辑;演示 chmod/chown/chattr 三条命令的 7 个高频场景;再送一张“Permission denied”排查漏斗图,让你遇到报错不再乱给 777。读完你也能把系统文件锁成“只读防弹衣”,又能在自动化脚本里一键解锁-修改-回锁,真正做到“最小权限、最大安全”。
1.权限模型:9 位 → 3 组 → 3 字符
r read 目录:可列出内容;普通文件:可读取内容
w write 目录:可增删子条目;普通文件:可修改内容
x execute 目录:可进入(cd);普通文件:可被内核加载执行
- 无对应权限
示例
拆解:
① 拥有者 root:rw- (6)
② 所属组 root:r-- (4)
③ 其他用户:r-- (4)
→ 八进制写法 644。
-rw-r--r-- 1 root root 1.2K Jun 11 09:45 /etc/fstab拆解:
① 拥有者 root:rw- (6)
② 所属组 root:r-- (4)
③ 其他用户:r-- (4)
→ 八进制写法 644。
2.最小权限原则:能 640 绝不 777
系统文件(如 /etc/fstab)推荐值chmod 644 /etc/fstab # root 可写,其余只读chmod 600 /etc/shadow # 仅 root 可读写
禁止 777,任何用户都能改,等于主动留后门。
3.修改权限:chmod / chown / chgrp
chmod u=rw,go=r file # 符号法,最直观
chmod 0644 file # 八进制法,脚本里常用
chmod -R 0755 dir/ # 递归目录
chown root:wheel file # 一次改“属主:属组”
4.出现 “Permission denied” 时的排查漏斗
-
看权限位
ls -l file -
看属主属组
id# 确认自己是谁、属于哪些组 -
看 ACL(若系统启用)
getfacl file -
看不可变属性
lsattr file -
看 SELinux/AppArmor 上下文(略)
5.不可变属性(chattr / lsattr)
i immutable 禁止任何修改(含 root)
e extent format extents 格式标志,**不要手动删**,否则可能损坏数据
a append only 只能追加,常用于日志防篡改
操作范式
sudo chattr -i file # 解除保护
sudo chattr +i file # 重新加锁
生产建议:
-
对 /etc/fstab、/etc/passwd 等系统关键文件,日常保持 +i;需要批量自动化部署时,脚本里先 -i → 修改 → +i。
-
不要手动 -e;内核自动管理,除非做文件系统调试。
6.完整操作示例(带恢复)
# 1. 查看
ls -l /etc/fstab
lsattr /etc/fstab
# 2. 临时解锁(如要新增挂载项)
sudo chattr -i /etc/fstab
sudo chmod 644 /etc/fstab
# 3. 编辑
sudo vim /etc/fstab
# 4. 校验语法(防止无法启动)
sudo mount -a
# 5. 恢复保护
sudo chmod 644 /etc/fstab
sudo chattr +i /etc/fstab
7.常见误区速查表
| 误区 | 正确做法 |
|---|---|
| 直接 777 解决一切 | 按最小权限递归,先 644/755,必要时再开放 |
| sudo 就能 chmod 任意文件 | 若文件带 +i,root 同样被拒绝,需先 chattr -i |
| 把 /etc/fstab 改成 440 就安全 | 440 导致非 root 无法读,某些工具(blkid、cloud-init)会失败;644 是通用值 |
| 写完 fstab 立即 reboot 验证 | 先用 mount -a 做语法检查,避免系统无法启动 |