web服务器执行目录权限配置核心是按角色精准授权:目录必须设x权限(如755或750)以允许web服务进入和读取,文件设644确保只读;归属权需匹配web进程用户组,上传/缓存目录须隔离并禁用脚本执行。

Web服务器执行目录的权限配置,核心是让程序能正常运行,又不让攻击者有机可乘。关键不是“全开”或“全锁”,而是按角色分清谁该读、谁该进、谁该改。
执行目录必须有 x 权限
Linux中,目录的执行(x)权限决定能否进入或访问其下的文件——哪怕只是 加载PHP脚本、执行CGI、读取index.html,都依赖这个“进门权”。没有x,Nginx/Apache会直接返回403 Forbidden。
- 目录设为 755(rwxr-xr-x):所有者可读写执行;组用户和其他人可读、可进,但不能改
- 若仅限内部服务访问(如内网API目录),可用 750:其他人完全无权访问
- 绝对不要用777或775作为执行目录权限,尤其当目录被Web进程直接解析时,易导致任意代码执行
文件权限要和目录权限匹配
执行目录里的文件,权限逻辑不同:PHP/JS/CSS等静态或脚本文件不需要自身有x权限(由Web服务器解释执行),但必须保证服务器能读到它们。
- PHP脚本、HTML、CSS、JS等:推荐 644(rw-r--r--)——所有者可改,Web进程(如www-data)只读
- 可执行脚本(如shell部署钩子):单独设为 755,并确保不在Web可访问路径下
- 上传目录或缓存目录不在此列——它们属于“写入区”,需另作隔离处理
归属权比数字权限更关键
chmod设对了,chown没配好,照样出问题。Web服务进程(如nginx、php-fpm)必须属于目录所属组,且该组拥有必要权限。
- 典型命令:
chown -R ftpuser:www /var/www/html(ftpuser负责部署,www组供Web服务读取) - 确认Web进程用户:查
ps aux | grep nginx或systemctl show nginx --property=UID - 避免用root属主——敏感目录如
/var/www应归普通用户+专用组,而非root
上传与缓存目录必须隔离执行权
允许写入的目录(如/uploads、/cache)是高危区。即使设为755,也得从机制上阻止脚本执行。
- Nginx配置示例:
location ~ ^/uploads/.*\.(php|pl|py|jsp|sh|cgi)$ { return 403; } - Apache可禁用
Options +ExecCGI,或用php_flag engine off - 目录本身权限建议设为 755 或 750,但绝不设777,也不给组或其他人w+x组合











