网站目录权限设置原则,最小权限最佳实践
网站目录权限设置的核心原则是最小权限:只给程序运行和用户访问所必需的最低权限,不多给一分。
对绝大多数 PHP、静态站点来说,目录用 755,文件用 644,所有者和用户组指向 Web 运行用户(如 www 或 nginx)即可。
下面按零基础可执行的方式,讲清准备、操作、避坑和验证。
先搞懂权限数字和适用场景
Linux 权限用三位数字表示:第一位是所有者,第二位是用户组,第三位是其他人。7 代表读+写+执行,5 代表读+执行,4 代表只读。
所以:
- 目录 755:所有者可读写执行,其他人只能读和执行(进入目录)。
- 文件 644:所有者可读写,其他人只读。
- 不要给目录 777:这意味着任何人都能写入和删除文件,是常见的入侵入口。
适用场景:新装网站、迁移后打不开、上传图片失败、后台提示无写入权限。
只要涉及网站根目录,都按这套原则处理。
操作前确认两件事
- 确认 Web 运行用户。Nginx 通常是
nginx或www,Apache 是www-data或apache,宝塔面板默认是www。用命令查看:
ps aux | grep nginx
ps aux | grep apache
输出第一列就是运行用户。
如果同时装了 Nginx 和 PHP-FPM,以 PHP-FPM 的运行用户为准,因为 PHP 需要写文件。
- 确认网站根目录路径。常见为
/www/wwwroot/你的域名或/var/www/html。不确定时,在宝塔面板“网站”列表点击“根目录”即可看到。
用命令行批量修正权限
假设网站目录是 /www/wwwroot/example.com,Web 用户是 www。
依次执行:
# 1. 把目录和文件所有者改为 Web 用户
chown -R www:www /www/wwwroot/example.com
# 2. 所有目录设为 755
find /www/wwwroot/example.com -type d -exec chmod 755 {} \;
# 3. 所有文件设为 644
find /www/wwwroot/example.com -type f -exec chmod 644 {} \;
执行后,用 ls -l 抽查几个文件和目录,例如:
ls -ld /www/wwwroot/example.com
ls -l /www/wwwroot/example.com/index.php
目录应显示 drwxr-xr-x,文件应显示 -rw-r--r--。
如果个别目录需要上传功能(如 uploads、cache),可单独给写权限:
chmod -R 775 /www/wwwroot/example.com/uploads
chown -R www:www /www/wwwroot/example.com/uploads
注意:775 只给用户组写权限,比 777 安全,但仍应尽量缩小范围。
宝塔面板用户的操作路径
不习惯命令行的,可以在宝塔面板完成:
- 进入“网站” → 找到对应站点 → 点击“根目录”右侧的“权限”。
- 所有者选择
www,用户组选择www。 - 权限勾选:目录
755,文件644。宝塔面板通常有“应用到子目录”选项,勾选后确认。 - 如果某个子目录需要写入,单独进入该目录,把权限改为
755或775,不要整个站点设777。
避坑:这些做法会埋下安全隐患
- 不要用
chmod -R 777。网上很多“一键解决权限问题”的教程会让你执行这条命令,它等于把服务器大门敞开。 - 不要把所有者改成
root。Web 进程以www运行时,如果文件属于root,程序无法写入缓存或上传目录,可能报 500 或无法保存。 - 不要给所有文件加执行权限。
chmod +x只应给需要执行的脚本,普通 PHP 文件不需要。 - 迁移网站后忘记改所有者。从其他服务器打包过来的文件,所有者可能是旧用户名,需要用
chown重新指定。 - 宝塔面板的“防跨站攻击”开关。开启后,PHP 会限制在网站目录内运行,一般建议保持开启,不要为了省事关掉。
验证权限是否生效
完成设置后,按以下顺序检查:
- 浏览器访问网站首页,确认不再出现
403 Forbidden或500 Internal Server Error。 - 登录网站后台,尝试上传一张图片或保存一篇文章,确认写入正常。
- 在命令行查看错误日志,确认没有权限相关报错:
tail -f /www/wwwlogs/example.com.error.log
- 用
namei -l /www/wwwroot/example.com/uploads查看从根目录到目标目录每一级的权限,确保路径上每一层都可进入。
如果仍然报错,
优先检查 SELinux 是否开启(CentOS 常见),
可用 getenforce 查看,
若为 Enforcing,
需要根据情况调整策略或设为 Permissive 测试,
但生产环境不建议直接关闭。
几个高频疑问
为什么目录是 755 而不是 644?
因为目录需要“执行”权限才能进入和遍历,没有执行权限就无法访问里面的文件。
上传目录用 755 还是 775?
如果 Web 用户和文件所有者相同,755 就够;如果 PHP 以不同用户运行,需要 775 并确保用户组正确。
修改权限后网站打不开了怎么办?
先检查所有者是否改错,再检查目录是否有执行权限。用 ls -l 逐级排查,通常能快速定位。
Windows 服务器需要这样设置吗?
Windows 用 NTFS 权限,逻辑类似:给 IIS 或 PHP 运行账户“读取和执行”“写入”权限,不要给 Everyone 完全控制。
权限设置不是一次性的工作,新增目录或迁移后都要复查。
坚持最小权限原则,网站目录权限设置原则就真正落地了。