Użyłem Webmina do utworzenia następującego wirtualnego hosta:
<VirtualHost *:80>
DocumentRoot "/var/www/whatever"
ServerName whatever.ourdomain
<Directory "/var/www/whatever">
allow from all
Options +Indexes
</Directory>
</VirtualHost>
A po ponownym uruchomieniu Apache dostaję
Starting httpd: Warning: DocumentRoot [/var/www/whatever] does not exist
Chodzi o to, że katalog absolutnie NIE istnieje. Wpatruję się w to. pwd
pokazuje mi, że to mój bieżący katalog itp. Nie jest tak trudno poprawnie to przeliterować. Nie mogę znaleźć żadnych innych błędów ani ostrzeżeń w dziennikach httpd. apache: apache jest właścicielem katalogu i wszystkich podkatalogów / plików. Nie ma tu żadnych dowiązań symbolicznych ani niczego związanego. Czego mi brakuje lub na co jeszcze powinienem spojrzeć, aby ustalić, dlaczego tak jest?
System operacyjny to CentOS 6.0
apache-2.2
centos
Jake Wilson
źródło
źródło
DocumentRoot
, co może dać ci wgląd w to, co widzi serwer WWW. Można też sprawdzić inne katalogi na ścieżce, choć jeśli to naprawdę pod/var/www/
te nie powinny być problememOdpowiedzi:
Pierwszą rzeczą, która przyszła mi do głowy, jest to, czy Apache ma uprawnienia dostępu do tego katalogu?
Ponadto: /programming/3948038/apache-says-my-documentroot-directory-doesnt-exist
źródło
apache:apache
, jednak podążałem za tym linkiem (z jakiegoś powodu na SO)? I rzeczywiście problem stanowił SELinux. SELinux powoduje więcej problemów, że robi dobre imo.setenforce 0
naprawiłem go, ale patrząc na uprawnienials-laZ
, dowiązanie symboliczne ma takie same uprawnienia, jak inne pliki, do których może uzyskać dostęp, oprócz chmod. Pliki to -rw-r - r--, a dowiązanie symboliczne to lrwxrwxrwx. Czy to może być powód, dla którego nie działa z setenforce 1?Oto samouczek dotyczący przypadku SELinux:
Sprawdź, czy SELinux jest aktywny:
Jeśli tak, pomocne może być sprawdzenie porównawcze. Na przykład serwer ma domyślny DocumentRoot w
/var/www/html
, ale chcemy go gdzie indziej/path/to/document/root
.Jeśli SELinux nie aktywnie bawi się z zasobem,
ls -dZ
w katalogu pojawi się coś takiego:Z drugiej strony, jeśli zastosowane zostaną konteksty SELinux,
ls -dZ
wygląda to bardziej jak:Jeśli porównamy do działającego DocumentRoot, będzie to wyglądać mniej więcej tak:
Argumenty
_r
i_t
odnoszą się do-r
(--role
i-t
(--type
))chcon
. Oto strona podręcznika:Na pierwszy rzut oka może wydawać się, że poniższe działania działają, ale mogą nie.
Jeśli serwer WWW nadal nie widzi DocumentRoot, zauważ, że kontekst ma znaczenie aż do rootowania:
W tym momencie serwer WWW może zobaczyć katalog.
Tak, nauczyłem się dziś trudnej drogi.
UWAGA: Zastosowanie chcon koncepcyjnie ma wadę w dokumentacji RedHat ( 5.6.1. Zmiany tymczasowe: chcon ), która stwierdza:
Użyj semanage i restorecon, aby wprowadzić bardziej trwałe zmiany. Krótki przykład:
W odniesieniu do restorecon , zauważ, że -F jest wymagany, aby wpływać na cały kontekst (tj. Użytkownika i typ). Ponadto -R oznacza rekurencyjne wprowadzanie zmian. Argumenty -v lub -p mogą pokazywać postępy w sposób pełny lub zwięzły. Użyj -FRnv, aby zobaczyć, co się stanie, bez wprowadzania żadnych zmian.
Po użyciu semanage w ten sposób można wyświetlić lokalne zmiany bezpieczeństwa za pomocą polecenia:
Dane wyjściowe eksportu semanage mogą zostać zapisane i wykorzystane przez import semanage, aby ułatwić zastosowanie zestawu zmian w różnych systemach.
UWAGA: Ta odpowiedź zapewnia najbardziej podstawowy kontekst typu dla witryny. Bezpieczeństwo może być znacznie bardziej szczegółowe. Na przykład zobacz listę typów, które można zastosować do stron serwera WWW za pomocą polecenia:
UWAGA: Narzędzia takie jak semanage i seinfo mogą nie być domyślnie instalowane. Przynajmniej w niektórych dystrybucjach wymagane pakiety mogą mieć takie nazwy:
źródło
Brzmi jak SELinux. Sugerowałbym, żebyś z nim pracował. Zajrzyj do katalogu / var / log / audit, aby potwierdzić.
Co gorsza, zawsze możesz wyłączyć selinux, jak wspomniano wcześniej, ale sugeruję, abyś zamiast niego pracował. Na przykład, jeśli utworzę katalog do użytku z Apache, nie będzie on miał odpowiedniego kontekstu, jak zaznaczono tutaj.
Jeśli tak się stanie, po prostu zastosuję kontekst z innego katalogu, którym w tym przypadku jest html:
źródło
Użyj tego polecenia w katalogu głównym, aby zmienić kontekst zabezpieczeń „httpd_sys_content_t”, który pozwala na uruchomienie Apache.
Służy
ls -dZ /var/www/whatever
do wyświetlania szczegółowych ról zabezpieczeńźródło