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?
centos
permissions
apache-httpd
Billy ONeal
quelle
quelle
Antworten:
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/
,/home
und/
. (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
.htaccess
oder so, oder vielleicht ist * nix seltsam, wie es Berechtigungen für die Verzeichnisübertragung behandelt.quelle
/
... 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. :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:
Das Wechseln zu dieser Option hat das Problem behoben (obwohl der Webserver-Benutzer nicht direkt auf den Symlink zugreifen konnte).
Soweit ich
-SymLinksIfOwnerMatch
weiß, 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_dir
Einschränkungen in PHP liegen könnte, aber das war es nicht.quelle
Dieser Fehler kann auch verursacht werden, wenn Sie eine Verknüpfung zu einem verschlüsselten Ordner herstellen.
quelle
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.
quelle
Options All
-FollowSymLinks
ist bereits angegeben.Sie können auch prüfen, ob Selinux erzwungen wird oder nicht. Führen Sie unter RedHat / Fedora Folgendes aus:
Wenn die Antwort "Durchsetzen" ist, möchten Sie möglicherweise ausführen
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.
quelle
Erstellen Sie eine .htaccess-Datei mit diesem Trick für mich (legen Sie es in ein Verzeichnis vor dem Symlink).
quelle
/var/www
eine symbolische Verbindung zu einer anderen symbolischen Zwischenverbindung her. Wenn Sie symbolische Links verwenden müssen, erstellen Sie einen symbolischen Link DIREKT zu Ihrem Ziel.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
antworte von hier
quelle
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.
quelle
@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')
Schauen Sie sich nun jedes Verzeichnis im Quelllink an
Das Verzeichnis / home / DATA ist der Schuldige.
Beheben Sie es mit diesem:
Das Update ist sofort verfügbar - Sie müssen Apache nicht neu starten.
quelle
Sie können auch Ihre SELinux-Einstellungen anpassen, und setenforce ist möglicherweise nicht auf Ihrem Weg. Also versuche folgendes:
und um dies zwischen Neustarts beizubehalten
quelle