Linux 目录执行权限的运用:Web 服务器目录安全加固

作者:袖梨 2026-07-20
目录执行权限(x)是Web服务器“进门”的必要条件,缺它会导致403错误;根目录推荐755,静态文件用644,上传目录须隔离并禁用脚本执行。

Web 服务器目录的执行权限(x)不是“让文件运行”,而是“让服务进门”——没有它,Nginx 或 Apache 连 index.html 都读不到,直接返回 403。

目录必须有 x 权限,否则进不去

Linux 中,目录的 x 权限决定能否 cd 进入、能否访问其下的文件。Web 服务器加载 PHP、读取 CSS、解析 HTML,全依赖这个“进门权”。哪怕所有文件都是 644,只要父目录没 x,请求就失败。

  • 常规网站根目录建议设为 755(rwxr-xr-x):所有者可管理,Web 进程(如 www-data)可进入+读取,其他人同理
  • 内网 API 或后台管理目录可用 750:组内可进可读,其他人完全无权访问
  • 绝对避免 777、775 或 757:尤其当目录被 Web 服务直接解析时,攻击者可能上传并执行恶意脚本

文件权限要和目录“分工”匹配

PHP、HTML、JS、CSS 等不是可执行程序,它们由 Web 服务解释执行,自身不需要 x 权限。重点是确保 Web 进程能稳定读到内容。

  • 静态资源与脚本文件统一用 644(rw-r--r--):所有者可编辑,Web 进程只读
  • 真正需要执行的脚本(如部署钩子、CLI 工具)单独设为 755,且不能放在 Web 可访问路径下(如 /var/www/html/ 内)
  • 配置文件(如 .env、config.php)建议 640,归属 root:www,禁止其他用户读取

归属权比 chmod 更关键

chown 没配对,chmod 再准也没用。Web 进程(nginx/php-fpm)必须属于目录所属组,且该组拥有对应权限。

  • 典型命令:sudo chown -R deployer:www /var/www/example.com
  • 确认 Web 进程用户:ps aux | grep nginxsystemctl show nginx --property=UID
  • 避免 root 属主:敏感目录如 /var/www 应归普通部署用户 + 专用组(如 www),而非 root

上传与缓存目录必须隔离执行能力

/uploads、/cache 这类允许写入的目录是高危区。即使设为 755,也得从机制上禁掉脚本执行。

  • Nginx 示例:location ~ ^/uploads/.*.(php|pl|py|jsp|sh|cgi)$ { return 403; }
  • Apache 示例:<Directory "/var/www/uploads"> php_flag engine off </Directory>
  • 目录本身权限建议 770(配合 SGID)或 750,确保只有开发组 + Web 进程可访问,不开放 world 写权限

相关文章

精彩推荐