linuxpub.pl
Powrót Powrót 
 
Wyślij znajomemu Drukuj

Apache chroot
mini HOWTO

Autor: Grzegorz Ciepłucha
grzegorz.cieplucha@up.gov.pl
v 1.1, 27 Październik 2000



Dokument opisuje w jak najprostszy sposób uruchomić serwer WWW Apache w osobnym środowisku. Rozwiązanie to zwiększa bezpieczeństwo naszego systemu. Opis oparty na przykładzie standardowej dystrybucji Redhat 6.2

1.System
2.Instalacja

4.Uwagi



1. System

Standardowa instalacja dystrybucji RedHat 6.2, Jądro 2.2.14, Apache 1.3.12.

2. Instalacja

2.1 Zatrzymanie Apache'a
Jeżeli mamy uruchomiony serwer to zatrzymujey go:

 
[root@linuks /]# /etc/rc.d/init.d/httpd stop 
2.2 Tworzenie użytkownika
Tworzymy nowego użytkownika 'www':
 
[root@linuks /]# useradd -c "Apache Server" -u 80 -s /bin/false -r -d 
/home/httpd www 2>/dev/null ||: 
2.3 Tworzenie katalogów
Tworzymy nową strukturę katalogów w której będzie działał nasz Apache:
 
[root@linuks /]# mkdir /chroot 
[root@linuks /]# mkdir -p /chroot/httpd/dev 
[root@linuks /]# mkdir -p /chroot/httpd/lib 
[root@linuks /]# mkdir -p /chroot/httpd/etc 
[root@linuks /]# mkdir -p /chroot/httpd/usr/sbin 
[root@linuks /]# mkdir -p /chroot/httpd/var/run 
[root@linuks /]# mkdir -p /chroot/httpd/var/lock 
[root@linuks /]# mkdir -p /chroot/httpd/var/log/httpd 
[root@linuks /]# mkdir -p /chroot/httpd/home/httpd 
Nadajemy prawa do katalogu
 
[root@linuks /]# chmod 750 /chroot/httpd/var/log/httpd 
2.4 Biblioteki
Sprawdzamy z jakich bibliotek korzysta Apache:
[root@linuks /]# ldd /usr/sbin/httpd 
Powinieneś otrzymać podobną listę do tej:
 
 libm.so.6 => /lib/libm.so.6 (0x4001b000) 
 libcrypt.so.1 => /lib/libcrypt.so.1 (0x4003a000) 
 libdb.so.3 => /usr/lib/libdb.so.3 (0x40067000) 
 libdl.so.2 => /lib/libdl.so.2 (0x40121000) 
 libc.so.6 => /lib/libc.so.6 (0x40124000) 
 /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) 
2.5 Kopiowanie plików i bibliotek
Kopiujemy wszystkie wymagane pliki przez Apache'a i biblioteki do katalogów które przed chwilą utworzyliśmy:
 
[root@linuks /]# cp -r /etc/httpd /chroot/httpd/etc/ 
[root@linuks /]# cp -r /home/httpd/cgi-bin /chroot/httpd/home/httpd 
[root@linuks /]# cp -r /home/httpd/html /chroot/httpd/home/httpd 
[root@linuks /]# cp -r /home/httpd/icons /chroot/httpd/home/httpd 
[root@linuks /]# cp /usr/sbin/httpd /chroot/httpd/usr/sbin/ 
[root@linuks /]# cp /lib/libm.so.6 /chroot/httpd/lib/ 
[root@linuks /]# cp /lib/libcrypt.so.1 /chroot/httpd/lib/ 
[root@linuks /]# cp /lib/libdb.so.3 /chroot/httpd/lib/ 
[root@linuks /]# cp /lib/libdl.so.2 /chroot/httpd/lib/ 
[root@linuks /]# cp /lib/libc.so.6 /chroot/httpd/lib/ 
[root@linuks /]# cp /lib/ld-linux.so.2 /chroot/httpd/lib/ 
[root@linuks /]# cp /lib/libnss_compat* /chroot/httpd/lib/ 
[root@linuks /]# cp /lib/libnss_dns* /chroot/httpd/lib/ 
[root@linuks /]# cp /lib/libnss_files* /chroot/httpd/lib/ 
[root@linuks /]# cp /etc/passwd /chroot/httpd/etc 
[root@linuks /]# cp /etc/group /chroot/httpd/etc 
[root@linuks /]# cp /etc/mime.types /chroot/httpd/etc 
[root@linuks /]# cp /etc/resolv.conf /chroot/httpd/etc 
[root@linuks /]# cp /etc/hosts /chroot/httpd/etc 
[root@linuks /]# cp /etc/nsswitch.conf /chroot/httpd/etc 
[root@linuks /]# cp /etc/localtime /chroot/httpd/etc 
Tworzymy specjalny plik i nadajemu mu odpowiednie prawa:
 
[root@linuks /]# mknod /chroot/httpd/dev/null c 1 3 
[root@linuks /]# chmod 666 /chroot/httpd/dev/null 
2.6 Modyfikacja plików
Modyfikujemy pliki (możesz użyć swojego ulubionego edytora vi, joe, mcedit ...):
 
[root@linuks /]# joe /chroot/httpd/etc/httpd/conf/httpd.conf 
Odszukujemy linie:
User nobody
Group nobody

i zmieniamy na:
User www
Group www

 
[root@linuks /]# joe /chroot/httpd/etc/passwd 
Usuwamy wszystkie wpisy z wyjątkiem tego:
www:x:80:80::/home/httpd:/bin/false
 
[root@linuks /]# joe /chroot/httpd/etc/group 
Usuwamy wszystkie wpisy z wyjątkiem tego:
www:x:80:
Musimy teraz poinformować demona syslogd o poczynionych zmianach:
 
