Instalacja chroot w Apache

Data aktualizacji: 22.04.2024r. Autor: Bartosz Stefanicki.

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.

Kategorie: Linux. Tagi: #debian, #apache, #chroot. Źródło obrazków: Pixabay, Font awesome.

Zobacz także

3 komentarzy