Mam problem ze skonfigurowaniem Apache na Ubuntu. Postępowałem zgodnie z tym przewodnikiem .
# /usr/sbin/apache2 -v
Server version: Apache/2.2.17 (Ubuntu)
Server built: Feb 22 2011 18:33:02
Mój katalog publiczny / var / www może z powodzeniem obsługiwać i uruchamiać umieszczone w nim strony PHP. Jednak chcę utworzyć łącze symboliczne w / var / www, które wskazuje na katalog w moim folderze domowym i udostępnia tam strony.
[root /var/www]# ll
total 36
drwxr-xr-x 3 root root 4096 2011-09-11 14:22 .
drwxr-xr-x 14 root root 4096 2011-06-04 22:49 ..
lrwxrwxrwx 1 root root 16 2011-09-11 13:21 about -> /root/site/about
Kiedy próbuję uzyskać dostęp / informacje w przeglądarce, otrzymuję
Forbidden
You don't have permission to access /about on this server.
O ile wiem, dałem wystarczające uprawnienia do plików, które chcę obsługiwać:
[root ~/site/about]# ll
total 24
drwxr-xr-x 5 root root 4096 2011-09-11 13:20 .
drwxr--r-- 3 root root 4096 2011-09-11 13:19 ..
drwxr-xr-x 2 root root 4096 2011-09-11 13:21 contact
-rwxr-xr-x 1 root root 1090 2011-09-11 13:19 index.php
drwxr-xr-x 2 root root 4096 2011-09-11 13:20 me
drwxr-xr-x 2 root root 4096 2011-09-11 13:21 resume
Znam opcję FollowSymLinks i wydaje mi się, że jest ona ustawiona w moim pliku / etc / apache2 / sites-enabled / 000-default:
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options FollowSymLinks Indexes MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
Masz jakiś pomysł, czego mógłbym przegapić?
chmod -R +a "_www allow list,search,readattr" /root /root/site /root/site/about
które przyznaje te uprawnienia tylko aplikacji Apache (_www), która jest nieco bezpieczniejsza niż „inne”.Błąd 403 może być również spowodowany przez zaszyfrowany system plików, np. Łącze symboliczne do zaszyfrowanego folderu domowego .
Jeśli twoje łącze symboliczne wskazuje na zaszyfrowany folder, użytkownik apache (np. Www-data) nie może uzyskać dostępu do zawartości, nawet jeśli uprawnienia do apache i plików / folderów są ustawione poprawnie. Dostęp użytkownika danych www można przetestować za pomocą takiego połączenia:
Istnieją obejścia / rozwiązania tego problemu, np. Dodanie użytkownika danych www do Twojej grupy prywatnej (ujawnia zaszyfrowane dane użytkownikowi sieciowemu) lub skonfigurowanie niezaszyfrowanego folderu rsynced (prawdopodobnie raczej bezpieczny). Ja sam prawdopodobnie zdecyduję się na rozwiązanie rsync podczas programowania.
/ubuntu/633625/public-folder-in-an-encrypted-home-directory
Wygodnym narzędziem do moich celów jest lsyncd . To pozwala mi pracować bezpośrednio w moim zaszyfrowanym folderze domowym i być w stanie niemal natychmiast zobaczyć zmiany na stronie internetowej Apache. Synchronizacja jest wyzwalana przez zmiany w systemie plików, wywołujące rsync. Ponieważ pracuję tylko na raczej małych stronach internetowych i skryptach, synchronizacja jest bardzo szybka. Postanowiłem użyć krótkiego 1-sekundowego opóźnienia przed uruchomieniem rsync, mimo że można ustawić opóźnienie na 0 sekund .
Instalowanie lsyncd (w Ubuntu):
Uruchomienie usługi w tle:
źródło
sudo -u www-data ...
świetny sposób na sprawdzenie, czy występuje problem z uprawnieniami! Zwróć uwagę, że użytkownik może być danymi www, apache lub czymś innym w zależności od twojej dystrybucji.Miałem podobny problem, którego nie mogłem rozwiązać przez długi czas na moim nowym serwerze. Oprócz odpowiedzi palacsinta, dobrym pytaniem jest: czy używasz Apache 2.4? W Apache 2.4 jest inny mechanizm ustawiania uprawnień, które nie działają przy użyciu powyższej konfiguracji, więc skorzystałem z rozwiązania wyjaśnionego w tym wpisie na blogu .
Zasadniczo musiałem przekonwertować plik konfiguracyjny z:
do:
Zwróć uwagę, w jaki sposób kolejność i zezwalanie na wiersze zostały zastąpione wymaganiem wszystkich przyznanych
źródło
access_compat
module. Jeśli ten moduł jest włączony, pierwsza część prawdopodobnie będzie działać zgodnie z oczekiwaniami. Jeśli go tam nie ma, próba uruchomienia Apache2 powinna zakończyć się błędem./etc/httpd/conf/httpd.conf
nie istnieje w moim systemie, a także katalog/etc/httpd/
nie istnieje./etc/apache2/apache2.conf
istnieje dla mnie.W związku z tym pytaniem właśnie zorientowałem się, dlaczego mój vhost dał mi ten 403.
Przetestowałem WSZYSTKIE możliwości dotyczące tego i innych pytań bez powodzenia. Prawie doprowadza mnie to do szaleństwa.
Konfiguruję serwer z wdrożeniem wydań podobnym do Capistrano za pośrednictwem dowiązań symbolicznych, a kiedy próbowałem uzyskać dostęp do folderu DocRoot (który jest teraz dowiązaniem symbolicznym do folderu aktualnej wersji), dostałem 403.
Mój vhost to:
a mój główny plik httpd.conf to (domyślna instalacja Apache 2.4):
Okazuje się, że główna definicja opcji miała pierwszeństwo przed moim polem vhostów (dla mnie jest to sprzeczne z intuicją). Więc zmieniłem to na:
i Eureka! (zwróć uwagę na znak plus przed FollowSymLinks w GŁÓWNYM pliku httpd.conf. Mam nadzieję, że pomoże to innej zagubionej duszy.
źródło
Jak odkryłem w mojej sytuacji, istnieje inny sposób, w jaki symboliczne powiązania mogą cię zawieść. Jeśli masz system SELinux jako serwer, a dowiązania symboliczne wskazują na folder zamontowany w systemie NFS (inne systemy plików mogą dawać podobne objawy),
httpd
możesz zobaczyć niewłaściwe konteksty i odmówić obsługi zawartości folderów docelowych.W moim przypadku kontekst SELinux
/var/www/html
(który można uzyskaćls -Z
) tounconfined_u:object_r:httpd_sys_content_t:s0
. Dowiązania symboliczne w programie/var/www/html
będą miały ten sam kontekst, ale kontekst ich celu, czyli folder zamontowany w systemie plików NFS, taksystem_u:object_r:nfs_t:s0
.Rozwiązaniem jest dodanie
fscontext=unconfined_u:object_r:httpd_sys_content_t:s0
domount
opcji (np# mount -t nfs -o v3,fscontext=unconfined_u:object_r:httpd_sys_content_t:s0 <IP address>:/<server path> /<mount point>
.).rootcontext
jest nieistotna idefcontext
jest odrzucana przez NFS. Sam nie próbowałemcontext
.źródło
Najpierw wyłącz selinux (vim / etc / selinux / config)
vim /etc/httpd/conf/httpd.conf edytuj następujące wiersze dla dowiązań symbolicznych i indeksowania katalogów:
Jeśli plik .htaccess, to AllowOverride all
źródło
/etc/httpd/
folderu w swoim systemie?Dla każdego, kto ma problemy po aktualizacji do 14.04 /ubuntu/452042/why-is-my-apache-not-working-after-upgrading-to-ubuntu-14-04, ponieważ root zmienił się przed aktualizacją = / var / www po aktualizacji = / var / www / html
źródło
Oprócz zmiany uprawnień, jak wskazywały inne odpowiedzi, musiałem ponownie uruchomić apache, aby odniosło skutek:
źródło
Kolejna subtelna pułapka, jeśli potrzebujesz
AllowOverride All
:Gdzieś głęboko pod drzewem FS, stara
.htaccess
istotaOptions Indexes
zamiast
Options +Indexes
wystarczyło, aby nonszalancko wyłączyć
FollowSymLinks
zestaw w konfiguracji serwera i spowodować tajemniczy błąd 403.źródło
Z włączoną opcją FollowSymLinks:
potrzebujesz, aby wszystkie katalogi w dowiązaniu symbolicznym były wykonywalne przez użytkownika, którego używa httpd.
więc dla tego ogólnego przypadku użycia:
Możesz sprawdzić uprawnienia właściciela za pomocą namei :
W moim przypadku
to
katalog był wykonywalny tylko dla mojego użytkownika:Włącz wykonywanie przez innych, rozwiąż to:
Zobacz, że katalog niewykonywalny może być inny lub musisz wpłynąć na grupy zamiast innych, to zależy od twojego przypadku.
źródło