Apache 1.3.x – serwer WWW

Contents

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:

  1. globalne ustawienia,

  2. ustawienia serwera ale nie dotyczące wirtualnych hostów oraz

  3. 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ę ) a następnie określamy przy pomocy poleceń Order (z parametrami allow oraz deny), Deny from oraz Allow from komputery lub całe sieci, których zasady dotyczą. Polecenie Order określa domyślną politykę (allow lub Deny), natomiast pozostałe polecenia określają kogo tyczy zapis).

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)

 

  • Sprawdzenie poprawności wykonania ćwiczenia polega na zainstalowaniu programu przy pomocy narzędzia urpmi lub rpmdrake oraz na połączeniu się z adresem 127.0.0.1 (by sprawdzić czy serwer działa).
  • Należy ustawić dyrektywę MinSpareServers na wartość 7
  • Sprawdzenie drugiej części ćwiczenia polega na umieszczeniu zamianie dyrektywy
    <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.

  • Opis jak uruchomić obsługę PHP4 jest w sekcji PHP4 tego rozdziału
  • Należy ustawić wartość zmiennej Port na wartość 8080
  •  

    Dodaj komentarz