apache SSL PHP


Serwer WWW

[apache+mm+php+mysql+ssl]

W tym artykule postaram sie opisac instalacje oraz konfiguracje najczesciej
uzywangeo serwera www - Apache w polaczeniu z PHP (jezykiem skryptowym do
tworzenia stron www), bazz danych - MySQL, oraz obsluga bezpiecznych polaczen -
SSL (mod_ssl).


o Przygotowania
=============

Przed rozpoczeciem nalezy zaopatrzyc sie w najnowsze zrodla Apache`a, biblioteki
mm, PHP, MySQL, openssl (jezeli jeszcze nie masz, a jesli masz nieaktualna to warto
przy okazji uaktualnic do najnowszej wersji) oraz mod_ssl, podczas pisania tego
artykulu najnowszymi zrodlami sa:

apache 1.3.28 http://httpd.apache.org/download.cgi
php 4.3.2 http://www.php.net/downloads.php
mysql 4.0.14 http://www.mysql.com/downloads/mysql-4.0.html
mm 1.3.0 http://freshmeat.net/releases/115481/
mod_ssl 2.8.15 http://www.modssl.org/source/
openssl 0.9.7b http://www.openssl.org/source/


Na poczatek umieszczamy wszystkie zrodla w katalogu /usr/src i tam rozpakowywujemy:

# tar -zxvf apache_1.3.28.tar.gz
# tar xvfj php-4.3.2.tar.bz2
# tar -zxvf openssl-0.9.7b.tar.gz
# tar -zxvf mysql-4.0.14.tar.gz
# tar -zxvf mm-1.3.0.tar.gz
# tar -zxvf mod_ssl-2.8.14-1.3.27.tar.gz


o openssl & mm
============

Na pierwszy ogien pojdzie kompilacja openssl oraz biblioteki 'mm'

# cd openssl-0.9.7b
# ./config
# make ; make install

# cd ../mm-1.3.0
# ./configure --prefix=/usr/local/mm ; make
# make test
# make install

Edytujemy plik ze sciezkami do bibliotek - /etc/ld.so.conf, dodajemy sciezke do
biblioteki 'mm', mozna tak:

echo "/usr/local/mm/lib" >>/etc/ld.so.conf ; ldconfig


o Apache
======

Nalezy teraz wstepnie uruchomic skrypt konfiguracyjny Apache`a z prefixem na sciezke,
najlepiej /usr/local/apache, lecz moze to byc dowolny inny katalog. Jednak zanim do
tego przystapimy, chcialbym zwrocic uwage na możliwosc zmiany banner`a czyli wersji
serwera, ktora jest wyswietlana przez Apache`a jesli w pliku konfiguracyjnym (ktory
teraz jeszcze nie istnieje) dyrektywa "ServerSignature" jest ustawiona na "on"
(ustawienie domyslne). Banner Apache`a mozna bez problemu "wyciagnac" nawet gdy w/w
dyrektywa jest nieaktywna (off).

# cd apache_1.3.28/src/include

Edytujemy plik "httpd.h", nalezy zmienic nastepujace linijki:

# cat httpd.h |grep "SERVER_BASE"
#define SERVER_BASEVENDOR "Apache Group"
#define SERVER_BASEPRODUCT "Apache"
#define SERVER_BASEREVISION "1.3.28"

Przykladowo po zmianie moga one wygladac tak:

#define SERVER_BASEVENDOR "moon station"
#define SERVER_BASEPRODUCT "CBN"
#define SERVER_BASEREVISION "1.3.3"

Zapisujemy zmiany, wracamy do katalogu głownego Apache`a i uruchamiamy skrypt
konfiguracyjny:

# ./configure --prefix=/usr/local/apache

Wchodzimy teraz w katalog z mod_ssl i podobnie jak wczesniej uruchamiamy skrypt
konfiguracyjny z prefixem na zrodla Apache`a:

# cd mod_ssl-2.8.15-1.3.28
# ./configure --with-apache=/usr/src/apache_1.3.28
Configuring mod_ssl/2.8.15 for Apache/1.3.28
./configure:Error: The mod_ssl/2.8.15 can be used for Apache/1.3.28 only.
./configure:Error: Your Apache source tree under /usr/src/apache_1.3.28 is version
1.3.3.
./configure:Hint: Please use an extracted apache_1.3.28.tar.gz tarball
./configure:Hint: with the --with-apache option, only.

i zatrzymujemy się. Skrypt konfiguracyjny sprawdza jaka wersja Apache`a jest w
podanym katalogu i wyrzuca blad jesli jest inna niż 1.3.28. Jednak my wiemy, że mamy
wlasciwa wersje, "poprawiamy" wiec skrypt:

