我正在将一些托管帐户从带有 Apache 2.2 的 CentOS 6 转移到带有 Apache 2.4.34 的 CentOS 7。其中一些帐户通过目录符号链接符号链接到文件里面文件的 DocumentRoot外部DocumentRoot。
像这样:
root:root /var/lib/common/html/
user:user /home/user/app/ => /var/lib/common/html/
user:user /home/user/html/file.html => /home/user/app/file.html
它适用于 Apache 2.2。在 Apache 2.4 上,我收到 403 权限被拒绝响应。我找不到SymLinkIfOwnerMatch
设置的证据,只能通过 grepping 配置文件找到。如果我将所有权设置为,FollowSymLinks
403 错误就会消失。(请注意,“中间人”目录符号链接所有权无关紧要。无论如何,Apache 都会遵循它。)/home/user/html/file.html
root:root
Apache 2.4 是否会总是需要符号链接所有权匹配吗?似乎直接访问、mod_rewrite 甚至 Alias 都在强制所有权匹配,我不明白为什么。
答案1
我找到了答案。我使用的控制面板提供了一个带有附加补丁的 Apache 版本,它还包含一个harden-symlinks.patch
文件 (来源)。补丁建议UnhardenSymLinks
使用 Apache 选项,但当我尝试时,apachectl 出现错误Option UnhardenedSymLinks not allowed here
。我在 VirtualHost 内部和外部、目录内部都尝试过,但它在任何地方都没有通过配置测试。
经过一番研究,似乎该补丁在大多数常见的托管控制面板中都很受欢迎。如果您正在使用其中一个,那么SymLinksIfOwnerMatch
即使您FollowSymLinks
在配置中指定,您也很可能使用它。