[root@linuks /]# joe /etc/rc.d/init.d/syslog 
Odszukujemy linię:
daemon syslogd -m 0

i zmieniamy ją na:
daemon syslogd -m 0 -a /chroot/httpd/dev/log

 
[root@linuks /]# joe /etc/logrotate.d/apache
Ustawiamy nowe ścieżki do logów:
 
/chroot/httpd/var/log/httpd/access_log { 
 missingok 
 postrotate 
 /bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || 
true 
 endscript 
} 
 
/chroot/httpd/var/log/httpd/agent_log { 
 missingok 
 postrotate 
 /bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || 
true 
 endscript 
} 
 
/chroot/httpd/var/log/httpd/error_log { 
 missingok 
 postrotate 
 /bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || 
true 
 endscript 
} 
 
/chroot/httpd/var/log/httpd/referer_log { 
 missingok 
 postrotate 
 /bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || 
true 
 endscript 
} 

Modyfikujemy skrypt uruchamiający Apache'a:
 
[root@linuks /]# joe /etc/rc.d/init.d/httpd 
Odszukujemy linię:
daemon httpd

i zmieniamy ją na:
/usr/sbin/chroot /chroot/httpd /usr/sbin/httpd

Szukamy również linii:
rm -f /var/run/httpd.pid

i zmieniamy ją na:
rm -f /chroot/httpd/var/run/httpd.pid

2.7 Zabezpieczanie plików
Zabezpieczamy pliki konfiguracyjne:
 
[root@linuks /]# chattr +i /chroot/httpd/etc/passwd 
[root@linuks /]# chattr +i /chroot/httpd/etc/group 
[root@linuks /]# chattr +i /chroot/httpd/etc/resolv.conf 
[root@linuks /]# chattr +i /chroot/httpd/etc/hosts 
[root@linuks /]# chattr +i /chroot/httpd/etc/nsswitch.conf 
[root@linuks /]# chattr +i /chroot/httpd/etc/httpd/conf/httpd.conf 
2.8 Usuwanie plików i katalogów
Usuwamy niepotrzebne już pliki i katalogi:
 
[root@linuks /]# rm -rf /var/log/httpd/ 
[root@linuks /]# rm -rf /etc/httpd 
[root@linuks /]# rm -rf /home/httpd 
[root@linuks /]# rm -f /usr/sbin/httpd 
2.9 Restart syslog'a, Start Apache'a
Na koniec restartujemy syslog'a i uruchamiamy Apache'a, i sprawdzamy czy działa już we własnym środowisku:
 
[root@linuks /]# /etc/rc.d/init.d/syslog restart 
[root@linuks /]# /etc/rc.d/init.d/httpd start 

3.0 Test
Sprawdzamy listę procesów:
 
[root@linuks /]# ps ax | grep httpd
 
	23993 ? S 0:01 httpd 
	23994 ? S 0:01 httpd 
	23995 ? S 0:01 httpd 
	23996 ? S 0:00 httpd 
Wydajemy polecenie:
 
[root@linuks /]# ls -la /proc/numer_procesu/root/ 
np:
 
[root@linuks /]# ls -la /proc/23993/root/ 
Jeżeli polecenie zwróci Ci taką listę:
 
dev 
etc 
home 
lib 
usr 
var 
to znaczy, że wszystko działa !!! I Apache działa już we własnym środowisku.

4. Uwagi

Jeżeli wykonasz wszystkie czynności opisane w tym dokumencie a Apache nie bedzię chciał się uruchomić, dokładnie czytaj komunikaty które będzie wyświetlał podczas startu. Z reguły Apache podaje jakich plików mu brakuje. Wystarczy wtedy odszukać plik którego potrzebuje i skopiować go do identycznego katalogu tylko że znajdującego się już w katalogu /chroot. Na przykład, jeżeli masz skompilowanego Apache'a z obslugą modułu mod_perl musisz skopiować wszystkie pliki wymagane przez ten moduł do odpowiednich katalogów w /chroot (tj. "/usr/lib/perl5" do katalogu "/chroot/httpd/usr/lib/perl5/", nie zapomij o stworzeniu wcześniej katalogu "/chroot/httpd/usr/lib/perl5"). Powyższy opis można wykorzystać również w innych dystrybucjach, należy tylko pamiętać, że dystrybucje mogą mieć opisywane pliki w innych katalogach, część plików może inaczej się nazywać.

 


Do góry Do góry 
 
Powrót Powrót 
Wyślij znajomemu Drukuj
Dodaj komentarz
Temat: *
Treść: *
Podpis: *
Adres e-mail: Nie publikuj adresu na stronie
Powiadom mnie
jeżeli ktoś doda komentarz:
(Musisz podać adres emial aby skorzytsać z tej opcji)
 
* - pola obowiązkowe

Komentarze powinny być zgodne ogólnie przyjętymi normami moralnymi oraz zasadami netykiety.
Zabronione jest umieszczanie obraźliwych, niecenzuralnych wypowiedzi. Niedozwolone jest również
wykorzystywanie serwisu do celów komercyjnych bez wiedzy i zgody administratora.
Komentarze które naruszą powyższe warunki będą usuwane.

Za treści pozostawione przez osoby odwiedzające nasze serwisy, zespół linuxpub.pl nie ponosi odpowiedzialności.
 
Wiadomości | Archiwalne wiadomości | Faq | Felietony | Podstawy | Konfiguracja | Administracja | Programowanie | Licencja GNU/GPL
2000 - 2008 Copyright (c) linuxpub.pl, epub.pl | Zgłoś błąd