# cat -n configure |grep "can be used" -n5
295- 295 grep "#define SERVER_BASEREVISION" |\
296- 296 sed -e 's/^[^"]*"//' -e 's/[" ].*$//'`
297- 297 fi
298- 298 if [ .$force != .yes ]; then
299- 299 if [ ".$V_APACHE" != ".$APV" ]; then
300: 300 echo "$0:${T_MD}Error${T_ME}: The mod_ssl/$V_MODSSL can be (..)
301- 301 echo "$0:${T_MD}Error${T_ME}: Your Apache source tree under (..)
302- 302 echo "$0:${T_MD}Hint${T_ME}: Please use an extracted (..)
303- 303 echo "$0:${T_MD}Hint${T_ME}: with the --with-apache option,(..)
304- 304 exit 1
305- 305 fi

zmiana ogranicza sie do usuniecia linijki 304 - zakonczenia skryptu w wypadku
niespelnienia warunku.

Tym sposobem zostanie wyswietlony blad ale skrypt bedzie kontynuowac dzialanie.
Ponownie uruchamiamy skrypt.


o MySQL
=====

Pora na instalację bazy danych:

# groupadd mysql ; useradd -d /var/lib/mysql -s /nologin -c mysql -g mysql mysql
# passwd -l mysql
# cd mysql-4.0.14
# ./configure --with-openssl --prefix=/usr/local/mysql
# make
# make install
# /usr/local/mysql/bin/mysql_install_db

mozna teraz uruchomic baze:

# chown -R mysql.mysql /usr/local/mysql/var
# /usr/local/mysql/bin/mysqld_safe &
# /usr/local/mysql/bin/mysqladmin ping

jesli po wpisaniu drugiej linijki otrzymamy komunikat "mysqld is alive", mozemy
ustawic haslo dla administratora mysql oraz dodac inicjacje bazy do skryptow
startowych:

# /usr/local/mysql/bin/mysqladmin -u root password twoje_haslo

# echo "/usr/local/mysql/bin/mysqld_safe &" >>/etc/rc.d/rc.local


o PHP
===

nastepnie PHP:

# cd php-4.3.2
# ./configure --with-apache=/usr/src/apache_1.3.28 --with-mysql=/usr/local/mysql
# make
# make install


o Apache
======

Przenosimy sie znowu do katalogu Apache`a i finalnie konfigurujemy oraz kompilujemy
?ródła:

# cd apache_1.3.28
# SSL_BASE=/usr/src/openssl-0.9.7b
# EAPI_MM=/usr/local/mm
# cp /usr/src/php-4.3.2/libs/libphp4.a /usr/src/apache_1.3.28/src/modules/php4/
# ./configure --enable-module=ssl --prefix=/usr/local/apache \
--enable-module=rewrite --enable-shared=rewrite \
--activate-module=src/modules/php4/libphp4.a
# make

Kopiujemy plik konfiguracyjny PHP do katalogu Apache`a:

# cp /usr/src/php-4.3.2/php.ini-dist /usr/local/lib/php.ini

Doszlismy do momentu, w ktorym najlepiej jest przygotowac certyfikaty dla
naszej witryny - przy czym mozna to zrobic na kilka roznych sposobow - korzystajac z
gotowego skryptu do tworzenia takowych, badz 'recznie' openssl`em. W pierwszym
przypadku mamy do wyboru:

make certificate TYPE=dummy (dummy self-signed Snake Oil cert)
make certificate TYPE=test (test cert signed by Snake Oil CA)
make certificate TYPE=custom (custom cert signed by own CA)
make certificate TYPE=existing (existing cert)

Badz 'make certificate' bez dodatkowych parametrow. Jezeli chcemy byc sami dla siebie
instytucja wydajaca certyfikaty, nalezy wybrac "make certificate TYPE=custom" badz
wygenerowac recznie, w innym przypadku wystarczy samo "make certificate".

