Apache chroot mini HOWTO

Autor: Grzegorz Ciep�ucha [email protected]
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�.