Linux 网站目录的文件权限应该怎么设置?

网站目录推荐权限:目录 755、文件 644、代码属主为部署用户,Web 服务器用户仅需读取;必要运行目录单独授权写入;上传目录禁执行、配置文件 600/640。绝对不要 777。本文给出完整设置命令与安全要点。

最佳实践
网络请求路由与访问控制示意

**推荐基线:目录 755、文件 644、代码属主设为部署用户,Web运行用户只读;仅必要运行目录可写。**下面是完整做法和例外场景。

标准设置

# 将deploy替换为实际部署账号,先确认站点目录不混入上传/机密/运行数据
sudo chown -R deploy:www-data /var/www/html

# 所有目录 755(rwxr-xr-x)
sudo find /var/www/html -type d -exec chmod 755 {} \;

# 所有文件 644(rw-r--r--)
sudo find /var/www/html -type f -exec chmod 644 {} \;

755 让 Web 服务器能读取和执行(目录的 x 位是"可进入"),644 让文件可读不可被其他用户改写。

例外场景

上传目录:仅授权应用写入所需目录,可按隔离需求使用750/640等最小权限,最好放Web根之外;还必须——禁止执行其中的脚本(Nginx 配置里对 uploads 路径禁用 PHP 解析等),防止用户上传 webshell 被执行。

含敏感信息的配置文件(数据库密码、API 密钥):

chmod 600 wp-config.php        # 仅属主可读写
# 或 640,允许同组读
chmod 640 config.php

需要 Web 服务器写入的目录(缓存、日志、会话):属主给 www-data 并保持 755 即可——不需要给"其他人"写权限。

红线:永远不要 777

chmod 777 意味着系统上任何进程都能改写你的网站文件,是服务器入侵后篡改页面的经典帮凶。遇到"权限不够"的正确解法是调整属主/属组,不是放开权限。

排障思路

网站 403 且日志报 Permission denied 时按序检查:路径上每一级父目录的 x 位 → 文件读权限 → SELinux 上下文(RHEL/CentOS 上 restorecon -Rv /var/www)。

排查多台 Web 主机时,可在观测云集中查询已采集的 Nginx 错误日志,按主机、时间及 Permission denied 筛选。把错误中的具体路径与上面的逐级权限检查对应起来,再重试请求,确认修改后错误不再出现。

常见问题(FAQ)

Q:部署用户和 www-data 都要写怎么办?
把两者放进同一属组,目录设 2775(setgid 位让新文件继承属组):仅对明确需要共享写入的运行目录用 find -type d 设置2770/2775,文件另设660/664并配umask或ACL;不要递归给所有代码文件加执行/setgid或写权限。

Q:SELinux 开着时 chmod 对了还是 403?
检查文件上下文:ls -Z。只读Web内容常用httpd_sys_content_t,写目录需匹配策略;自定义路径先持久配置fcontext规则,restorecon只按既有规则恢复,不自动授权所有访问。

Q:WordPress 之类需要自动更新怎么办?
优先由部署流程更新;确需Web进程自动更新时只对必要路径临时授予写权限并评估风险。失败可能涉及属主、模式、ACL或安全策略,不能仅归因属主。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台