Apache mod chroot

Allikas: Kuutõrvaja

Sissejuhatus

Chroot muudab protsessi juur failisüsteemi mingisse kindlasse kausta. Ehk teisitiöeldult protsess on lukustatud kindlasse kausta. Antud näites apache ja tema child protsessid pole võimelised pääsema kuhugi väljapoole chrootu.

On üsnagi palju dokumente kuidas programme käivitada chroot keskkonnas. Mõned teenused (tinydns, dnscache, vsftpd) sisaldavad juba enda sees koodi ,et teostada chrootimist. Kuid päris paljud (näiteks apache) vajavad eraldi loodud "virtuaalset juurkataloogi" mis peab sisaldama kõiki faile mida programm vajab

Sellist struktuuri luua on suhteliselt keerukas. Käivita programm, loe veateateid, kopeeri puuduvaid faile, käivita taaskord. Kui mõelda veel sellise süsteemi uuendamise peale - näiteks kui on turvaviga libssis ning pead uue versiooni kopeerima kahte erinevasse kohta.

Lähemalt sellest apache chroot raskemast buildimise tehnikast lingil

http://www.faqs.org/docs/securing/chap29sec254.html

mod_chroot lihtsustab väga tugevalt apache käivitamist chroot keskkonnas. Nimelt chroot() käsk käivitatakse apache startimise protsessi lõpus. Kui librad on laaditud ning log failid avatud. Seetõttu ei pea mod_chrooti kasutades mingeid lisafaile kuhugi kindlasse kausta paigutada vaid saab hõlpsasti installitud apache chrootida. Järgnevalt sellest lähemalt.

Install

Gentoos hetkel portages (Thu Oct 25 12:36:38 EEST 2007) oli mod_chroot masked by keywords ning tuli umaskida enne käsku emerge mod_chroot

FreeBSD omab nii mod_chroot kui ka mod_jail porti viimane kasutab FreeBSD jail süsteemi käske apache eraldamiseks.

Mina kasutasin mod_chroot moodulit lisaks koos mpm-itk toega ning soovitaks maksimaalse turvalisuse saavutamiseks sellist kombinatsiooni. (mod_chroot koos MPM itk toega töötab kuni apache versioonini 2.2.9 Alates apache versioonist 2.2.10 on mod_chroot juba apache sisse ehitatud aga seda ainult worker, prefork ja peruser MPM'dega. Kuna MPM-itk sisse pole mod_chroot'u ehitatud siis antud meetodit (MPM-itk + mod_chroot) alates apache versioonist 2.2.10 kasutada ei saa.)

Loome vajalikud kaustad. Kaust kus hakkab elutsema chrooditud apache on edaspidi /home/chroot

mkdir /home/chroot/
mkdir -p /home/chroot/var/www
mkdir -p /home/chroot/var/run


Seejärel tuleb laadida mod_chroot moodul ja lisada httpd.conf'i read

ChrootDir    /home/chroot/
DocumentRoot /var/www/html
PidFile      /var/run/apache2.pid 

Pid tekib ka chroot sisse seega kui apache näeb seda kui kausta /var/run/ Siis reaalselt süsteemipoolt on selleks /home/chroot/var/run

Ning süsteemipoolt documentroot täisrada on /home/chroot/var/www/

Testimine

Testimiseks proovime php skriptiga liikuda chroodust välja. Tekitame kausta /home/chroot/var/www/html

mkdir -p /home/chroot/var/www/html

ja loome virtualhosti kuhu kirjutame kataloogiks

/var/www/html

Tekitame test php faili kausta /home/chroot/var/www/html Sisuks järgnev php kood mis avab $path muutujas antud kausta /var/ ja näitab selle sisu.

$path = "/var/";
   $dir_handle = @opendir($path) or die("Unable to open $path");
   while ($file = readdir($dir_handle)) {
       echo "$file";
       echo "< br >";
   }
   closedir($dir_handle);

tulemus seda brauseris käivitades oleks

www
run


muutes $path = "/etc/";

Vastuseks

Unable to open /etc/

Muidugi pole mod_chroot mõeldud vaid php chrootimiseks. Selleks on juba php's endas hulga vahendeid. Mod_chroot on mõeldud kõigi apache moodulite vahele üheks turvakihiks (näit mod_perl, mod_ruby jpt)

Lingid

http://core.segfault.pl/~hobbit/mod_chroot/

Apache Chrootimist võimaldab ka mod_security

http://www.modsecurity.org/documentation/modsecurity-apache/2.1.3/modsecurity2-apache-reference.html#N1034D

Enamikel juhtudel piisab samuti lihtsalt php open basedir paikaseadmiest

http://ee.php.net/features.safe-mode