Apache i skrypty PHP.pdf

(92 KB) Pobierz
Microsoft Word - adminnew.doc
Referat
Temat: Apache i skrypty PHP
Wykonali:
Zbigniew Kiliański
Paweł Ścipień
Artur Zając
Prowadzący zajęcia:
mgr inż. Bogusław Juza
Data:
28-05-2002
Rok studiów:
IV
Rok akademicki:
2001/2002
1
387325029.001.png
Spis tresci:
1. Wstęp ..................................................................................................................................................................3
2. Metody uruchomienia programu napisanego w PHP ...........................................................................................4
2.1. Obsługa PHP w kompilowana w Apache statycznie, ..................................................................................4
2.2. Moduł PHP ładowany dynamicznie do Apache, .........................................................................................5
2.3. Skrypty PHP uruchamiane jako tzw. skrypty CGI, ......................................................................................7
2.4. Skrypty PHP uruchamiane z wykorzystaniem biblioteki "fastcgi", .............................................................9
3. Tryb safe mode ..................................................................................................................................................10
4. Analiza kodu suexec ..........................................................................................................................................12
5. Pomysły na rozbudowanie kodu suexec ............................................................................................................21
5.1. Modyfikacja suexec tak, aby uruchamiać pliki PHP z uprawnieniami właściciela pliku: .........................21
5.2. 4.2 Obsługa limitów setrlimit(). ...............................................................................................................22
6. Wnioski .............................................................................................................................................................28
7. Literatura ...........................................................................................................................................................29
2
1. Wstęp
PHP jest szeroko stosowanym językiem, który służy do tworzenia witryn z dynamicznie,
zmieniającymi się stronami WWW. Język ten umożliwia generowanie stron po stronie serwera i
przekazywanie efektów działania programów w postaci kodu HTML interpretowanego przez
przeglądarki po stronie klienta. Swoją popularność język ten zawdzięcza swojej prostocie,
bogatym zbiorze funkcji operujących na danych, dużym możliwością podłączenia się z bazami
danych i doskonalej dokumentacji dostępnej na firmowej stronie WWW.
Strony WWW udostępniane są przez demona HTTPD działającego na serwerze.
Najpopularniejszym demonem świadczącym tego typu usługi jest demon Apache dostępny na
stronie ( www.apache.org ). Demon ten odpowiedzialny jest za udostępnianie stron klientom, oraz
za uruchamianie skryptów generujących te strony.
Ze wzglądów bezpieczeństwa serwer Apache nie jest uruchamiany z uprawnieniami
administratora systemu. Użytkownik, z którego uprawnieniami działa serwer Apache zwykle nie
posiada własnych plików i nie ma możliwości zapisu do plików, które nie są "zapisywalne" przez
każdego użytkownika. Taka konfiguracja systemu poprawia znacznie bezpieczeństwo aplikacji
działających na serwerze, ponieważ nawet złamanie demona nie daje możliwości zapisu lub
odczytu plików na serwerze, które maja zabezpieczony dostęp dla użytkowników innych niż
właściciel główny lub grupowy.
Czasami jednak istnieje konieczność uruchomienia skryptów, które posiadają uprawnienia
większe lub inne niż użytkownik, który jest właścicielem procesów Apache'a, ponieważ należy
np. zabezpieczyć dostęp do odczytu niektórych plików np. z hasłami do bazy danych. Problem
ten rozwiązuje tzw. wrapper o nazwie suexec . Plik programu suexec ma ustawiony bit suid dla
właściciela pliku i właścicielem pliku jest administrator systemu. Uruchomienie skryptów
wymagających specjalnych uprawnień polega na wywołaniu wrappera suexec przez proces
Apache, a następnie uruchomieniu przez wrappera właściwego skryptu. Dostęp do plików innych
użytkowników może być także zabezpieczony przez wykorzystanie trybu „safe mode” i
właściwej konfiguracji serwera.
Istnieje kilka sposobów uruchamiania skryptów PHP. Każdy ze sposobów ma swoje zalety
i wady, z którymi trzeba się pogodzić i w zależności od potrzeby należy wybrać odpowiednią
3
metodę uruchamiania skryptów. Analiza problemów związanych z uruchomieniem skryptów
PHP zajmuje się ten referat.
2. Metody uruchomienia programu napisanego w PHP
Istnieje wiele sposobów uruchamiania skryptów PHP. Każdy z nich umożliwia uzyskanie
pewnych właściwości, zazwyczaj kosztem innych. Najważniejszymi metodami uruchamiania
skryptów PHP są:
2.1. Obsługa PHP w kompilowana w Apache statycznie,
Obsługę PHP można włączyć do kodów serwera Apache podczas kompilacji serwera (jest
to tzw. kompilacja statyczna). Zaleta takiej konfiguracji jest względnie bardzo duża szybkość
działania skryptów PHP. Serwer taki konfiguruje się w ten sposób, ze najpierw kompiluje się
PHP włączając informacje o ścieżce do kodów źródłowych Apache'a, a następnie kompiluje się
Apache'a.
Kompilacja statyczna Apache i PHP
$ gunzip -c apache_1.3.x.tar.gz | tar xf -
$ cd apache_1.3.x
$ ./configure
$ cd ..
$ gunzip -c php-4.2.x.tar.gz | tar xf -
$ cd php-4.2.x
$ ./configure --with-mysql --with-apache=../apache_1.3.x \
--enable-track-vars
$ make
$ make install
$ cd ../apache_1.3.x
$ ./configure --prefix=/www --activate-module=
src/modules/php4/libphp4.a
$ make
$ cd ../php-4.2.x
4
$ cp php.ini-dist /usr/local/lib/php.ini
Konfiguracja php polega na edycji pliku /usr/local/lib/php.ini.
Następnie należy powiązać rozszerzenie pliku ze skryptem (np. .php) z interpreterem oraz
(opcjonalnie) rozszerzenie pliku (np. .phps) z interpreterem, który koloruje i wyświetla kod PHP
w przeglądarce. W tym celu należy zmodyfikować plik konfiguracyjny Apache httpd.conf lub
srm.conf i dodać:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
W wyniku kompilacji Apache'a tworzony zostaje serwer, który posiada "zaszytą" w sobie
obsługę PHP. Korzystając z tej metody można uzyskać najszybsza z możliwych obsługę
skryptów PHP. Szybkość ta wynika z tego, że podczas wykonywania skryptów PHP nie trzeba
doładowywać bibliotek dynamicznych, ani tworzyć procesów, które uruchamiają się długo w
stosunku do całkowitego czasu działania skryptów.
Wadą tej metody jest bardzo mała elastyczność konfiguracji. Chcąc zmienić wersje
interpretera PHP musimy przekompilować cały serwer Apache. Wada także jest fakt, ze skrypty
PHP uruchamiane tą drogą muszą dziedziczyć uprawnienia procesu, który je wywołuje, a w tym
wypadku musi to być Apache. Nie ma więc możliwości zmiany uprawnień skryptów.
Ograniczenie to można ominąć uruchamiając oddzielny serwer Apache na innym porcie
przez innego użytkownika i przekierowując niektóre zapytania na ten serwer (wykorzystując
dyrektywę Redirect).
2.2. Moduł PHP ładowany dynamicznie do Apache,
Druga prezentowana metoda jest kompilacja obsługi PHP jako moduł dynamicznie
ładowany podczas uruchamiania skryptów PHP. Najpierw kompiluje się serwer Apache,
włączając opcje obsługi dynamicznie ładowanych modułów. W tym celu podczas
konfigurowania źródeł Apache'a należy dodać do polecenia ./configure opcje
--enable_module=so .
Następnie należy dokonać kompilacji modułu PHP z wykorzystaniem programu apxs,
który umożliwia automatyczną konfiguracje modułu w zależności od wykorzystywanej
konfiguracji Apache (np. opcja -DEAPI, gdy korzystamy z modułu modssl).
5
Zgłoś jeśli naruszono regulamin