如何让 Apache 跟随符号链接到另一个目录,而无需将目标目录的每个父目录 chmodding 为 o+x?

如何让 Apache 跟随符号链接到另一个目录,而无需将目标目录的每个父目录 chmodding 为 o+x?

例如,我遇到了与此问题相同的问题:https://stackoverflow.com/questions/7381371/apache-wont-follow-symlinks-403-forbidden

我的 DocumentRoot 位于/srv/http/default/htdocs,我正在尝试将其符号链接到/home/trusktr/htdocs

为了让它工作,我必须将chmod o+x每个目录都放到下面/home/trusktr/htdocs,例如:

chmod o+x /home
chmod o+x /home/trusktr
chmod o+x /home/trusktr/htdocs

然后它开始工作,就像我上面提到的问题一样。

我已Options Indexes FollowSymLinks设定为/srv/http/default/htdocs

如何使符号链接(软链接)工作而无需chmod任何文件夹o+x

答案1

这显然取决于文件夹的所有权(组)。

如果 apache 进程无权访问文件夹,则只需为文件夹设置全局执行。如果要阻止授予全局执行权限,请将文件夹重新分配给 apache 进程运行的组,并授予该组执行权限(“g+w”)。

答案2

像 apache 一样思考 - 无论链接指向哪里,apache 运行的用户(或者如果使用 FastCGI,可能是分配给虚拟主机的用户)必须具有对此目标的文件系统访问权限。您可以通过几种方式“修复”它:

1)像你所描述的那样,chmodding 目录

2)你将用户添加到与 apache 相同的组中,并使目录组可读

3)而不是为 apache 进行 chmodding,您可以执行相反的方向 - 为用户链接它,并将其物理地放在 apache 的 htdocs 树下(或将 apache 用户添加到用户所属的某个组,并使他的目录组可读)

4) 您可以使用“mount -bind”将目标挂载到 apache 可见的某个目录中。有一种方法可以使用 suexec 动态执行此操作,但是如果是特定情况并且只有一个目录,我猜您可以手动挂载它(如果需要,可以将 mount -bind 放入 fstab 中)

无论如何,就像 arkascha 所说的那样,这是权限问题,主要通过操纵组所有权/组可读权限来解决。

哦,当您需要检查它是否正常工作时,我的意思是,如果 apache 看到了它应该看到的内容,您可以通过 sudo 操作 apache 用户(从根会话,如“su -s /bin/bash www-data”)来确保它确实看到了内容 - 并且在作为 apache 用户时,只需尝试“cd”到该目录即可。因此,如果此用户可以转到特定目录,则以“他”身份运行的 Web 服务器也可以。

6)理论上,您还可以将 apache 配置为以您需要访问目录的同一用户身份运行(而不是 www-data 等),但这可能是最糟糕的想法:)

相关内容