Ich kann Apache nicht dazu bringen, Symlinks außerhalb des Web-Stammverzeichnisses zu folgen, obwohl die Berechtigungen in Ordnung zu sein scheinen und FollowSymLinks aktiviert ist. Die Einzelheiten finden Sie weiter unten.
Ich habe zwei allgemein lesbare Textdateien: /tmp/hello
und /var/www/html/hello
. Außerdem habe ich im Webroot symbolische Links zu diesen beiden Dateien. Beide scheinen in Ordnung zu sein.
$ 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 kann dem Link zum Webstamm folgen:
$ curl http://localhost/link-local
/VAR/WWW/HTML/HELLO
Aber Apache folgt dem symbolischen Link nicht zu /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>
Dies ist auf CentOS 6; http läuft als Benutzer Apache, Gruppe Apache.
Warum passiert das? Wie kann ich das Problem beheben?
Antwort1
Ja, es sieht so aus, als ob SELinux der Übeltäter ist:
Der Schalter -Z funktioniert mit den meisten Dienstprogrammen, um SELinux-Sicherheitskontexte anzuzeigen (z. B. „ls -Z“, „ps axZ“ usw.).
$ 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
Die beiden Zieldateien haben unterschiedliche Typen ( httpd_sys_content_t
vs user_tmp_t
), was den Unterschied in der Zugänglichkeit erklärt.
DerSELinux-Seite unter centos.orgerklärt den -Z
Wechsel und vieles, vieles mehr.
Antwort2
Legen Sie FollowSymlinks in einer .htaccess-Datei fest? Oder in einem <Directory>
Block?
Dokumentation zu Apache 2.2-Optionenschlägt vor, dass FollowSymlinks nur in diesen Kontexten funktionieren – könnten Sie die entsprechende Konfiguration posten?
(Posten als Antwort, da nicht genügend Punkte für einen Kommentar vorhanden sind)