Jesli chcemy wygenerowac certyfikaty nie uzywajac skryptu dolaczanego do Apache`a
wpisujemy kolejno:

# /usr/src/openssl-0.9.7b/apps/CA.sh -newca
# /usr/src/openssl-0.9.7a/apps/CA.sh -newreq
# /usr/src/openssl-0.9.7a/apps/CA.sh -sign

Zostaniemy zapytani o szczegoly dot. certyfikatow i w ostatnim kroku podpisanie
certyfikatow.

Osobiscie polecam pierwsza metode:

# make certificate TYPE=custom

podobnie jak w pierwszym przypadku, wybieramy rodzaj szyfrowania, podajemy dane
odnosnie certyfikatow i kodujemy klucze, do zdekodowania ich potrzebne bedzie haslo,
ktore bedzie trzeba podac podczas tworzenia certyfikatow.
Nowo utworzone certyfikaty znajduja sie odpowiednio w:

- conf/ssl.key/ca.key
- conf/ssl.crt/ca.crt
- conf/ssl.key/server.key
- conf/ssl.crt/server.crt
- conf/ssl.csr/server.csr

Nadszedl czas na instalacje:

# make install

Jesli wszystko poszlo jak nalezy, mozna uruchomic serwer.
Przed uruchomieniem trzeba bedzie podac haslo, ktore wybralismy wczesniej:

# /usr/local/apache/bin/apachectl startssl
Enter pass phrase:

Ok: Pass Phrase Dialog successful.
../bin/apachectl startssl: httpd started

Mozna jeszcze sprawdzic czy napewno wszystko jest w porzadku telnetujac sie na oba
porty:

# telnet 0 80
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
. <- wpisać cokolwiek
(...)
CBN/1.3.3 Server at 62.233.240.203 Port 80

(...)

# telnet 0 443
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.


Serwer wystartowal. Zajmiemy sie teraz czescia konfiguracyjna.

Plik konfiguracyjny Apache`a znajduje sie domyslnie w katalogu /usr/local/apache/conf -
httpd.conf - Nie bede opisywac wszystkich dyrektyw dla Apache`a gdyz odpowiednie
komentarze sa (w języku angielskim) w samym pliku, tak wiec ogranicze sie tylko do
najistotniejszych wg mnie sekcji.


o httpd.conf
==========

Najpierw zajmijmy sie samym Apache`m:

Aby PHP wspoldzialalo z Apache`m musimy pod linil "AddModule mod_php4.c" dodac
nastepujace linie:

AddType application/x-httpd-php .php4 .phtml .php .php3
AddType application/x-httpd-php-source .phps
AddType application/x-httpd-php3 .php3
AddType application/x-httpd-php3-source .phps

Dobrze jesli dopiszemy indexy w formacie *php do szukanych domyslnie dokumentow przy
odwolaniu do zasobow:


DirectoryIndex index.html index.php index.php3


Ponizsze dwie linie definiuja uzytkownika, z prawami ktorego Apache rozpocznie swoje
działanie:

User nobody
Group nobody

domyslne ustawienia sa bezpieczne jednak u mnie Apache pracuje jako
uzytkownik 'www', tak wiec jesli chcemy dodac grupe i uzytkownika specjalnie dla
Apache`a, dodajemy go nastepujaco:

# groupadd www
# useradd -s /nologin -c www -g www www ; passwd -l www

Mozemy zdefiniowac wlasne informacje, wyswietlane w zalezno?ci od kodu bledu, ponizej
umieszczam takze liste oznaczen numerycznych zwracanych przez serwer:

