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.

Krok 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.

Krok 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!".

Apache został poprawnie zainstalowany

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

Krok 3. Instalacja PHP

PHP w wersji 5 i moduł PHP dla Apache można zainstalować poleceniem:

apt-get -y install php5 libapache2-mod-php5

Następnie należy zrestartować Apache:

service apache2 restart

Krok 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.

PHP został poprawnie zainstalowany

Jeśli strona się wyświetli to wszystko jest w porządku - serwer i PHP na nim zainstalowane działają.

Krok 5. MySQL i MariaDB dla PHP

Najpierw możemy wyświetlić jakie moduły dla PHP5 są obecnie dostępne:

apt-cache search php5

Następnie instalujemy te najbardziej potrzebne:

apt-get -y install php5-mysqlnd php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

Restartujemy Apache2:

service apache2 restart

Krok 6. Przyspieszamy PHP

Możliwe jest przyspieszenie działania PHP poprzez instalację APCu, pozwala on na cachowanie i optymalizację PHP:

apt-get install php5-apcu

Restartujemy Apache2:

service apache2 restart

Krok 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

Krok 7. 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 'Zawartosc /etc/hosts: <br>' . $var;
?>
chroot działa poprawnie

Na koniec ponownie przechodzimy do przeglądarki internetowej i otwieramy lokalizację http://localhost/chroot.php. Jeśli wyświetli się wyłącznie napis "Zawartosc /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.

↑ Skocz do góry

Opublikowano: 14 stycznia 2017. Autor: Bartosz Stefanicki.
Tagi: , , .

Dodaj komentarz

Bądź pierwszy!

avatar
wpDiscuz