即使设置了权限,Apache 也不会跟踪符号链接

即使设置了权限,Apache 也不会跟踪符号链接

我无法让 apache 跟踪 Web 根目录之外的符号链接,即使权限看起来正常并且 FollowSymLinks 已打开。详细信息如下。

我有两个世界可读的文本文件:/tmp/hello/var/www/html/hello。此外,在 webroot 中,我有这两个文件的符号链接。两者似乎都很好。

$ ll /tmp
drwxrwxrwt. 27 root   root       4096 Jul  8 13:55 ./
dr-xr-xr-x. 23 root   root       4096 Jul  4 23:24 ../
-rw-r--r--.  1 root   root          6 Jul  8 13:55 hello

$ ll /var/www/html
drwxr-xr-x. 3 root   root   4096 Jul  8 13:56 ./
drwxr-xr-x. 6 root   root   4096 Apr  4 12:57 ../
-rw-r--r--. 1 root   root     20 Jul  8 14:03 hello
lrwxrwxrwx. 1 root   root      5 Jul  8 14:04 link-local -> /var/www/html/hello
lrwxrwxrwx. 1 root   root     10 Jul  8 13:56 link-tmp -> /tmp/hello

$ cat /var/www/html/link-local 
/VAR/WWW/HTML/HELLO

$ cat /var/www/html/link-tmp 
/TMP/HELLO

Apache 可以按照以下链接进入 Web 根目录:

$ curl http://localhost/link-local
/VAR/WWW/HTML/HELLO

但是 Apache 不会跟随符号链接到/tmp/

$ curl http://localhost/link-tmp
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /hellolink on this server.</p>
<hr>
<address>Apache/2.2.15 (CentOS) Server at localhost Port 80</address>
</body></html>

这是在 CentOS 6 上;http 以用户 apache、组 apache 的身份运行。

为什么会发生这种情况?我该如何解决?

答案1

是的,看起来 SELinux 就是罪魁祸首:

-Z 开关可与大多数实用程序一起使用来显示 SELinux 安全上下文(例如“ls -Z”、“ps axZ”等)。

$ ll -Z /var/www/html/hello
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/hello

$ ll -Z /tmp/hello
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 /tmp/hello

两个目标文件具有不同的类型(httpd_sys_content_tvs user_tmp_t),这解释了可访问性的差异。

centos.org 上的 SELinux 页面解释了-Z切换以及更多内容。

答案2

您是在 .htaccess 文件中设置 FollowSymlinks 吗?还是在<Directory>块中设置?

Apache 2.2 选项文档表明 FollowSymlinks 仅在这些情况下有效 - 您能发布相关配置吗?

(由于评论积分不足,因此以答案形式发布)

相关内容