Apache mod chroot
Sisukord
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
Enamikel juhtudel piisab samuti lihtsalt php open basedir paikaseadmiest