- 论坛徽章:
- 0
|
《Chrooting后台服务和系统程序指导》--转
有兴趣和有能力的朋友翻译一下,呵呵
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
2.1 Zatrzymanie Apache'a
2.2 Tworzenie użytkownika
2.3 Tworzenie katalogów
2.4 Biblioteki
2.5 Kopiowanie plików i bibliotek
2.6 Modyfikacja plików
2.7 Zabezpieczanie plików
2.8 Usuwanie plików i katalogów
2.9 Restart syslog'a, Start Apache'a
3.0 Test
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:80:80::/home/httpd:/bin/false
[root@linuks /]# joe /chroot/httpd/etc/group
Usuwamy wszystkie wpisy z wyjątkiem tego:
www: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ć.
-------------------------------------------------------------------------------- |
|