Apache mod chroot: erinevus redaktsioonide vahel

Allikas: Kuutõrvaja
Mine navigeerimisribaleMine otsikasti
Jj (arutelu | kaastöö)
I0 (arutelu | kaastöö)
 
(ei näidata ühe teise kasutaja 8 vahepealset redaktsiooni)
1. rida: 1. rida:
===Sissejuhatus===
===Sissejuhatus===


chroot(2) changes the root directory of a process to a directory other than "/". It means the process is locked inside a virtual filesystem root. If you configure your chroot jail properly, Apache and its child processes (think CGI scripts) won't be able to access anything except the jail.


There are many documents about running programs inside a chroot jail. Some daemons (tinydns, dnscache, vsftpd) support it out of the box. For others (like Apache) you need to carefully build a "virtual root", containing every file the program may need.  
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


Creating this structure is great fun. Run the program, read the error message, copy the missing file, start over. Now think about upgrading - you have to keep your "virtual root" current - if there is a bug in libssl, you need to put a new version in two places. Scared enough? Read on.
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 buildimise tehnikast
Lähemalt sellest apache chroot raskemast buildimise tehnikast lingil


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


mod_chroot allows you to run Apache in a chroot jail with no additional files. The chroot() system call is performed at the end of startup procedure - when all libraries are loaded and log files open.
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===
===Install===
22. rida: 33. rida:
viimane kasutab FreeBSD jail süsteemi käske apache eraldamiseks.
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'''
Loome vajalikud kaustad. Kaust kus hakkab elutsema chrooditud apache on edaspidi '''/home/chroot'''
44. rida: 57. rida:
===Testimine===
===Testimine===


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


76. rida: 89. rida:


  Unable to open /etc/
  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===
===Lingid===


http://core.segfault.pl/~hobbit/mod_chroot/
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

Viimane redaktsioon: 22. veebruar 2009, kell 19:40

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