web学习笔记编程技术学习与分享

Linux 权限模型:rwx 与 umask

2026 年 08 月 28 日约 3 分钟阅读 运维与部署

chmod 644、chown www:www 天天在用,但很多线上权限事故源于对这套模型理解不完整。

三组身份与三个位

每个文件有三组权限:属主(u)、属组(g)、其他人(o),每组有读(4)、写(2)、执行(1)三个位。

  • 文件的 x 表示可执行;
  • 目录的 x 表示可进入,r 只表示可列出文件名。目录只给 r 不给 x,能看名字但不能 cd 进去、也打不开里面的文件——这是「明明有读权限却 403」的常见原因。
ls -l /var/www/html
drwxr-x--- 5 www www 4096 site/    # www 可读写进入,组内可进可列,其他人无任何权限

umask:新文件的默认权限

新建文件的权限 = 666 - umask,目录 = 777 - umask(x 位对默认创建的文件不生效)。系统 umask 通常是 022,所以文件 644、目录 755。

陷阱在手工创建:某些环境下 umask 是 077 或 027,手工 echo 创建的配置文件会变成 600,Web 服务器(www 用户)读不到——服务无报错地 403/500,很难第一时间想到权限。

umask            # 查看当前
umask 022        # 临时修改
install -m 644 /tmp/conf /etc/app/conf   # 用 install 写文件,显式指定权限

属主与 SUID

chown user:group 第一个是属主、第二个是属组。web 目录常见做法:属主 root(或部署账号,拥有写权),属组 www(只需读),目录 750、文件 640——这样 web 进程无法修改自己的代码,即使被入侵也写不进可执行目录。

需要 web 进程写入的目录(上传、缓存)单独放开,并禁止执行:

chown -R www:www uploads/
chmod 750 uploads/
# 配合 Apache/Nginx 禁止 uploads 内脚本执行

几条实践

  • 权限最小化:宁可遇到「读不到」的报错,也不要先开 777;
  • 排查权限问题用 sudo -u www ls /path 模拟 web 用户视角,比对着猜快得多;
  • 定期 find /var/www -perm -o+w 找出可被任何人写的文件——它们是入侵后的后门温床;
  • 改配置前 stat 一下原文件,记录属主与权限,改坏了能恢复。
Linux权限安全