HTTP_CONTINUE 100 - zadanie kontynuacji
HTTP_SWITCHING_PROTOCOLS 101 - zmiana protokolu
HTTP_OK 200 - operacja wykonana pomyslnie
HTTP_CREATED 201 - zadany zasob utworzono
HTTP_ACCEPTED 202 - zadanie przyjete
HTTP_NON_AUTHORITATIVE 203 - odpowiedz pochodzi z innego serwera
HTTP_NO_CONTENT 204 - brak nowej informacji do przekazania
HTTP_RESET_CONTENT 205 - zadanie usuniecia bierzacej zawartosci
HTTP_PARTIAL_CONTENT 206 - przekazano odpowiedz typu czesciowego
HTTP_MULTIPLE_CHOICES 300 - zadaniu odpowiada >1 dokument
HTTP_MOVED_PERMANENTLY 301 - dokument przeniesiono na stale
HTTP_MOVED_TEMPORARILY 302 - dokument przeniesiono tymczasowo
HTTP_SEE_OTHER 303 - wskazanie aktualnego polozenia dokumentu
HTTP_NOT_MODIFIED 304 - dokument nie byl modyfikowany
HTTP_USE_PROXY 305 - zadanie uzycia serwera posredniczacego
HTTP_TEMPORARY_REDIRECT 307 - zadania czasowo przeadresowane
HTTP_BAD_REQUEST 400 - bledne zadanie
HTTP_UNAUTHORIZED 401 - bledna autoryzacja
HTTP_PAYMENT_REQUIRED 402 - dostep platny
HTTP_FORBIDDEN 403 - brak dostepu do zasobu
HTTP_NOT_FOUND 404 - strona nie istnieje
HTTP_METHOD_NOT_ALLOWED 405 - metoda niedozwolona
HTTP_NOT_ACCEPTABLE 406 - klient nie akceptuje formatu dokumentu
HTTP_PROXY_AUTHENTICATION_REQUIRED 407 - wymagana autoryzacja na s. posredniczacych
HTTP_REQUEST_TIME_OUT 408 - limit czasu przekroczony
HTTP_CONFLICT 409 - konflikt zadania
HTTP_GONE 410 - adres nie istnieje
HTTP_LENGTH_REQUIRED 411 - wymagane okreslenie rozmiaru zadanego zasobu
HTTP_PRECONDITION_FAILED 412 - niepowodzenie testu warunkowego
HTTP_REQUEST_ENTITY_TOO_LARGE 413 - zadany dokument jest zbyt duzy
HTTP_REQUEST_URI_TOO_LARGE 414 - zadany identyfikator URI jest zbyt dlugi
HTTP_UNSUPPORTED_MEDIA_TYPE 415 - bledny format tresci zadania
HTTP_EXPECTATION_FAILED 417 - niemozliwe spełnienie wymogow naglowka
HTTP_INTERNAL_SERVER_ERROR 500 - wewnetrzny blad serwera
HTTP_NOT_IMPLEMENTED 501 - funkcja niezaimplementowana
HTTP_BAD_GATEWAY 502 - blad w komunikacji z brama
HTTP_SERVICE_UNAVAILABLE 503 - uslugi serwera sa niedostepne
HTTP_GATEWAY_TIME_OUT 504 - blad przeterminowania bramy
HTTP_VERSION_NOT_SUPPORTED 505 - nieobslugiwana wersja protokolu HTTP

ErrorDocument 500 "internal server error.
ErrorDocument 404 /404.html

przy czym lokalizacja 404.html w tym przypadku wskazuje na glowny katalog w drzewie
Apache`a. Jesli wiec zdecydowalismy sie umiescic nadkatalog np. w /home/www, w pliku
konfiguracyjnym bedzie to wygladac tak:

DocumentRoot "/home/www"

Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all


czyli lokalizacja np. '/home/www/404.html' dla apacza będzie '/404.html'.


Jak zrobic wirtualnego web hosta z wykorzystaniem serwera DNS:
przypuscmy sytuacje, w ktorej mamy wydelegowana domene/subdomene (dla przykladu
dr00t.org (zakladam, ze masz juz poprawnie skonfigurowana strefe dla domeny)) na
wlasny serwer DNS i chcemy utworzyc web vhosta o nazwie home.dr00t.org, ktory bedzie
wskazywal na 62.62.62.62. Najpier dodajemy rekord IN A w strefie domeny:

home IN A 62.62.62.62

zwiekszamy numer seryjny strefy +1, zapisujemy i restartujemy serwer DNS.
Przechodzimy do konfiguracji w httpd.conf:

NameVirtualHost *

DocumentRoot /home/www
ServerName dr00t.org


NameVirtualHost www.dr00t.org

DocumentRoot /home/www
ServerName www.dr00t.org


Jak widac - pierwsze dwa wpisy nie sa wlasciwymi vhostami, odnosza sie do adresu
bazowego, mozna teraz dodac naszego vhosta:

NameVirtualHost home.dr00t.org

ServerName home.dr00t.org


W przypadku gdy web vhost nie odnosi sie do zdalnego hosta a definiuje tylko
alternatywny katalog nadrzedny, nalezy dodac dyrektywe "DocumentRoot". Mozna takze
dodac osobna obsluge bledow, indywidualne logi itp.

Prosta autoryzacja dla wybranych zasobow:
zalozmy, ze chcemy ograniczyc dostep do adresu www.dr00t.org/poufne/
autentykacja typu "Basic" odbywa się na poziomie user/pass i jest najczesciej
stosowana, edytujemy plik httpd.conf i pod dyrektywa "AccessFileName" dodajemy:


AuthType Basic
AuthName "strefa ograniczona: poufne"
AuthUserFile /home/www/poufne/.hasla
require valid-user


zapisujemy zmiany i restartujemy Apache`a, nalezy utworzyc plik z haslami:

