Stone Sour, Through The Glass
http://www.youtube.com/watch?v=GIzDsGyxsQM&ob=av2e I'm looking at you through the glass Don't know how much time has passed Oh God, it feels like forever But no one ever tells you that forever Feels...
Home Page
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
Standardowa instalacja dystrybucji RedHat 6.2, Jądro 2.2.14, Apache 1.3.12.
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
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
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
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
[root@linuks /]# /etc/rc.d/init.d/syslog restart [root@linuks /]# /etc/rc.d/init.d/httpd start
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.
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ć.