FollowSymLinks 默认不安全,因其不校验符号链接所有者关系且不限制路径范围,易导致越权访问;推荐改用SymLinksIfOwnerMatch或直接禁用,配合Indexes、ExecCGI等选项纵深防御。

FollowSymLinks 是 Apache 中一个高权限特性,启用后只要 Apache 进程有读取权限,就会无条件跟随符号链接——这可能导致越权访问系统任意路径,比如泄露 /etc/passwd、绕过网站根目录限制,甚至配合其他漏洞触发远程代码执行。风险控制的核心不是“要不要用”,而是“能不能安全地用”。
为什么 FollowSymLinks 默认不安全
它不校验符号链接与目标文件的所有者关系,也不检查路径是否在站点根目录内。攻击者只需上传一个指向 /var/log/apache2/access.log 的软链,就能通过访问该链接读取日志内容;若再结合 LFI 或 PHP 包含,危害进一步放大。
- 软链目标可以是绝对路径,不受 DocumentRoot 约束
- Apache 不会主动阻止跨分区、跨挂载点的符号链接解析
- 一旦配置在
<Location>块中,该指令直接被忽略,容易造成误判
更安全的替代方案:SymLinksIfOwnerMatch
这个选项只在符号链接文件与目标文件/目录属于同一 UID 时才允许解析,大幅缩小攻击面。虽然每次访问需额外做 stat() 检查(性能略低),但在生产环境中值得默认启用。
Apache 2.4.62 官方 tar.gz 源码包是 Linux 及类 Unix 系统构建 Web 服务器的核心基础。通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- 配置示例:
Options SymLinksIfOwnerMatch - 适用于静态资源目录(如
/var/www/html/uploads)需要有限软链支持的场景 - 不能和
FollowSymLinks同时存在,否则后者会被覆盖(Apache 按最后生效规则)
彻底禁用的推荐做法
绝大多数 Web 应用根本不需要符号链接功能。直接禁用是最简单有效的防御手段,尤其对 CMS、API 服务、前后端分离项目。
- 全局禁用写法:
Options -FollowSymLinks(在<Directory />或虚拟主机根目录块中) - 更激进但更干净:
Options None,再按需显式开启必要项,例如Options +SymLinksIfOwnerMatch +MultiViews - 注意:禁用后,所有依赖软链的部署方式(如共享 vendor 目录)需改用硬链或绑定挂载(bind mount)替代
配合其他 Options 实现纵深防御
单独控制 FollowSymLinks 不够,必须与其他关键选项协同加固:
-
Options -Indexes:防止目录结构泄露,避免暴露软链真实路径 -
Options -ExecCGI -Includes:阻断通过软链引入的可执行脚本或 SSI 注入 -
AllowOverride None:禁用 .htaccess,防止被恶意文件覆盖 Options 设置 - 对敏感路径追加独立拒绝规则,例如:
<Directory "/var/www/html/.git"> Require all denied </Directory>

















