Mam zupełnie nową instalację CentOS 6, która ma dowiązanie symboliczne w katalogu głównym dokumentu do moich plików programistycznych:
[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/
Mój httpd.conf ma to:
<Directory "/">
Options All
AllowOverride None
Order allow,deny
Allow from all
</directory>
Cel dowiązania symbolicznego ma uprawnienia, które powinny pozwolić apache na odczytanie wszystkiego, co chce:
[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
Próbowałem także wyłączyć SELinux, zmieniając /etc/selinux/conf
:
SELINUX=disabled
Jednak bez względu na to, co robię, gdy ktoś próbuje przejść do tego linku, http://localhost/refresh-app/
pojawia się strona błędu 403 ZABRONIONA i jest to napisane w /var/log/httpd/error_log
:
Symbolic link not allowed or link target not accessible
Dlaczego Apache nie może uzyskać dostępu do celu dowiązania symbolicznego?
centos
permissions
apache-httpd
Billy ONeal
źródło
źródło
Odpowiedzi:
Znaleziono problem. Okazuje się, Apache chce uzyskać dostęp do katalogu nie tylko ja podaniem
/home/billy/refresh-app/
, ale także każdy katalog ponad to, mianowicie/home/billy/
,/home
oraz/
. (Nie mam pojęcia, dlaczego ... udzielenie komuś dostępu do podkatalogu nie powinno wymagać przyznania uprawnień do wszystkiego powyżej tego podkatalogu ....)Domyślam się, że tego szuka
.htaccess
, a może * nix jest dziwny w tym, jak traktuje uprawnienia do przenoszenia katalogów.źródło
/
... prawie zawsze) Systemy z listami ACL mają zwykle osobną opcję przenoszenia katalogów. Po 30 latach od zaprojektowania Uniksa i szerokiej dostępności systemów ACL można pomyśleć, że listy ACL będą standardem. : westchnienie:Miałem podobny problem, gdy miałem następującą konfigurację, która działała z Ubuntu 10, ale przestałem działać z Ubuntu 14 (Apache 2.4):
Przejście do tego rozwiązało problem (nawet jeśli użytkownik serwera WWW nie był w stanie uzyskać bezpośredniego dostępu do dowiązania symbolicznego)
Z tego, co mogę powiedzieć, to tylko
-SymLinksIfOwnerMatch
ustawienie i ma to coś wspólnego ze zmianami w Apache 2.4, ale nie próbowałem badać dokładnej przyczyny.Pomyślałem również, że może to wynikać z
openbase_dir
ograniczeń w PHP, ale tak nie było.źródło
Ten błąd może być również spowodowany, jeśli łączysz się z zaszyfrowanym folderem.
źródło
Wygląda na to, że „FollowSymLinks” jest opcją potrzebną w httpd.conf. Jest to wyszczególnione tutaj . Wygląda na to, że możesz potrzebować reguły w htdocs ... ale jest to opcja, której potrzebujesz.
źródło
Options All
-FollowSymLinks
jest już określony.Możesz także sprawdzić, czy selinux jest wymuszony czy nie. Na RedHat / Fedora wykonaj to:
Jeśli odpowiedź brzmi „Egzekwowanie”, możesz chcieć wykonać
i spróbuj ponownie URL w przeglądarce.
Zauważ, że nie mówię, że wyłączenie selinux jest najlepszym sposobem na rozwiązanie tego problemu, ale może pomóc zidentyfikować przyczynę.
źródło
Utwórz plik .htaccess z tym zrobił dla mnie lewę (umieść go w katalogu przed dowiązaniem symbolicznym).
źródło
/var/www
tworzyłem dowiązanie symboliczne do innego pośredniego dowiązania symbolicznego. Jeśli musisz użyć dowiązań symbolicznych, uczyń z niego dowiązanie symboliczne BEZPOŚREDNIO do miejsca docelowego.to, co rozwiązuje mój problem po zezwoleniu na wszystkie uprawnienia i zezwolenie na followymlink „W szczególności w przypadku FollowSymLinks MUSI znajdować się w strukturze katalogów w pliku .conf. Z aktualnego podręcznika Apache
odpowiedz stąd
źródło
Moim rozwiązaniem było utworzenie folderu współdzielonego dla wszystkich nazwanych repozytoriów
/home/repo
.Następnie dowiązanie symboliczne z mojego własnego domu, takie jak:
ln -s /home/repo ~/Code
so~/Code/www.xxxx.com/public
wskazuje na/home/repo/www.xxxx.com/public
a także link do katalogu głównego apache
/var/www/html
wskazuje na/home/repo/www.xxxx.com/public
Znaleziono tutaj: https://github.com/alghanmi/ubuntu-desktop_setup/wiki/Git-Local-Repository-Setup-Guide
Dzięki akrobacji grup symlink + grup użytkowników możesz wdrożyć wielu użytkowników / wersje.
źródło
@Billey ONeil @Flion Nie mogłem odpowiedzieć w linii (mała liczba powtórzeń)
Oto co musiałem zrobić:
( uwaga: alias ll = 'ls $ LS_OPTIONS -lh')
Teraz spójrz na każdy katalog w linku źródłowym
Winowajcą jest katalog / home / DATA .
Napraw to za pomocą:
Poprawka jest natychmiastowa - nie trzeba ponownie uruchamiać apache.
źródło
Możesz także dostosować ustawienia SELinux, a setenforce może nie być na twojej drodze. Spróbuj tego:
i aby utrzymywało się to między restartami
źródło