documentroot 本身不是安全模块,防木马关键在于分离可写区与静态发布区、禁止上传目录执行php、严格设置文件系统权限及配合waf等纵深防御措施。

DocumentRoot 本身不能直接设为“只读权限”来防木马,它只是一个路径指向,Apache 不负责文件系统级的读写控制。真正起作用的是操作系统对目录和文件的权限设置,以及 Apache 自身对脚本执行、上传目录、动态解析等行为的限制。单纯把 DocumentRoot 目录 chmod 444 是不可行的——PHP 脚本、日志写入、缓存生成、CMS 自动更新等功能都会失败。
关键思路:分离可写区与静态发布区
安全配置的核心不是让整个 DocumentRoot 只读,而是让网站运行必需的可写部分最小化、隔离化、无解析能力:
- DocumentRoot 指向纯静态资源目录(如
/var/www/html/public),里面只放 HTML/CSS/JS/图片,不放 PHP 文件 - 所有可写目录(如
uploads/、cache/、runtime/)必须移出 DocumentRoot,或用符号链接指向外部独立路径 - 若必须保留在 DocumentRoot 下(如 WordPress 的
wp-content/uploads),则必须禁止该目录内执行 PHP
禁止上传目录执行 PHP(最常用且有效)
在虚拟主机配置或主配置中加入:
通过PDFAPIHub云API将office文档(DOCX、DOC、PPT、PPTX、XLS、XLSX、CSV、TXT、ODT、RTF)转换为PDF,文档上传至pdfapihub.com完成转换。
<directory>
php_admin_flag engine off
<filesmatch>
Require all denied
</filesmatch></directory>
注意:php_admin_flag engine off 是最彻底的方式(适用于 mod_php),比仅 deny 文件更可靠;Require all denied 是 Apache 2.4+ 的写法,旧版用 Deny from all。
操作系统层加固(必须做)
确保 Web 进程用户(如 www-data 或 apache)对 DocumentRoot 仅有必要权限:
- 静态文件(HTML/CSS/JS/图片)设为
644,目录设为755 - 禁止 Web 用户拥有 DocumentRoot 所有者权限(即不要用
chown -R www-data:www-data /var/www/html) - 推荐所有者为部署用户(如
deploy:www-data),Web 进程仅属组可读,不可写 - 用
chattr +a或chattr +i锁定关键文件(如.htaccess、index.php)需谨慎,可能影响 CMS 升级
配合其他防御手段才完整
单靠 DocumentRoot 权限无法防木马,还需组合以下措施:
- 禁用目录浏览:
Options -Indexes - 隐藏服务器信息:
ServerTokens Prod和ServerSignature Off - 限制 .htaccess 等敏感文件访问:
<files>Require all denied</files> - 定期扫描可疑 PHP 文件(如含
eval(、base64_decode(、system(的文件) - 使用 WAF(如 mod_security)拦截常见 Webshell 请求特征










