“不允许符号链接或无法访问链接目标” / CentOS 6上的Apache


30

我安装了全新的CentOS 6,在文档根目录中有一个指向我的开发文件的符号链接:

[root@localhost html]# ls -l
total 4
-rwxrwxrwx. 1 root root  0 Sep 18 20:16 index.html
-rwxrwxrwx. 1 root root 17 Sep 18 20:16 index.php
lrwxrwxrwx. 1 root root 24 Sep 18 20:19 refresh-app -> /home/billy/refresh-app/

我的httpd.conf具有:

<Directory "/">
    Options All
    AllowOverride None
    Order allow,deny
    Allow from all
</directory>

符号链接的目标具有权限,该权限应允许apache读取所需的任何内容:

 [root@localhost billy]# ls -l
total 40 (Some entries were omitted because the list was too long
drwxr-xr-x. 7 billy billy 4096 Sep 18 20:03 refresh-app

我还尝试通过更改禁用SELinux /etc/selinux/conf

SELINUX=disabled

但是,无论我做什么,当有人尝试转到该链接时http://localhost/refresh-app/,我都会看到403 FORBIDDEN错误页面,该页面写在/var/log/httpd/error_log

Symbolic link not allowed or link target not accessible

为什么Apache无法访问符号链接的目标?


apache以什么用户身份运行?您可以实际以该用户身份读取该资源吗?
draeath 2011年

同样,最好在宽松模式下运行selinux,然后使用sealert解析审核日志-这可以让您了解SELinux为何/如何拒绝它,甚至经常给您解决方案。
draeath 2011年

@draeath:我不知道如何检查。
比利·奥尼尔

@draeath:1.这不是生产盒子;我不在乎SELinux是否关闭。2.无论如何,我现在只是在进行故障排除-一旦找出根本原因,我可能会恢复它。
Billy ONeal

不用担心,这是一个普遍的疏忽,我第一次这样做时就呆了几天,serverfault.com / questions / 313485 /…::这是其中的错误之一。:D
whoami

Answers:


44

找到了问题。原来,阿帕奇要访问不只是我服务的目录,/home/billy/refresh-app/但也高于,即每个目录/home/billy//home/。(我不知道为什么……授予某人对子目录的访问权不应该放弃对该子目录之上的所有内容的许可...。)

我猜想它在寻找.htaccess什么,或者* nix对它如何对待目录遍历的权限感到奇怪。


15
这并不奇怪。这就是它的工作原理。您要尝试访问的整个路径必须具有+ x。
bahamat 2011年

4
@bahamat:这没有任何意义。为何有人需要未执行文件的执行特权?(这完全打折,以至于/几乎不必放弃……)带ACL的系统通常具有单独的目录横向选项。您可能会认为,自从Unix被设计30年之后,以及ACL系统的广泛可用性,ACL将成为标准。:sigh:
Billy ONeal

11
我相信他的意思是目录上的+ x。尝试切换到该用户并cd-进入目录w / o + x。从内存中,+ x允许您访问但看不到目录,而+ r允许您列出文件,而+ w允许您更改该目录中的文件

1
@BillyONeal:短语“整个路径”表示目录。
bahamat 2011年

5
在UNIX中,这是正确的行为。您需要对要更改为子目录下的子目录的父目录具有执行特权(g或o为+ x)。
slm

11

我有一个类似的问题,其中我曾使用过以下配置,该配置曾用于Ubuntu 10,但停止了与Ubuntu 14(Apache 2.4)的合作:

<Directory /var/www/vhosts/example.com/httpdocs>
    Options +FollowSymLinks
</Directory>

切换到此可解决问题(即使Web服务器用户无法直接访问符号链接)

<Directory /var/www/vhosts/example.com/httpdocs>
    Options +ExecCGI +FollowSymlinks -SymLinksIfOwnerMatch
</Directory>

据我所知,它只是-SymLinksIfOwnerMatch设置,与Apache 2.4中的更改有关,但是我没有尝试研究确切原因。

我还认为这可能openbase_dir归因于PHP的限制,但事实并非如此。


6

如果您链接到加密的文件夹,也可能导致此错误。


4

似乎“ FollowSymLinks”是您在httpd.conf中需要的选项。这里详细介绍。看起来您可能也需要htdocs中的规则...但这是您需要的选项。


3
请参阅Options All- FollowSymLinks已指定。
比利·奥尼尔

2

您可能还需要检查selinux是否被强制执行。在RedHat / Fedora上,执行以下命令:

getenforce

如果响应为“正在执行”,则可能要执行

setenforce 0

然后在浏览器中再次尝试该网址。

请注意,我并不是说禁用selinux是解决此问题的最佳方法,但它可能有助于确定原因。


这解决了符号链接问题,但是有负面影响吗?
digz6666 '18

2
Options +FollowSymLinks

创建一个.htaccess文件可以解决这个问题(将其放在符号链接之前的目录中)。


就我而言,我是在/var/www建立到另一个中间符号链接的符号链接。如果必须使用符号链接,请将其直接链接到目的地。
Sridhar Sarnobat

0

在允许所有权限并允许followymsymlink之后解决我的问题的方法“对于FollowSymLinks特别是,当位于.conf文件中时,它必须位于Directory结构中。摘自Apache当前手册

FollowSymLinks和SymLinksIfOwnerMatch选项仅在节或.htaccess文件中起作用。

从这里回答


0

我的解决方案是为所有名为的存储库创建一个共享文件夹 /home/repo

然后,从我自己的家像符号链接: ln -s /home/repo ~/Code 这么~/Code/www.xxxx.com/public/home/repo/www.xxxx.com/public

以及指向apache网站根目录的链接 /var/www/html 指向 /home/repo/www.xxxx.com/public

在这里找到它: https //github.com/alghanmi/ubuntu-desktop_setup/wiki/Git-Local-Repository-Setup-Guide

使用某些symlink + user group的技巧,您可以部署多个用户/版本。


0

@Billey奥尼尔@Flion我想不出在线路的答案(低代表计数)
这里是我必须做的:
注:别名LL =“$ LS LS_OPTIONS -lh”)

