"Symbolische Verknüpfung nicht zulässig oder Verknüpfungsziel nicht zugänglich" / Apache unter CentOS 6

30

Ich habe eine brandneue CentOS 6-Installation, die einen Symlink im Dokumentenstamm zu meinen Entwicklungsdateien enthält:

[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/

Meine httpd.conf hat folgendes:

<Directory "/">
    Options All
    AllowOverride None
    Order allow,deny
    Allow from all
</directory>

Das Ziel des symbolischen Links hat Berechtigungen, die es Apache ermöglichen sollen, alles zu lesen, was es will:

 [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

Ich habe auch versucht, SELinux zu deaktivieren, indem ich Folgendes geändert habe /etc/selinux/conf:

SELINUX=disabled

Egal was ich tue, wenn jemand versucht, auf diesen Link http://localhost/refresh-app/zuzugreifen, erhalte ich eine 403 FORBIDDEN-Fehlerseite. Diese steht in /var/log/httpd/error_log:

Symbolic link not allowed or link target not accessible

Warum kann Apache nicht auf das Ziel des Symlinks zugreifen?

Billy ONeal
quelle
Unter welchem ​​Benutzer läuft Apache? Können Sie diese Ressource tatsächlich als dieser Benutzer lesen?
Draeath
Außerdem ist es besser, Selinux im zulässigen Modus auszuführen und anschließend sealert zum Analysieren des Überwachungsprotokolls zu verwenden. Auf diese Weise können Sie erkennen, warum / wie SELinux dies ablehnt, und häufig erhalten Sie sogar eine Lösung.
Draeath
@draeath: Ich habe keine Ahnung, wie ich das überprüfen soll.
Billy ONeal
@draeath: 1. Dies ist keine Produktionsbox. Es ist mir egal, ob SELinux ausgeschaltet ist. 2. In jedem Fall bin ich nur bei der Fehlerbehebung beschäftigt - wahrscheinlich stelle ich sie wieder her, sobald ich die Grundursache herausgefunden habe.
Billy ONeal
Keine Sorge, dies ist ein häufiges Versehen. Als ich es das erste Mal tat, saß ich tagelang fest. Serverfault.com/questions/313485/… :: Es ist einer dieser Fehler. : D
whoami

Antworten:

44

Habe das Problem gefunden. Es stellte sich heraus, will Apache Zugriff auf nicht nur das Verzeichnis Ich diene, /home/billy/refresh-app/sondern auch jedes Verzeichnis darüber, nämlich /home/billy/, /homeund /. (Ich habe keine Ahnung, warum ... das Gewähren eines Zugriffs auf ein Unterverzeichnis nicht das Vergeben von Berechtigungen für alles oberhalb dieses Unterverzeichnisses erfordern sollte ....)

Ich würde vermuten, es ist auf der Suche nach .htaccessoder so, oder vielleicht ist * nix seltsam, wie es Berechtigungen für die Verzeichnisübertragung behandelt.

Billy ONeal
quelle
15
Es ist nicht seltsam. So funktioniert das. Sie müssen + x für den gesamten Pfad haben, auf den Sie zugreifen möchten.
Bahamat
4
@ Bahamat: Das ergibt keinen Sinn. Warum sollte jemand Ausführungsrechte für Dateien benötigen, die nicht ausgeführt werden? (Dabei wird völlig abgezinst, dass man Rechte an /... so gut wie nie hergeben sollte. ) Systeme mit ACLs verfügen normalerweise über eine separate verzeichnisübergreifende Option. Nach 30 Jahren seit der Entwicklung von Unix und der breiten Verfügbarkeit von ACL-Systemen würde man meinen, dass ACLs der Standard wären. :
seufz
11
Ich glaube, er meinte + x in Verzeichnissen. Versuchen Sie, in den Benutzer zu wechseln und in das Verzeichnis ohne + x zu wechseln. Aus dem Speicher können Sie mit + x auf das Verzeichnis zugreifen, es jedoch nicht sehen, während Sie mit + r Dateien
1
@ BillyONeal: Der Ausdruck "gesamter Pfad" impliziert Verzeichnisse.
Bahamat
5
Dies ist korrektes Verhalten in Unix. Sie benötigen Ausführungsberechtigungen (+ x für g oder o) für übergeordnete Verzeichnisse, die Sie in untergeordnete Verzeichnisse ändern möchten.
slm
11

Ich hatte ein ähnliches Problem, bei dem ich die folgende Konfiguration hatte, die mit Ubuntu 10 funktionierte, aber mit Ubuntu 14 (Apache 2.4) nicht mehr funktionierte:

<Directory /var/www/vhosts/example.com/httpdocs>
    Options +FollowSymLinks
</Directory>

Das Wechseln zu dieser Option hat das Problem behoben (obwohl der Webserver-Benutzer nicht direkt auf den Symlink zugreifen konnte).

<Directory /var/www/vhosts/example.com/httpdocs>
    Options +ExecCGI +FollowSymlinks -SymLinksIfOwnerMatch
</Directory>

Soweit ich -SymLinksIfOwnerMatchweiß, ist es nur die Einstellung und hat etwas mit Änderungen in Apache 2.4 zu tun, aber ich habe nicht versucht, die genaue Ursache zu erforschen.

Ich dachte auch, dass es an openbase_dirEinschränkungen in PHP liegen könnte, aber das war es nicht.

icc97
quelle
6

Dieser Fehler kann auch verursacht werden, wenn Sie eine Verknüpfung zu einem verschlüsselten Ordner herstellen.

cherrysoft
quelle
4

Es scheint, dass "FollowSymLinks" die Option ist, die Sie in httpd.conf benötigen. Es wird hier detailliert beschrieben . Sieht so aus, als ob Sie in htdocs möglicherweise auch eine Regel benötigen ... aber das ist die Option, die Sie benötigen.

RobotHumans
quelle
3
Siehe Options All- FollowSymLinksist bereits angegeben.
Billy ONeal
2

Sie können auch prüfen, ob Selinux erzwungen wird oder nicht. Führen Sie unter RedHat / Fedora Folgendes aus:

getenforce

Wenn die Antwort "Durchsetzen" ist, möchten Sie möglicherweise ausführen

setenforce 0

und versuchen Sie die URL erneut in Ihrem Browser.

Beachten Sie, dass ich nicht sage, dass das Deaktivieren von Selinux der beste Weg ist, um dieses Problem zu lösen, aber es kann helfen, die Ursache zu identifizieren.

botkop
quelle
dies hat das sym link problem behoben aber gibt es irgendwelche negativen auswirkungen?
digz6666
2
Options +FollowSymLinks

Erstellen Sie eine .htaccess-Datei mit diesem Trick für mich (legen Sie es in ein Verzeichnis vor dem Symlink).

Codebeat
quelle
In meinem Fall stellte ich /var/wwweine symbolische Verbindung zu einer anderen symbolischen Zwischenverbindung her. Wenn Sie symbolische Links verwenden müssen, erstellen Sie einen symbolischen Link DIREKT zu Ihrem Ziel.
Sridhar Sarnobat
0

das, was mein Problem löst, nachdem alle Berechtigungen und followymlink erlaubt wurden "Im Fall von FollowSymLinks MUSS es sich innerhalb einer Directory-Struktur befinden, wenn es sich in einer .conf-Datei befindet

Die Optionen FollowSymLinks und SymLinksIfOwnerMatch funktionieren nur in Abschnitten oder .htaccess-Dateien.

antworte von hier

yoni333
quelle
0

Meine Lösung bestand darin, einen freigegebenen Ordner für alle benannten Repositorys zu erstellen /home/repo.

Dann symlink von zu Hause aus wie: ln -s /home/repo ~/Code so ~/Code/www.xxxx.com/public zeigt auf /home/repo/www.xxxx.com/public

und auch ein link ins apache web root /var/www/html verweist auf /home/repo/www.xxxx.com/public

Hier gefunden: https://github.com/alghanmi/ubuntu-desktop_setup/wiki/Git-Local-Repository-Setup-Guide

Bei einigen Symlink + -Benutzergruppen können mehrere Benutzer / Versionen bereitgestellt werden.

alo Malbarez
quelle
0

@Billey ONeil @Flion Ich könnte nicht Antwort in Zeile (niedrige Wiederholungszahl)
Hier war ich zu tun hatte:
( Anmerkung: alias ll = 'ls $ LS_OPTIONS -lh')

root@Bellach:/var/www/html# ll lego
lrwxrwxrwx 1 root root 43 Sep 10 21:21 lego -> /home/DATA/Documents/Chris/Synced/web/lego/

Schauen Sie sich nun jedes Verzeichnis im Quelllink an

root@Bellach:/var/www/html# ll -d /home/DATA/Documents/Chris/Synced/web/
drwxr-xr-x 9 chris chris 4.0K Sep 12  2017 /home/DATA/Documents/Chris/Synced/web/
root@Bellach:/var/www/html# ll -d /home/DATA/Documents/Chris/Synced/
drwxr-xr-x 20 chris chris 4.0K Mar 27 18:52 /home/DATA/Documents/Chris/Synced/
root@Bellach:/var/www/html# ll -d /home/DATA/Documents/Chris/
drwxr-xr-x 36 chris chris 4.0K Jun 17 23:31 /home/DATA/Documents/Chris/
root@Bellach:/var/www/html# ll -d /home/DATA/Documents/
drwxr-xr-x 21 chris chris 4.0K Aug  7 18:22 /home/DATA/Documents/
root@Bellach:/var/www/html# ll -d /home/DATA/
drwxrwxr-- 10 root users 4.0K Sep 10 11:17 /home/DATA/
root@Bellach:/var/www/html# ll -d /home/
drwxr-xr-x 5 root root 4.0K Sep 10 10:37 /home/

Das Verzeichnis / home / DATA ist der Schuldige.
Beheben Sie es mit diesem:

root@Bellach:/var/www/html# chmod +x /home/DATA/
root@Bellach:/var/www/html# ll -d /home/DATA/
drwxrwxr-x 10 root users 4.0K Sep 10 11:17 /home/DATA/

Das Update ist sofort verfügbar - Sie müssen Apache nicht neu starten.

ausinch
quelle
-1

Sie können auch Ihre SELinux-Einstellungen anpassen, und setenforce ist möglicherweise nicht auf Ihrem Weg. Also versuche folgendes:

sudo /usr/sbin/setenforce 0

und um dies zwischen Neustarts beizubehalten

sudo vi /etc/sysconfig/selinux
Rami Jaamour
quelle