poniedziałek, 14 stycznia 2008

Lepszy Apache - wprowadzamy małe zmiany w httpd.conf - #1 UserDir

W tytule specjalnie umieściłem słowo małe, bowiem zmiany będą naprawdę kosmetyczne. Pomimo, że zaraz po instalacji Apache jest gotów do pracy, to jednak przydaje się kilka drobnych udogodnień, które sprawią że wszystko będzie śmigało tak jak my chcemy :)

Pierwszym takim udogodnieniem jest z pewnością userdir_module. Co nam daje? Ano sprawia, że każdy użytkownik systemu (mówię tu o Fedorce i innych dystrybucjach) otrzymuje możliwość przechowywania swojej strony we własnym katalogu domowym - np pod adresem http://localhost/~sdr/ widoczne są pliki utrzymywane w /home/sdr/public_html. Jest to bardzo wygodne rozwiązanie, bowiem jeśli administujemy typowym serwerem WWW to pewnie umożliwiamy też zdalny dostęp do konta poprzez protokół FTP. Wówczas bardzo łatwo ograniczyć dostęp użytkownika do katalogów innych niż jego własny home, poprzez zamknięcie go w jailu. Ale to temat na inną okazję :)

Jak konfigurujemy moduł userdir? Najpierw jako root otwieramy do edycji plik konfiguracyjny Apache'a. Robimy to poleceniem:

vim /etc/httpd/conf/httpd.conf

Około linii 185 powinien znajdować się wiersz:

LoadModule userdir_module modules/mod_userdir.so

Upewniamy się, że nie jest on przypadkiem zahaszowany (zakomentowany, tzn. czy na początku linii nie znajduje się znak #). Nie powinien.

Tip: Jeśli jest, naciskamy klawisz i, a następnie ustawiamy się kursorem (strzałki - jakby ktoś nie wiedział :>) za # i usuwamy go klawiszem Backspace (zapamiętać podstawy vima na przyszłość, bo nie będę powtarzał ;D).

W wierszu 337 odnajdujemy zakomentowaną notatkę odnośnie użytkowania modułu. Znajdują się tam wskazówki na temat praw dostępu dla poszczególnych katalogów. Tym zajmiemy się za moment. Kilka wierszy niżej można zauważyć pierwszy wpis konfiguracyjny dla modułu.

UserDir disable

Domyślnie powinien być zakomentowany. Jest tak ze względów bezpieczeństwa, gdyż włączony userdir mod umożliwia odgadnięcie istniejących nazw użytkownika systemu. Nie ma jednak wyjścia, albo wóz albo przewóz ;p Haszujemy linię.

#UserDir disable

Jeszcze niżej, tuż nad </IfModule> znajduje się druga dyrektywa. Ta jest domyślnie zakomentowana.

#UserDir public_html

Mówi ona serwerowi, gdzie ma szukać strony jeśli w przeglądarce wpisany zostanie adres z nazwą użytkownika systemu (np wspomniany http://localhost/~sdr/). Wartość public_html wskazuje na podkatalog public_html w katalogu użytkownika. Tutaj usuwamy znak # z początku linii. Z trybu edycji wychodzimy poprzez naciśnięcie klawisza Esc i wpisanie :wq oraz zatwierdzenie Enterem.

Teraz musimy utworzyć w katalogu domowym użytkownika (np /home/sdr) podkatalog public_html, który wykorzystamy do przechowywania naszej strony. Można od razu umieścić wewnątrz dokument index.html ze standardową zawartością i napisem Hello world ;)

Następnie ustawiamy stosowne prawa dostępu do katalogu, tak aby Apache nie miał problemów z pobraniem i wyświetleniem naszej witryny. Zgodnie z zaleceniami wspomnianej notatki:

# The path to the end user account 'public_html' directory must be
# accessible to the webserver userid. This usually means that ~userid
# must have permissions of 711, ~userid/public_html must have permissions
# of 755, and documents contained therein must be world-readable.
# Otherwise, the client will only receive a "403 Forbidden" message.

Tą sprawę najlepiej załatwić z konsoli. Wydajemy kolejno dwa polecenia:

chmod 711 /home/sdr
chmod 755 /home/sdr/public_html
ls -l /home/sdr/public_html

Ostatnie z powyższych poleceń wylistuje nam katalog, w którym znajduje sie index.html i inne pliki przeznaczone do udostępnienia w ramach strony. Dzięki temu możemy upewnić się czy na pewno wszystkie są zdatne do odczytu (standardowe prawa 664, lub -rw-rw-r-- w notacji literowej).

Jeżeli wszystko wygląda OK, możemy przystąpić do testu. Restartujemy Apache, uruchamiamy przeglądarkę i wchodzimy na stronę http://localhost/~sdr/, gdzie sdr to oczywiście nazwa użytkownika, w którego katalogu domowym umieściliśmy index.html. Napis Hello world widniejący w oknie przeglądarki potwierdzi pomyślne zakończenie operacji :)

Z małego how-to wyszedł trochę dłuższy tutorial, więc postanowiłem rozbić go na dwie części. Tego posta kończę na omówionym userdir, a w kolejnym odcinku pokażę jak na apaczu uruchomić vhosty i podpiąć pod swojego home'a wirtualne domeny.

Zauważyłeś błąd w artykule? Coś nie działa? Zostaw swoje uwagi w komentarzach.

5 komentarzy:

Anonimowy pisze...

:O :* Tego mi brakowało! :D

Dawid Pająk pisze...

Miło :) Drugi art i już się przydał ;p
Mam nadzieję, że styl jakim piszę będzie odpowiadał przynajmniej większości osób, które przeczytają cokolwiek na tym blogu :> Wczoraj uświadomiłem sobie o jak wielu rzeczach mogę jeszcze napisać, zapowiada się więc całkiem ciekawa podróż xD

Anonimowy pisze...

A może by tak opublikować ten tekst na wiki.fedora.pl?

Grzegorz pisze...

Szukałem rozwiązania tego problemu. Artykuł bardzo przydatny :)

Jony pisze...

Myślę, że warto dodać polecenie zmieniające kontekst SELinuksa:
# setsebool -P httpd_enable_homedirs true

http://diegobz.net/2010/03/07/enabling-apache-userdir-public_html-with-selinux-enabled-on-fedora/