Linux 的文件权限系统是服务器安全的基础防线。理解 rwx 的含义、数字权限与字母权限的对应关系,并正确使用 chmodchown,能有效防止文件被未授权访问或误操作。本文从原理出发,结合典型场景给出实用的权限配置建议。

本文要点

  • rwx 权限位的含义与三组主体
  • 数字权限与字母权限的对应关系
  • chmod 与 chown 的用法
  • umask 与常见目录权限建议

权限的三要素:主体、对象、操作

Linux 对每个文件/目录都记录三组权限,分别对应三类主体:

主体英文说明
所有者user (u)文件的创建者或被 chown 指定的用户
所属组group (g)文件所属的用户组
其他人others (o)既非所有者也非所属组的用户

每个主体可被赋予三种操作权限:

权限字母数字对文件的含义对目录的含义
r4可读取文件内容可列出目录内容(ls)
w2可修改文件内容可创建/删除目录中的文件
执行x1可作为程序运行可进入目录(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) 的加和:

常见数字含义典型用途
777rwxrwxrwx(所有人全权限)绝对不要用于生产环境
755rwxr-xr-x可执行文件、目录
644rw-r--r--普通文本文件、配置文件
600rw-------私钥、密码文件
700rwx------私密目录(如 ~/.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_keys

chown:修改所有者与所属组

# 修改文件所有者为 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/html755(目录)/ 644(文件)让 Web 服务器可读
~/.ssh700SSH 配置目录,仅自己可访问
~/.ssh/authorized_keys600公钥文件,SSH 严格检查
~/.ssh/id_ed25519600私钥文件,防泄露
/etc/nginx/nginx.conf644配置文件,通常可读但只 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 {} \; 修改目录。