root@Bellach:/var/www/html# ll lego
lrwxrwxrwx 1 root root 43 Sep 10 21:21 lego -> /home/DATA/Documents/Chris/Synced/web/lego/

现在查看源链接中的每个目录

root@Bellach:/var/www/html# ll -d /home/DATA/Documents/Chris/Synced/web/
drwxr-xr-x 9 chris chris 4.0K Sep 12  2017 /home/DATA/Documents/Chris/Synced/web/
root@Bellach:/var/www/html# ll -d /home/DATA/Documents/Chris/Synced/
drwxr-xr-x 20 chris chris 4.0K Mar 27 18:52 /home/DATA/Documents/Chris/Synced/
root@Bellach:/var/www/html# ll -d /home/DATA/Documents/Chris/
drwxr-xr-x 36 chris chris 4.0K Jun 17 23:31 /home/DATA/Documents/Chris/
root@Bellach:/var/www/html# ll -d /home/DATA/Documents/
drwxr-xr-x 21 chris chris 4.0K Aug  7 18:22 /home/DATA/Documents/
root@Bellach:/var/www/html# ll -d /home/DATA/
drwxrwxr-- 10 root users 4.0K Sep 10 11:17 /home/DATA/
root@Bellach:/var/www/html# ll -d /home/
drwxr-xr-x 5 root root 4.0K Sep 10 10:37 /home/

/ home / DATA目录是罪魁祸首。
修复此问题:

root@Bellach:/var/www/html# chmod +x /home/DATA/
root@Bellach:/var/www/html# ll -d /home/DATA/
drwxrwxr-x 10 root users 4.0K Sep 10 11:17 /home/DATA/

该修复程序是即时的-无需重新启动apache。


-1

您可能还会调整SELinux设置,并且setenforce可能不在您的路上。所以试试这个:

sudo /usr/sbin/setenforce 0

并使其在重新启动之间持续存在

sudo vi /etc/sysconfig/selinux
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.