Linux 的文件权限系统是服务器安全的基础防线。理解 rwx 的含义、数字权限与字母权限的对应关系,并正确使用 chmod 和 chown,能有效防止文件被未授权访问或误操作。本文从原理出发,结合典型场景给出实用的权限配置建议。
本文要点
- rwx 权限位的含义与三组主体
- 数字权限与字母权限的对应关系
- chmod 与 chown 的用法
- umask 与常见目录权限建议
权限的三要素:主体、对象、操作
Linux 对每个文件/目录都记录三组权限,分别对应三类主体:
| 主体 | 英文 | 说明 |
|---|---|---|
| 所有者 | user (u) | 文件的创建者或被 chown 指定的用户 |
| 所属组 | group (g) | 文件所属的用户组 |
| 其他人 | others (o) | 既非所有者也非所属组的用户 |
每个主体可被赋予三种操作权限:
| 权限 | 字母 | 数字 | 对文件的含义 | 对目录的含义 |
|---|---|---|---|---|
| 读 | r | 4 | 可读取文件内容 | 可列出目录内容(ls) |
| 写 | w | 2 | 可修改文件内容 | 可创建/删除目录中的文件 |
| 执行 | x | 1 | 可作为程序运行 | 可进入目录(cd) |
读取权限信息
用 ls -l 查看权限:
ls -l /var/www/html/index.html
# 输出示例:
# -rw-r--r-- 1 www-data www-data 1234 May 31 10:00 index.html
# ^^^^^^^^^ 权限位(10位)
# 格式:文件类型 + 所有者权限 + 组权限 + 其他人权限权限位 -rw-r--r--:文件类型 -(普通文件),所有者 rw-(读写),组 r--(只读),其他 r--(只读)。
数字权限换算
每组权限是 r(4)+w(2)+x(1) 的加和:
| 常见数字 | 含义 | 典型用途 |
|---|---|---|
| 777 | rwxrwxrwx(所有人全权限) | 绝对不要用于生产环境 |
| 755 | rwxr-xr-x | 可执行文件、目录 |
| 644 | rw-r--r-- | 普通文本文件、配置文件 |
| 600 | rw------- | 私钥、密码文件 |
| 700 | rwx------ | 私密目录(如 ~/.ssh) |
chmod:修改权限
数字方式
# 将文件设置为 644
chmod 644 /var/www/html/index.html
# 将目录设置为 755(递归)
chmod -R 755 /var/www/html/字母方式
# 给所有者加执行权限
chmod u+x script.sh
# 移除其他人的写权限
chmod o-w config.txt
# 只让所有者有读写权限
chmod 600 ~/.ssh/authorized_keyschown:修改所有者与所属组
# 修改文件所有者为 www-data
chown www-data /var/www/html/index.html
# 同时修改所有者和所属组
chown www-data:www-data /var/www/html/
# 递归修改目录
chown -R www-data:www-data /var/www/html/chmod 777 是安全隐患
chmod 777 让任何人都能读写执行,在有多用户的系统上相当于把文件完全开放。除非完全理解后果,否则永远不要对 Web 目录或配置文件使用 777。
umask:控制新文件的默认权限
umask 是创建文件/目录时的权限遮罩,决定默认权限。
umask # 查看当前 umask,通常为 0022
# umask 0022 意味着:
# 新建文件默认权限 = 666 - 022 = 644
# 新建目录默认权限 = 777 - 022 = 755常见目录权限建议
| 目录/文件 | 推荐权限 | 说明 |
|---|---|---|
| /var/www/html | 755(目录)/ 644(文件) | 让 Web 服务器可读 |
| ~/.ssh | 700 | SSH 配置目录,仅自己可访问 |
| ~/.ssh/authorized_keys | 600 | 公钥文件,SSH 严格检查 |
| ~/.ssh/id_ed25519 | 600 | 私钥文件,防泄露 |
| /etc/nginx/nginx.conf | 644 | 配置文件,通常可读但只 root 可写 |
权限排查技巧
遇到 Permission denied 报错,先用
ls -l 查看文件权限,再用 id 查看当前用户身份,对比分析缺少哪种权限。小结
- rwx 对应 4/2/1,三组(u/g/o)各自独立
- chmod 修改权限,支持数字和字母两种方式
- chown 修改所有者,-R 递归整个目录
- 生产环境避免 777,私密文件用 600,可执行用 755
- 遇到权限错误:ls -l 看权限 + id 看身份
常见问题
chmod 755 和 chmod 644 分别适用于什么场景?
755 用于目录和可执行文件(所有人可读可执行,只有所有者能写);644 用于普通文件(所有人可读,只有所有者能写)。
为什么 SSH 密钥文件权限必须是 600?
SSH 客户端和服务端都会严格校验密钥文件权限,权限过宽(如 644)会拒绝使用该文件,提示 Permissions are too open。
chown 和 chmod 哪个先执行?
两者相互独立,没有顺序要求。通常先 chown 确定所有者,再 chmod 设置权限,这样更直观。
如何批量修改目录下所有文件为 644、子目录为 755?
分两步:find /path -type f -exec chmod 644 {} \; 修改文件;find /path -type d -exec chmod 755 {} \; 修改目录。