Serwer HTTP Apache
Konfiguracja
Konfiguracja serwera Apache znajduje się w katalogu /etc/apache lub /etc/httpd. Tradycyjnie używa się trzech plików konfiguracyjnych: ogólnego httpd.conf, zawierającego informacje o uprawnieniach dostępu do serwowanych plików access.conf oraz zawierający zaawansowaną konfigurację srm.conf. W niektórych dystrybucjach występuje tylko jeden plik, zazwyczaj httpd.conf.
Format plików konfiguracyjnych Apache można określić jako wierszowy z blokami. Wiersz konfiguracji składa się z nazwy opcji konfiguracyjnej oraz szeregu argumentów. Wiersze mogą występować swobodnie bądź w blokach dotyczących specyficznej części konfiguracji serwera. Składnia bloku jest zbliżona do składni używanej przez HTML czy XML - początek bloku oznaczany jest za pomocą <nazwa_bloku argumenty>, natomiast koniec - za pomocą </nazwa_bloku>.
Najważniejsze opcje konfiguracyjne
ServerType typ - ustawia, czy Apache jest uruchamiany z inetd (inetd), czy też pracuje jako samodzielny serwer (standalone). Druga opcja jest bardziej wydajna, dlatego jest dużo częściej wykorzystywana.
Port numer - port TCP/IP, na którym samodzielny Apache będzie nasłuchiwał połączenia. Domyślnie 80.
User nazwa, Group nazwa - użytkownik i grupa, spod których będzie pracował serwer Apache.
LoadModule nazwa plik - jedna z najważniejszych opcji konfiguracyjnych serwera Apache. Za jej pomocą ładuje się moduły rozszerzające, które mogą obsługiwać generowanie zawartości (np. ze skryptów PHP czy programów CGI), odnajdywanie plików związanych z URLem (alias, rewrite), autentyfikację (access, auth), czy przekształcanie zawartości (np. dynamicznie kompresujący treść mod_gzip).
ServerName nazwa - domyślna nazwa serwera. Musi być to działająca domena wskazująca na serwer.
NameVirtualHost adres - bardzo ważna opcja, bez której wirtualne hosty dzielące te samo IP nie będą działać poprawnie. Najlepiej wpisać tę opcję dla każdego IP serwera.
ServerAdmin adres - adres e-mail administratora serwera, będzie publikowany w przypadku błędów.
DocumentRoot ścieżka - katalog, który będzie publikowany przez serwer.
UserDir nazwa - nazwa podkatalogu, z którego pobierane będą pliki publikowane przez użytkowników. Domyślnie jest to public_html; wtedy użytkownicy powinni umieszczać pliki do publikacji w katalogu ~/public_html. Pliki te będą dostępne pod url http://serwer/~użytkownik/.
DirectoryIndex nazwy... - nazwy plików, które będą wykorzystywane przez serwer jako strona główna katalogu. Domyślnie index.html. Warto dodać wpis dla każdego używanego rozszerzenia dla dokumentów.
Alias uri ścieżka - publikuje katalog oznaczony ścieżką dostępu w obrębie przestrzeni adresów serwera. Domyślnie istnieje alias z /icons/ do /usr/share/apache/icons, dostarczający ikon do indeksowania katalogów.
Options opcje... - opcje, używane w obrębie bloków <Directory> i <DirectoryMatch>. Są to:
All - wszystkie opcje.
None - żadna z opcji.
Indexes - generuj indeksy katalogów tam, gdzie nie występuje plik indeksu.
Includes - uaktywnia SSI w danym katalogu. Aby opcja ta działała, niezbędne jest załadowanie i skonfigurowanie modułu mod_include.
FollowSymLinks - pozwala na oglądanie plików i katalogów dostępnych za linkiem symbolicznym.
ExecCGI - pozwala na uruchamianie programów CGI.
AllowOverride opcje... - zezwala użytkownikom na skonfigurowanie pewnych aspektów pracy serwera w plikach .htaccess w udostępnianych katalogach. Opcje AllowOverride określają, co użytkownik ma prawo skonfigurować. Najważniejsze z nich to:
All - wszystkie opcje.
None - żadna z opcji.
AuthConfig - konfiguracja autentyfikacji.
Indexes - opcje indeksowania (np. DirectoryIndex).
Limit - kontrola dostępu według adresu klienta.
Options - dyrektywa Options.
Hosty wirtualne
Apache pozwala na hostowanie wielu różnych domen na jednym serwerze fizycznym. Pozwalają na to hosty wirtualne. Konfiguracja hosta wirtualnego zamyka się w bloku <VirtualHost>. W obrębie bloku VirtualHost działa większość opcji konfiguracyjnych, co pozwala na dużą swobodę konfiguracji. Prosty przykładowy blok VirtualHost wygląda następująco:
<VirtualHost www.domena.pl>
DocumentRoot /home/domena/www/
</VirtualHost>
Uprawnienia dostępu
Serwer Apache ma wbudowane funkcje kontroli dostępu. Najczęściej wykorzystywana jest kontrola na podstawie adresu IP klienta oraz według autentyfikacji podstawowej protokołu HTTP. Do konfiguracji wykorzystuje się najczęściej wspomniane wcześniej pliki .htaccess - dzięki temu unika się restartowania serwera przy zmianie konfiguracji, ponadto wykorzystując .htaccess konfigurację dostępu mogą wykonać zwykli użytkownicy.
Ograniczenia dostępu do katalogu wyłącznie do wybranych adresów IP. Jeśli chcemy dać dostęp tylko lokalnej maszynie (127.0.0.1) oraz sieci wewnętrznej (np. 192.168.0.0/24), plik .htaccess powinien wyglądać następująco:
Order Allow,Deny
Allow from localhost
Allow from 192.168.0.0/24
Opcja Order definiuje kolejność sprawdzania dyrektyw Allow i Deny. Dla Allow,Deny komputery są domyślnie blokowane, a dyrektywy Deny są ważniejsze od Allow (tzn. Deny może zablokować maszynę z Allow). Natomiast dla Deny,Allow komputery domyślnie otrzymują dostęp. (Allow jest ważniejszy od Deny.)
Konfiguracja autentyfikacji typu Basic wymaga utworzenia pliku zawierającego hasła użytkowników. Służy do tego komenda htpasswd. Przykładowo, utworzenie pliku hasla z dwoma użytkownikami wygląda następująco:
$ mkdir apache
$ cd apache
$ htpasswd -c hasla student1
New password: haslo
Re-type new password: haslo
Adding password for user student1
$ htpasswd hasla student2
New password: haslo2
Re-type new password: haslo2
Adding password for user student2
Plik .htaccess zezwalający na dostęp tylko wybranym użytkownikom:
AuthName "Tajne pliki"
AuthType Basic
AuthUserFile /home/student1/apache/hasla
Require valid-user
W przypadku większych witryn czasem potrzebne będzie udostępnianie różnych danych różnym użytkownikom z tej samej bazy. Można wtedy dawać dostęp tylko pojedynczym użytkownikom za pomocą dyrektywy Require. Aby dać dostęp wyłącznie użytkownikowi student1, należałoby zmienić dyrektywę Require na następującą:
Require user student1
Można wymienić wielu użytkowników w jednej dyrektywie Require user. Jednak w przypadku, gdy listy użytkowników za bardzo się rozrastają, warto użyć grup. Plik grup składa się z wierszy, które zawierają nazwę grupy, znak dwukropka i kolejno wymienione nazwy członków.
Prosty plik grup grupy studenci:
studenci: student1 student2
Plik .htaccess powinien teraz wyglądać tak:
AuthName "Tajne pliki"
AuthType Basic
AuthUserFile /home/student1/apache/hasla
AuthGroupFile /home/student1/apache/grupy
Require group studenci
Możliwe jest łączenie autentyfikacji hasłem z autentyfikacją według adresu klienta. Aby to zrobić, wystarczy dyrektywy dla obu konfiguracji umieścić w jednym pliku .htaccess oraz dodać odpowiednią opcję Satisfy. Opcja Satisfy any powoduje, że dostęp zostanie przekazany tym użytkownikom, którzy spełnią dowolny z wymogów autentyfikacji. Można w ten sposób udostępnić pewne dane w sieci lokalnej bez hasła, lecz wymagać hasła dla użytkowników spoza sieci. Natomiast opcja Satisfy all oznacza, że muszą zostać spełnione wszystkie wymagania.
Przykłady do ćwiczeń
Przykładowe zmiany w domyślnych ustawieniach httpd.conf
Linia Ustawienia
367 DirectoryIndex index.html index.htm dopisz (po „spacji”): index.php index.php3 oraz index.cgi.
483 typ logu z common na combined.
269 adres e-mail admina. Warto również zmienic linie
331 AllowOverride All, taki wpis spowoduje, że jeśli umieścimy w katalogu plik .htaccess, każdy odwiedzajacy bedzie pytany o hasło.
449 HostnameLookups On - pozwala na wyświetlanie w logu nazw kanonicznych (lub numerów IP przy opcji Off).
Fragment pliku htpd.conf definiujący hosty wirtualne
<VirtualHost 192.168.1.29:8000>
ServerAdmin root@loclahost
DocumentRoot /var/www/kurs/
DirectoryIndex index.php index.html index.htm index.shtml
</VirtualHost>
NameVirtualHost www.hades.alfa
<VirtualHost www.hades.alfa>
ServerAdmin root@localhost
DocumentRoot /var/www/hades/
DirectoryIndex index.php index.html index.htm index.shtml
</VirtualHost>
Przykład pliku .httaccess
AuthType Basic
AuthName "Wymagane logowanie"
AuthUserFile /var/www/html/sql/test/.passwd
AuthGroupFile /var/www/html/sql/test/.group
Require group testowa
oraz pliku definicji grupy .group
testowa: test
- 3 -