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

Bil*_*eal 35 permissions centos apache-httpd

我有一个全新的 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/
Run Code Online (Sandbox Code Playgroud)

我的 httpd.conf 有这个:

<Directory "/">
    Options All
    AllowOverride None
    Order allow,deny
    Allow from all
</directory>
Run Code Online (Sandbox Code Playgroud)

符号链接的目标具有允许 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
Run Code Online (Sandbox Code Playgroud)

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

SELINUX=disabled
Run Code Online (Sandbox Code Playgroud)

然而,无论我做什么,当有人试图访问该链接时http://localhost/refresh-app/,我都会收到一个 403 FORBIDDEN 错误页面,它写在/var/log/httpd/error_log

Symbolic link not allowed or link target not accessible
Run Code Online (Sandbox Code Playgroud)

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

Bil*_*eal 48

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

我猜它正在寻找.htaccess什么,或者 *nix 可能对它如何处理目录横向权限感到奇怪。

  • 这并不奇怪。这就是它的工作原理。您必须对要访问的整个路径使用 +x。 (15认同)
  • 我相信他的意思是目录上的 +x 。尝试切换到用户和 cd-ing 到没有 +x 的目录。从内存中 +x 允许您访问但看不到目录,而 +r 允许您列出文件,+w 允许您更改所述目录中的文件 (11认同)
  • 这是 unix 中的正确行为。您需要对试图将其更改为子目录下的父目录的执行权限(g 或 o 为 +x)。 (5认同)
  • @bahamat:这没有任何意义。为什么有人需要对未执行文件的执行权限?(这完全打消了人们不应该放弃对`/`...的权利...几乎永远)具有 ACL 的系统通常具有单独的目录横向选项。在 Unix 设计 30 年后,以及 ACL 系统的广泛可用性之后,您会认为 ACL 将成为标准。:叹: (4认同)
  • @BillyONeal:短语“整个路径”意味着目录。 (2认同)

icc*_*c97 15

我有一个类似的问题,我有以下配置,它曾经与 Ubuntu 10 一起工作,但停止与 Ubuntu 14 (Apache 2.4) 一起工作:

<Directory /var/www/vhosts/example.com/httpdocs>
    Options +FollowSymLinks
</Directory>
Run Code Online (Sandbox Code Playgroud)

切换到此排序问题(即使网络服务器用户无法直接访问符号链接)

<Directory /var/www/vhosts/example.com/httpdocs>
    Options +ExecCGI +FollowSymlinks -SymLinksIfOwnerMatch
</Directory>
Run Code Online (Sandbox Code Playgroud)

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

我还认为这可能归结为openbase_dirPHP 中的限制,但事实并非如此。


小智 7

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