# htpasswd -c /home/www/poufne.hasla user

gdzie parametr -c używamy podczas tworzenia pliku z haslami, przy dodawaniu kolejnych
uzytkownikow pomijamy go, gdyz w przeciwnym wypadku dotychczasowa zawartosc
zostanie usunieta.


o php.ini
=======

Konfiguracje PHP ogranicze do wzmianki o jednej dyrektywie poniewaz dla typowych
instalacji PHP jest gotowe do dzialania odrazu po zainstalowaniu bez specjalnych
poprawek.

Plik konfiguracyjny dla PHP skopiowalismy wczesniej do katalogu
/usr/local/lib/php.ini

Jesli niektore skrypty PHP nie dzialaja chociaz sa poprawne, mozemy uaktywnic
dyrektywe "register_globals":

register_globals = On

W celach diagnostycznych mozna utworzyc strone (np info.php), ktora zawiera:

phpinfo();
?>

po wejsciu na taka strone zobaczymy wszystkie detale dotyczace serwera www jak i samego
PHP.


o Poslowie
========

Ten artykul z pewnoscia nie wyczerpuje tematu jakim jest serwer Apache wraz z dodatkami,
mysle jednak, ze ukazuje po czesci olbrzymie mozliwosci Apache`a, - najczesciej
uzywanego serwera WWW na awiecie. Goraco zachecam do poczytania ponizszych
informacji, do ktorych sa linki, jako uzupelnienie.


o Dodatkowe informacje
====================

Odnosniki do informacji, ktorych tutaj nie zawarlem lub zostaly opisane czesciowo,
znajduja sie ponizej:

Apache
------

http://httpd.apache.org/docs/mod/directives.html
- Skladnia i opis wszystkich dyrektyw, wystepujacych w Apache`u,

http://httpd.apache.org/docs/mod/
- Opis wszystkich modulow, dolaczonych standardowo do Apache`a,

http://httpd.apache.org/docs/misc/security_tips.html
- Nieco na temat bezpieczenstwa,

http://httpd.apache.org/docs/misc/FAQ.html
- Obszerne FAQ Apache`a

PHP
---

http://www.php.net/manual/pl/
- Obszerny podrecznik PHP,

http://pl2.php.net/FAQ.php
- PHP FAQ

MySQL
-----

http://www.mysql.com/documentation/index.html
- Potezny zbior informacji o MySQL

mod_ssl
-------

http://www.modssl.org/docs/
- Dokumentacja do mod_ssl


Z dedykacja dla Arweny.
edytor: pico, 04.08.2003
autor: asmo
http://www.moon-station.us/pgp.txt


Wyszukiwarka

Podobne podstrony:
apache ssl php fp 2 a6wmm6o7jch7nwo37ub2lqodr5ktjopce4tutyy a6wmm6o7jch7nwo37ub2lqodr5ktjopce4tutyy
apache ssl php fp 3 setl3meh3r4so27tbhz7zy5s7mjgoxrr5hjiaay setl3meh3r4so27tbhz7zy5s7mjgoxrr5hjiaay
Apache SSL PHP fp
Apache SSL PHP fp BWXW6EXHMYHS66TNQ5BAYEODMQSKYBA5JQA5CZI
apache ssl php fp 1 m3p53ugv7shuybs6xw6to4hcu5wuxx64jiivpdi m3p53ugv7shuybs6xw6to4hcu5wuxx64jiivpdi
Apache i skrypty PHP
Instalacja i konfiguracja Apache SSL
Konfiguracja serwera Apache, SSL w systemie GNU Linux
Linux Apache MySQL i PHP Zaawansowane programowanie lapzap
apache php ssl
Linux Web Solution php mySql Apache
Building Apache, MySQL, and PHP on Mac OS X
instalacja i konfiguracja apache 2 2 z php 5 x pod windows xp eioba
PHP MySQL i Apache dla kazdego Wydanie II pmsadk

więcej podobnych podstron