ArcLibrary

文件权限(rwx & ugo)

rwxr-xr-x 这个魔法字符串到底是什么意思 —— 一次讲清。

权限chmodchown
核心 · Key Idea

一句话:每个文件 / 目录有一个所有者所属组;分别给「所有者 / 同组 / 其他」三个对象配 r / w / x 权限,9 个 bit 决定一切。

是什么#

ls -l 输出:
-rwxr-xr-- 1 alice devs 42 Aug 1 12:34 run.sh
│└┬┘└┬┘└┬┘   └┬─┘ └┬─┘
│ │  │  │     │    └ 组
│ │  │  │     └ 所有者
│ │  │  └ other r 不可写不可执行
│ │  └ group r-x 可读可执行
│ └ user rwx 全权限
└ 文件类型 - / d / l / b / c

数字表示:r=4、w=2、x=1,rwxr-xr-- = 754。

打个比方#

打个比方 · Analogy

就像写字楼门禁卡

  • u (user) = 你自己;
  • g (group) = 你部门;
  • o (other) = 大楼里的任何人。

每张门有「能不能进 / 能不能改门 / 能不能开锁」三种权限。

关键概念#

r / w / x读 / 写 / 执行
目录的 r 是 ls 列表,x 是进入目录,w 是创建 / 删除内部文件。
chmod改权限
`chmod 755 file` 数字模式 / `chmod g+w file` 符号模式。
chown改所有者
`chown alice:devs file`。
umask缺省权限掩码
新建文件 / 目录的默认权限:完整权限 - umask。常见 022。
SUID / SGID / Sticky特殊位
SUID(4) 以所有者身份执行;SGID(2) 目录里新文件继承组;Sticky(1) /tmp 上只能删自己的。
ACL扩展权限
rwx 不够时用 `setfacl / getfacl` 给特定用户额外权限。

常用速查#

chmod 755 script.sh        # rwxr-xr-x
chmod 644 README.md        # rw-r--r--
chmod -R u+w,g-w dir/      # 递归
chown -R deploy:web /var/www/site
 
# 让自己写 / 别人只读
umask 022
 
# /tmp 的 sticky bit(已默认)
chmod 1777 /tmp
 
# 给某个用户单独读权限(不动 group)
setfacl -m u:bob:r-- secret.txt

怎么工作#

内核只看进程的 uid / gid 和文件元数据,跟登录名 / 路径没关系。

实操要点#

  • 生产环境忌 777:基本等于「全世界都能改」。
  • 目录 x 没有 = 进不去:常见坑:chmod -x dir 之后 cd 报错。
  • 文件 x 没有 = 不能直接执行:但还能 bash file 运行(用 bash 解释器代你读)。
  • 服务用户最小化:跑服务用专门用户(www-data / nginx),不要 root。
  • 看不到隐藏文件ls -la 显示 .hidden
  • stat file 看完整 metadata(uid / mtime / inode / 块大小)。

易混点#

rwx 权限位
简单 9 位 + 三类对象。
覆盖 95% 场景。
ACL
任意用户 / 任意组细粒度。
复杂时用,否则别滥用。

延伸阅读#