例如,我遇到了与此问题相同的问题: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 等),但这可能是最糟糕的想法:)