Linux 网站目录的文件权限应该怎么设置?
网站目录推荐权限:目录 755、文件 644、属主为 Web 服务器用户(如 www-data);上传目录禁执行、配置文件 600/640。绝对不要 777。本文给出完整设置命令与安全要点。
**推荐基线:目录 755、文件 644、属主设为 Web 服务器运行用户。**下面是完整做法和例外场景。
标准设置
# 属主改为 Web 服务器用户(Apache/Nginx 在 Debian/Ubuntu 上通常是 www-data)
sudo chown -R www-data: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 让文件可读不可被其他用户改写。
例外场景
上传目录:权限同样是 755/644,但必须加一层防护——禁止执行其中的脚本(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 位让新文件继承属组):chmod -R 2775 /var/www/html,并配合 umask 002。
Q:SELinux 开着时 chmod 对了还是 403?
检查文件上下文:ls -Z。Web 内容需要 httpd_sys_content_t,用 restorecon -Rv 修复。
Q:WordPress 之类需要自动更新怎么办?
让站点目录属主为 Web 服务器用户(www-data 可写),而不是放开给所有人。自动更新失败通常是属主问题,不是权限位问题。