Apache folgt symbolischen Links nicht, selbst wenn die Berechtigungen festgelegt sind

Apache folgt symbolischen Links nicht, selbst wenn die Berechtigungen festgelegt sind

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/hellound /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_tvs user_tmp_t), was den Unterschied in der Zugänglichkeit erklärt.

DerSELinux-Seite unter centos.orgerklärt den -ZWechsel 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)

verwandte Informationen