Apache 的 www-data 用户对 /var/www 的权限怎么设置最合理?

/var/www 推荐权限:属主 root 或部署用户、组 www-data;目录 755、文件 644;需写入的目录(上传/缓存)单独给 www-data 写权限。切忌 777。本文给出命令与安全原则。

最佳实践
Apache 的 www-data 用户对 /var/www 的权限怎么设置最合理?封面

推荐基线:站点文件属主给部署者**(如 root 或你的部署用户),组设为 www-data;目录权限 755、文件权限 644;只有 Apache 必须写入的目录(上传、缓存、日志)才把属主或写权限单独给 www-data。底线:绝不 chmod -R 777。**

标准设置

# 1. 属主:root 拥有,组为 www-data(组可读)
sudo chown -R root:www-data /var/www/mysite

# 2. 目录 755(可进入可列出)
sudo find /var/www/mysite -type d -exec chmod 755 {} \;

# 3. 文件 644(可读不可执行写入)
sudo find /var/www/mysite -type f -exec chmod 644 {} \;

Apache(以 www-data 运行)通过组读拿到内容,部署者通过属主写更新内容。

可写目录单独开

# 以上传目录为例
sudo chown -R www-data:www-data /var/www/mysite/uploads
sudo find /var/www/mysite/uploads -type d -exec chmod 755 {} \;
sudo find /var/www/mysite/uploads -type f -exec chmod 644 {} \;

可写目录还应:禁止执行脚本(Apache 配置里 php_admin_flag engine off 或 Nginx 里禁 PHP 解析),防上传木马被执行。

多人/自动化部署场景

部署用户不止一个时,用组协作模型:

sudo groupadd deploy
sudo usermod -aG deploy alice
sudo usermod -aG deploy bob
sudo chown -R root:deploy /var/www/mysite
sudo chmod -R g+rwX /var/www/mysite
# setgid 位让新文件继承组
sudo find /var/www/mysite -type d -exec chmod g+s {} \;

再配合 ACL 让 www-data 保持可读:sudo setfacl -R -m g:www-data:r-X /var/www/mysite

原则小结

  1. Apache 只需要的地方绝不开写
  2. 必须写的地方最小范围开放+禁执行
  3. 777 任何时候都不是答案

观测云对照

权限类故障在日志里有签名。 Apache/PHP 的 permission denied、上传失败等报错集中采集到观测云后,与发布/变更时间线对照,可快速定位是哪次部署改错了属主。

常见问题(FAQ)

Q:直接把属主全给 www-data 行不行?
A:能跑但不推荐——应用漏洞(如 webshell)拿到 www-data 就能改写全部代码文件;属主给部署者、组给 www-data 的结构更稳。

Q:FTP/CI 上传后权限又乱了?
A:给目录加 setgid + 配置部署工具的 umask(如 022),让新文件自动继承组与正确权限位。

Q:SELinux 环境(CentOS)还要注意什么?
A:httpd 能读的上下文是 httpd_sys_content_t,可写目录要 httpd_sys_rw_content_tsemanage fcontext + restorecon

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台