Linux 文件权限控制谁可以读取、写入和执行文件。理解 chmod 和权限表示法对于使用服务器、Docker 或 CI/CD 的开发者至关重要。
理解权限系统
Linux 中每个文件和目录都有三组权限:所有者(user)、所属组(group)和其他人(others)。每组可授予三种访问权限:
- r — 读取 (r) — 查看文件内容或列出目录条目
- w — 写入 (w) — 修改文件内容或在目录中创建/删除文件
- x — 执行 (x) — 以程序方式运行文件或进入目录
-rwxr-xr-x 1 user group 4096 Feb 10 file.sh
│││ │││ │││
│││ │││ └── Others: r-x (read + execute = 5)
│││ └──── Group: r-x (read + execute = 5)
└────── Owner: rwx (read + write + execute = 7)
Result: 755八进制表示法详解
每组权限可以用 0-7 的单个数字表示,数字是权限值的总和:
4— 读取 = 42— 写入 = 21— 执行 = 10— 无权限 = 0
八进制参考表
| Octal | rwx | Meaning |
|---|---|---|
0 | --- | No permission |
1 | --x | Execute only |
2 | -w- | Write only |
3 | -wx | Write + Execute |
4 | r-- | Read only |
5 | r-x | Read + Execute |
6 | rw- | Read + Write |
7 | rwx | Read + Write + Execute |
常用权限值
777777 — 所有人完全访问。生产环境中避免使用!仅用于临时调试。755755 — 所有者完全权限;组和其他人可读取和执行。目录和可执行文件的标准权限。644644 — 所有者可读写;组和其他人只读。普通文件的标准权限。600600 — 仅所有者可读写。用于私密配置文件和 SSH 密钥。400400 — 仅所有者只读。用于证书等敏感只读文件。chmod 命令语法
数字模式一次设置所有权限:
chmod 755 script.sh # rwxr-xr-x
chmod 644 config.json # rw-r--r--
chmod 600 id_rsa # rw-------
chmod -R 755 /var/www/html # Recursive符号模式修改特定权限:
chmod u+x script.sh # Add execute for owner
chmod g-w file.txt # Remove write from group
chmod o+r file.txt # Add read for others
chmod a+x script.sh # Add execute for all (a = all)
chmod u=rwx,go=rx dir/ # Set owner=rwx, group+others=rx实用示例
# Web server setup
chmod 755 /var/www/html
chmod 644 /var/www/html/index.html
chmod 644 /var/www/html/style.css
# SSH key permissions
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 600 ~/.ssh/authorized_keys
# Script permissions
chmod +x deploy.sh
chmod 755 /usr/local/bin/my-tool
# Docker volume permissions
chmod -R 777 /tmp/build # Temporary build dir only!特殊权限:SUID、SGID、Sticky Bit
SUID (4xxx) — 以文件所有者身份运行。例如 /usr/bin/passwd 以 root 运行。
chmod 4755 /usr/bin/passwdSGID (2xxx) — 以文件组身份运行,或目录中新文件继承组。
chmod 2755 /shared/projectSticky Bit (1xxx) — 仅文件所有者可删除目录中的文件。例如 /tmp。
chmod 1777 /tmp常见错误和安全提示
- 生产环境中不要使用 chmod 777 — 它给所有人完全访问权限。
- SSH 密钥必须是 600 或 400 — SSH 拒绝使用组/其他人可访问的密钥。
- Web 服务器文件应为 644(文件)和 755(目录)。
- 谨慎使用 chmod -R — 递归更改可能破坏系统。
- 更改前后用 ls -la 检查权限。
试试我们的交互式 Chmod 计算器
Chmod Calculator →FAQ
chmod 777 是什么意思?
chmod 777 给所有者、组和其他人读取(4)、写入(2)和执行(1)权限 — 所有人完全访问。这是安全风险,应在生产环境中避免。
755 和 644 有什么区别?
755 给所有者完全权限,其他人读取+执行(用于目录和脚本)。644 给所有者读写,其他人只读(用于普通文件)。
为什么 SSH 拒绝我的密钥文件?
SSH 要求私钥文件权限为 600 或更严格。运行:chmod 600 ~/.ssh/id_rsa
什么是 Sticky Bit?
Sticky bit (chmod 1xxx 或 chmod +t) 防止用户删除共享目录中非自己所有的文件。/tmp 目录使用此功能。
如何查看当前文件权限?
运行 ls -la 查看 rwx 格式的权限。第一列显示如 -rwxr-xr-x(等于 755)的权限字符串。