Instalacja
Instalację najlepiej wykonać z pakietów dostarczanych przez twórców dystrybucji. W przypadku dystrybucji Mandriva (dawny Mandrake) wydamy polecenie (ale może już nie być tego pakietu i zostanie zainstalowany Apache w wersji 2.x, spójrz wtedy na opis Apache 2.x dostępny tutaj):
urpmi apache
Natomiast w dystrybucji Debian:
apt-get install apache
Uruchomienie, restart i zatrzymanie serwera
Serwer WWW uruchamiamy (w trybie konsoli) w dystrybucjach wykorzystujących schemat V System (czyli np. Red Hat, Debian, Mandriva (dawny Mandrake) ale nie Slackware) przy pomocy polecenia:
/etc/init.d/httpd start
Albo
/etc/init.d/apache start
Zależy to od dystrybucji i przyjętych przez jej twórców schematów organizacyjnych.
Serwer restartujemy poleceniem:
/etc/init.d/httpd restart
Albo
/etc/init.d/apache restart
Zatrzymania serwera dokonamy przy pomocy polecenia:
/etc/init.d/httpd stop
Albo
/etc/init.d/apache stop
Plik konfiguracyjny
Głównym plikiem konfiguracyjnym Apache-a jest /etc/apache/httpd.conf. Jest on podzielny na sekcje:
-
globalne ustawienia,
-
ustawienia serwera ale nie dotyczące wirtualnych hostów oraz
-
Wirtualne domeny www.
Plik ten jest dość duży i praktycznie nie ma sensu tworzyć go od podstaw, omówię więc co należy w nim pozmieniać. Najpierw należy określić w jakim trybie będzie on pracował, czy jako samodzielny program podłączy się pod port czy też przy wykorzystaniu wrapera. Decyduje o tym dyrektywa ServerType. Ma ona dwa możliwe stany: standalone oraz inetd.
ServerType standalone MinSpareServers 1 MaxSpareServers 10 StartServers 1 MaxClients 150 MaxRequestsPerChild 100 #Listen 12.34.56.78:80
Następnie modyfikujemy sekcje 2 (Section 2 'Main’ server configuration)
Port 80 User www-data Group www-data ServerAdmin webmaster@gateway ServerName gateway.localnet
sekcją 3 czyli serwerami wirtualnymi na razie nie musimy się zajmować. Została ona także omówiona w dalszej części skryptu.
Ograniczenie (sterowanie nimi) zasobów zużywanych przez serwer
Czasem może się okazać iż serwer Apache zajmuje za dużo zasobów. Możemy jednak przeciwdziałać określając minimalną i maksymalną ilość oczekujących jednoczenie serwerów (odpowiednio MinSpareServer i MaxSpareServer), ilość uruchamianych na starcie serwerów (StartServer) czy ilość jednoczenie obsługiwanych połączeń serwera z klientami. Przykładowe ograniczenia to:
MinSpareServers 1 MaxSpareServers 10 StartServers 1 MaxClients 150 MaxRequestsPerChild 100
CGI
CGI umożliwia wykonywanie programów i skryptów po stronie serwera. Wymaga to jednak odrobiny zachodu gdyż: musimy zezwolić serwerowi WWW na wykonywanie programów, załadować moduły do wykonania skryptów cgi oraz określić jak ma się on zachowywać gdy obsługuje pliki o określonym rozszerzeniu.P>
Najpierw musimy zezwolić na wykonywanie określonych plików. Dokonujemy to dzięki poleceniu Options ExecCGI. Musimy to jednak wykonać w sekcji określającej katalog cgi.
Przykład:
<Directory /home/httpd/cgi-bin> AllowOverride None Options ExecCGI <Directory>
Następnie ładujemy moduły konieczne do wykonania skryptów cgi.
LoadModule cgi_module modules/mod_cgi.so ... AddModule mod_cgi.c
Skrypty CGI umieszcza się w specjalnym katalogu i osiągalne one są przez wpisanie adresu z końcówką cgi-bin np. www.ziutus.com/cgi-bin/
ScriptAlias /cgi-bin/ /home/httpd/cgi-bin/
I informujemy jak ma się zachowywać serwer w przypadku napotkania pliku do wykonania
AddHandler cgi-script .cgi
Tak więc całość polega na wpisaniu lub odkomentowaniu (usunięciu znaku # z początków linii) następujących dyrektyw:
<Directory /home/httpd/cgi-bin> AllowOverride None Options ExecCGI <Directory> LoadModule cgi_module modules/mod_cgi.so AddModule mod_cgi.c ScriptAlias /cgi-bin/ /home/httpd/cgi-bin/ AddHandler cgi-script .cgi
Umożliwienie wykonywania skryptów CGI pozwala na uruchomienie takich usług jak poczta przez www FormMail czy liczniki WWW. Zobacz dalej opisy instalacji tych programów.
PHP3
Najpierw musimy załadować moduły i dodać je do rozszerzeń:
LoadModule php_module modules/mod_php.so LoadModule php3_module modules/libphp3.so AddModule mod_php.c AddModule mod_php3.c
Następnie informujemy Apacha jak ma traktować pliki o odpowiednich rozszerzeniach:
AddType application/x-httpd-php3 .php3 AddType application/x-httpd-php3-source .phps
I tyle :)).
Sprawdzenie czy php jest uruchomione najłatwiej jest wykonać korzystając z funkcji php informującej o parametrach pracy. Stwórz sobie plik test.php3 o następującej zawartości Powinna pojawić się tabelka z informacjami.
PHP3 ma moduły, najważniejsze to mysql.so (do obsługi bazy danych mysql) imap.so (poczta) oraz pgsql.so (Postgresql). Umieszczone są one w katalogu /usr/lib/apache/.
Następnie należy edytować plik konfiguracyjny dla php3 (np. /etc/apache/php3.ini)
;UNIX Extensions dodajemy linijke: extension=mysql.so extension=imap.so extension=pgsql.so Przypuszczalnie trzeba też będzie zmodyfikować: extension_dir = /usr/lib/apache
Nie zapomnij zrestatrować Apache’a…
PHP4
Najpierw musimy załadować moduł PHP4:
LoadModule php4_module /usr/lib/apache/1.3/libphp4.so
Następnie informujemy Apacha jak ma traktować pliki o odpowiednich rozszerzeniach:
AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
I tyle :)).
Sprawdzenie czy php jest uruchomione najłatwiej jest wykonać korzystając z funkcji php informującej o parametrach pracy. Stwórz sobie plik test.php o następującej zawartości Powinna pojawić się tabelka z informacjami o PHP.
PHP4 ma moduły, najważniejsze to mysql.so (do obsługi bazy danych mysql) imap.so (poczta) oraz pgsql.so (Postgresql). Umieszczone są one w katalogu /usr/lib/apache/.
Następnie należy edytować plik konfiguracyjny dla php4 (np. /etc/apache/php4.ini)
;UNIX Extensions dodajemy linijke: extension=mysql.so extension=imap.so extension=pgsql.so Przypuszczalnie trzeba też będzie zmodyfikować: extension_dir = /usr/lib/apache
Nie zapomnij zrestatrować Apache’a…
Serwery wirtualne
Najpierw musisz mieć zdefiniowany adres dla serwera wirtualnego w swoim DNSie. Jak to zrobić możesz się dowiedzieć w dziale dotyczącym DNSa. Jeżeli to zrobiłeś możesz już ustawiać serwery wirtualne www. Robi to się następująco. Do pliku konfiguracyjnego dodajemy dyrektywę NameVirtualHost nazwa.serwera.pl np: NameVirtualHost www.podrecznik.ziutus.com.pl. Następnie definiujemy adres adminstratora www (ServerAdmin adres_email), położenie dokumentu na serwerze (DocumentRoot sciezka_dostepu) oraz inne parametry (jak np. ścieżka do dzienników zdarzeń).
Przykładowa definicja:
<VirtualHost www.podrecznik.ziutus.com.pl> ServerAdmin web-ziutus@.ziutus.com.pl ServerName www.podrecznik.ziutus.com.pl DocumentRoot /home/httpd/html/podrecznik TransferLog /dev/tty10 TransferLog logs/access_log TransferLog logs/strona.log </VirtualHost>
Ograniczenie dostępu
Domyślnie (ale to zależy od instalacji) w pliku /etc/apache/access.conf dopisujemy dyrektywy określające dostęp do naszego serwera WWW. Mają one dość schematyczny i łatwy do przewidzenia wygląd. Najpierw określamy katalog którego dotyczą ograniczenia (przez dyrektywę
Przykładowo mamy:
</Directory /home/httpd/html/katalog> Order allow, deny Deny from 123.456.789.012 Allow from all <Directory>
oznacza iż dopuszczamy wszystkich poza kimś o adresie 123.456.789.012
Linii określających zasady dostępu (czyli z Deny i from) może być wiele. Mogą tyczyć pojedynczego komputera lub całej domeny. Wszystko zależy od Twojej fantazji.
Przykładowy wpis to:
<Directory /home/httpd/html/katalog> Order allow, deny Allow from 000.000.000.000 Allow from *.ziutus.com.pl Deny from 192.168.192.4 Deny from 192.168.192. <Directory>
strony błędów
Zdarza się iż internauta źle wpisze adres lub odsyłacz prowadzący do nieistniejącej strony. Mogą zdarzyć się także inne problemy: źle podane hasło do strony z ograniczonym dostępem lub próba uruchomienia protokołu nieobsługiwanego przez serwer. W takich przypadkach możemy zdać się na domyślne strony błędów lub stworzyć własne (które znacznie lepiej będą wyglądały).
Komunikaty o błędach, które zdefiniujemy, mogą mieć następującą postać: zwykłego tekstu umieszczanego na stronie, strony na naszym serwerze czy przekierowania na inny serwer.
Komunikat w postaci zwykłego tekstu tworzymy następująco:
ErrorDocument 404 "Blad 404. Strona nie istnieje
co istotne cudzysłowu nie zamyka się. Wyświetlenie lokalnej strony uzyskamy następująco:
ErrorDocument 401 bledy/blad401.html
Jeżeli natomiast chcemy zrobić przekierowanie na stronę informującą o błędzie to piszemy:
ErrorDocument 404 http://tcz.dtvk.tpnet.pl/errors/404.htm
Przykładowe konfiguracje to:
ErrorDocument 401 "Blad 401. Podales niepoprawne haslo. ErrorDocument 403 errors/403.htm ErrorDocument 404 http://tcz.dtvk.tpnet.pl/errors/404.htm ErrorDocument 500 http://tcz.dtvk.tpnet.pl/errors/500.htm
Wyszukiwarki stron www
Na pewno kiedyś Twój serwer www zostanie odwiedzony przez robota pracującego dla jakiej wyszukiwarki. Jego zadaniem jest zindeksować zawartość Twojej strony aby użytkownicy tej wyszukiwarki mogli znaleźć informacje o niej. Domyślnie zbiera ona informacje o wszystkich stronach jakie masz na serwerze co nie zawsze jest pożądane.
Możesz się przed tym zabezpieczyć umieszczając w specjalnym pliku rozkazy dla tych robotów. Robi się to w pliku robots.txt, który umieszczamy w głównym katalogu z zawartością serwera. Jego składania jest następująca: najpierw okrelamy nazwę robota, którego dotyczą zasady (User-agent: nazwa_robota) a następne poleceniem Dissallow blokujemy dostęp do określonych plików czy katalogów (np. Disallow: /katalog)
Przykład:
User-agent: * Disallow: /katalog_lub_plik * - oznacza wszystkie wyszukiwarki
Disallow: – służy do wymienienia plików lub katalogów, których nie chcemy umieszczać w bazie danych, polecenie można powtarzać w celu umieszczenia większej ilości plików lub katalogów zabronionych do skanowania
Więcej iformacji znajdziesz na:
-
http://info.webcrawler.com/mak/projects/robots/norobots.html
-
http://info.webcrawler.com/mak/projects/robots/meta-user.html
Hasło na WWW
Aby wprowadzić hasła na dostęp do strony należy zrobić dwie rzeczy: poinformować Apache’a że dany katalog jest chroniony hasłem oraz stworzyć plik z hasłami. Tak więc po pierwsze modyfikujemy odpowiednią linie aby wpis przybrał postać:
Options Indexes Includes FollowSymLinks oraz kolejną linie w której zapis AllowOverride None, zmieniamy na AllowOverride All i restartujemy serwer. W katalogu, który chcemy zabezpieczyć należy umiecić plik o nazwie .htaccess zawierający następujące polecenia dla serwera WWW:
AuthType basic AuthName "index.htm" AuthUserFile /home/httpd/html/katalog/.htpasswd (lub inny namiar) AuthGroupFile /dev/null require valid-user
Następnie tworzymy plik z użytkownikami i ich hasłami poleceniem:
htpasswd -c /home/httpd/html/katalog/.htpasswd username System o hasło dla użytkownika "username" i zapisze go do pliku ".htpasswd". Przy dodawaniu kolejnego użytkownika należy pominąć "-c" przy wywoływaniu htpasswd.
Pamiętaj iż serwer nie sprawdza czy ktoś nie próbuje złamać siłowo hasła, w ogóle nie występuje kontrola pod tym względem, postaraj się więc o silne hasło a przynajmniej aby hasła te nie były hasłami z systemu.
server-status
![]() |
Jeżeli serwer został skompilowany odpowienio można na stronie lokalnego serwera http://localhost/server_status znaleźć kilka informacji o nim |
Programy pomocnicze dla Apache’a
Webalizer – statystyki systemu
Ciekawym programem współpracującym z Apachem jest Webalizer. Generuje on na podstawie logów informacje o odwiedzalności danego serwisu. Podobne programy to analog, lire.
awstats
Program generuje bardzo ciekawe statystyki, znacznie bardziej czytelne i ładniejsze niż Webalizer.
wwwcount – liczniki na stronie
Jeżeli chciałbyś pozwolić swoim użytkownikom na posiadanie zgrabnego licznika na stronie to polecamy program wwwcount.
wwwfinger – informacje o użytkownikach systemu
Jeżeli chciałby wyświetlać informacje o lokalnych użytkownikach to polecamy pakiet wwwfinger (choć nie jest zbyt bezpiecznie udostępniać go wszystkim).
Zmiana hasła przez stronę
Pewnym ułatwieniem w obsłudze kont przez www mogą być pakiety pozwalające na zmianę hasła przez stronę www: Chpasswd oraz Wwwpasswd.
Commanche
Commache to dodatek do Apacha umożliwiająca łatwą konfigurację ustawień serwera z poziomu przeglądarki.
ab – statystyki wydajności serwera
Program ab wchodzący w skład serwera Apache pozwala badać wydajność serwera.
[root@localhost security]# ab -n 100 127.0.0.1:80/ This is ApacheBench, Version 2.0.40-dev <$Revision: 1.121 $> apache-2.0 Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/ Benchmarking 127.0.0.1 (be patient).....done Server Software: Apache-AdvancedExtranetServer/2.0.44 Server Hostname: 127.0.0.1 Server Port: 80 Document Path: / Document Length: 7061 bytes Concurrency Level: 1 Time taken for tests: 1.878469 seconds Complete requests: 100 Failed requests: 0 Write errors: 0 Total transferred: 736700 bytes HTML transferred: 706100 bytes Requests per second: 53.23 [#/sec] (mean) Time per request: 18.785 [ms] (mean) Time per request: 18.785 [ms] (mean, across all concurrent requests) Transfer rate: 382.76 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.3 0 2 Processing: 9 17 46.0 10 463 Waiting: 0 14 41.5 7 415 Total: 9 17 46.2 10 465 Percentage of the requests served within a certain time (ms) 50% 10 66% 10 75% 12 80% 13 90% 16 95% 43 98% 66 99% 465 100% 465 (longest request) [root@localhost security]#
Inne moduły dla Apache-a
Możliwości Apache można rozszerzyć poprzez zastosowanie modułów napisanych specjalnie dla niego pełną listę znajdziemy na http://modules.apache.org/
Alternatywy dla Apache’a
Pewna alternatywa dla obecnej stabilnej serii Apache 1.3.x jest THTTPD (Tiny/Turbo/Throttling HTTP Deamon). Jest to mały i prosty serwerek HTTP, lecz o całkiem dużych możliwościach przeznaczony dla standardowego użytkownika. Wspiera protokół HTTP/1.1, pozwala na używanie skryptów CGI, a także umożliwia współpracę z PHP4. Rzeczą wyróżniającą go od Apacha jest jego większa wydajność w serwowaniu statycznych stron internetowych uzyskana dzięki zmianie koncepcji obsługi nadchodzących żądań na nie blokujące operacje Wejścia/Wyjścia.
Jest także serwer WWW w jądrze Linuksa i nazywa sie TuX i pewnie jest jeszcze szybszy, choć może poważnie zagrażać bezpieczeństwu systemu jako całości. Już zdarzył się przypadek, że znaleziono w nim błąd pozwalający wykonać atak typu DoS.
Inny alternatywny serwer WWW to Roxen
Odpowiedzi do ćwiczeń
ćwiczenie 3 (serwer Apache)
<IfModule mod_userdir.c> UserDir public_html </IfModule>
Na następującą:
<IfModule mod_userdir.c> UserDir www </IfModule>
Należy również zmienić prawa dostępu do katalogu w którym będziemy trzymać nową stronę domową. W tym celu zmieniamy ciąg w nazwie katalogu z sekcji home z podkatalogu public_html na www czyli
<Directory /home/*/public_html>
zamieniamy na:
<Directory /home/*/www>
Następnie w katalogu domowym użytkownika, w podkatalogu www, umieszczamy stronę testową skopiowaną wcześniej z serwera nauczycielskiego. Potem wpisujemy adres 127.0.0.1/~tester1. Gdy pojawi się wcześniej skopiowana strona testowa, wszystko działa.