Instalacja chroot w Apache
Chroot to skrót od change root. Jest to uniksowe polecenie uruchamiające program ze zmienionym katalogiem głównym (root).
W zmienionym środowisku będą działać też procesy podobne. Krótko mówiąc możemy uruchomić na istniejącym 64 bitowym Debianie, drugiego Debiana ale na przykład 32 bitowego. Nie będzie to jednak wirtualizacja systemu, ponieważ drugi system działa właśnie poprzez podmianę katalogu głównego / (root). Oprócz tego ważna jest tutaj izolacja i bezpieczeństwo, jeśli jest to potrzebne.
Chroot przyda się więc podczas testowania jakichś rozwiązań, ponieważ nawet przy "zepsuciu" drugiego systemu, te zmiany nie będą dotyczyć naszego podstawowego systemu. Dzieje się tak, bo uruchamiany program nie widzi nic, oprócz ścieżki poniżej poziomu nowego roota.
Tylko użytkownik root może wywołać polecenie chroot.
Instalacja Apache na Debianie
Na potrzeby tego artykułu zainstalowałem na czysto Linuksa Debian Jessie. Na początku zaktualizowałem repozytoria - pobrałem listę dostępnych pakietów i ich najnowsze wersje poleceniem
apt-get update
Następnie poleceniem
apt-get upgrade
zaktualizowałem zainstalowane już pakiety.
1. Instalacja MariaDB (zamiennik MySQL)
apt-get -y install mariadb-server mariadb-client
Zostaniemy poproszeni o zdefiniowanie hasła dla administratora MariaDB, można podać dowolne hasło.
2. Instalacja Apache
Apache jest dostępne dla Debiana w formie pakietu, można go zainstalować jednym poleceniem:
apt-get -y install apache2
W tej chwili można uruchomić przeglądarkę Mozilla Firefox i przejść pod adres http://localhost. W tym miejscu powinna pokazać się standardowa strona Apache informująca o poprawnej instalacji - "It works!".
Domyślnie Apache przechowuje pliki w lokalizacji
/var/www
a plik konfiguracyjny znajduje się w lokalizacji
/etc/apache2/apache2.conf
Dodatkowe ustawienia przechowywane są w katalogu
/etc/apache2
Między innymi
/etc/apache2/mods-enabled (moduły Apache)
/etc/apache2/sites-enabled (dla wirtualnych hostów)
/etc/apache2/conf-enabled
3. Instalacja PHP
PHP w wersji 7 i moduł PHP dla Apache można zainstalować poleceniem:
apt-get -y install php7 libapache2-mod-php7
Następnie należy zrestartować Apache:
service apache2 restart
4. Testowanie PHP
Możemy szybko sprawdzić czy PHP działa poprawnie tworząc plik z tym rozszerzeniem - na przykład info.php:
nano /var/ww/html/info.php
W tym pliku można umieścić na przykład funkcję, która wyświetla konfigurację serwera:
<?php phpinfo(); ?>
Następnie w przeglądarce Mozilla Firefox (jest to po prostu domyślna przeglądarka internetowa na Debianie) przechodzimy pod adres http://localhost/info.php.
Jeśli strona się wyświetli to wszystko jest w porządku - serwer i PHP na nim zainstalowane działają.
5. MySQL i MariaDB dla PHP
Najpierw możemy wyświetlić jakie moduły dla PHP7 są obecnie dostępne:
apt-cache search php7
Następnie instalujemy te najbardziej potrzebne:
apt-get -y install php7-mysqlnd php7-curl php7-gd php7-intl php-pear php7-imagick php7-imap php7-mcrypt php7-memcache php7-pspell php7-recode php7-snmp php7-sqlite php7-tidy php7-xmlrpc php7-xsl
Restartujemy Apache2:
service apache2 restart
6. Przyspieszamy PHP
Możliwe jest przyspieszenie działania PHP poprzez instalację APCu, pozwala on na cachowanie i optymalizację PHP:
apt-get install php7-apcu
Restartujemy Apache2:
service apache2 restart
7. Moduł mod_unixd
Przechodzimy do wykorzystania chroot. Moduł mod_unixd umożliwia funkcję chroot w Apache i jest jego częścią więc nie trzeba go dodatkowo instalować.
Katalog
/var/www
zostanie wykorzystany do chroot, będzie on zawierał pliki, które będą miały ograniczony dostęp - taki jest nasz cel. Apache w Debianie wykorzystuje plik PID:
/var/run/apche2.pid
Kiedy Apache jest zchrootowane do
/var/www
to
/var/run/apache2.pid
kieruje nas do
/var/www/run/apache2.pid
Tak więc tworzymy tą lokalizację:
mkdir -p /var/www/var/run
chown -R root:root /var/www/var/run
Teraz poinformujemy Apache, że chcemy korzystać z var/www jako naszej chrootowanej lokalizacji. Otwieramy plik apache2.conf:
nano /etc/apache2/apache2.conf
Musimy wyszukać fragment "PidFile". Po otwarciu edytora Nano najlepiej wyszukać tą frazę poprzez skrót Ctrl+W.
Bezpośrednio pod fragmentem
PidFile ${APACHE_PID_FILE}
umieszamy:
ChrootDir /var/www
Teraz należy poinformować vhosts, że dokument root został zmieniony. Zatrzymujemy Apache2, potem tworzymy symlink z lokalizacji
/var/run/apache2.pid
do lokalizacji
/var/www/var/run/run/apache2.pid
i uruchamiamy Apache2 ponownie:
service apache2 stop
ln -s /var/www/var/run/apache2.pid /var/run/apache2.pid
service apache2 start
8. Sprawdzenie czy wszystko działa
Wszystko już zrobiliśmy. Aby sprawdzić, czy chroot faktycznie już działa na serwerze Apache można utworzyć testowy plik chroot.php:
nano /var/www/html/chroot.php
Umieszczamy w nim:
<?php
$var = file_get_contents('/etc/hosts');
echo 'Zawartość /etc/hosts: <br>' . $var;
?>
Na koniec ponownie przechodzimy do przeglądarki internetowej i otwieramy lokalizację http://localhost/chroot.php. Jeśli wyświetli się wyłącznie napis "Zawartość /etc/hosts:" i nic więcej to wszystko działa poprawnie. Skrypt nie ma już teraz po prostu dostępu między innymi do lokalizacji etc/hosts.