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);普通文件:可被内核加载执行  
-  无对应权限
示例
-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” 时的排查漏斗

  1. 看权限位
    ls -l file
  2. 看属主属组
    id # 确认自己是谁、属于哪些组
  3. 看 ACL(若系统启用)
    getfacl file
  4. 看不可变属性
    lsattr file
  5. 看 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 做语法检查,避免系统无法启动
Powered by ©智简魔方