権限は問題ないように見え、FollowSymLinks がオンになっているにもかかわらず、Apache で Web ルート ディレクトリ外のシンボリック リンクをたどることができません。詳細は以下の通りです。
全世界で読み取り可能なテキスト ファイルが 2 つあります:/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
2 つのターゲット ファイルのタイプが異なる (httpd_sys_content_t
とuser_tmp_t
) ため、アクセシビリティに違いが生じます。
のcentos.org の SELinux ページ-Z
スイッチやその他多くのことについて説明します。
答え2
FollowSymlinks を .htaccess ファイル内または<Directory>
ブロック内に設定しますか?
Apache 2.2 オプションドキュメントFollowSymlinks はこれらのコンテキストでのみ機能することを示唆しています - 関連する構成を投稿していただけますか?
(コメントポイントが足りないため回答として投稿します)