Erinevus lehekülje "Apache mod chroot" redaktsioonide vahel

Allikas: Kuutõrvaja
(Testimine)
(Install)
 
(ei näidata ühe teise kasutaja 22 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.
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.
+
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.
  
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.
+
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===
 
===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'''
  
emergesin mod_chroodu enne unmaskisin ta sest ta oli masked by keywords
+
FreeBSD omab nii mod_chroot kui ka mod_jail porti
 +
viimane kasutab FreeBSD jail süsteemi käske apache eraldamiseks.
  
siis laadisin mooduli ja tegin kaustad
+
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 /home/chroot/
 
  mkdir -p /home/chroot/var/www
 
  mkdir -p /home/chroot/var/www
 
  mkdir -p /home/chroot/var/run
 
  mkdir -p /home/chroot/var/run
mkdir -p /home/chroot/var/www/html
 
  
apache httpd.conf
 
  
  ChrootDir    /home/chroot/
+
Seejärel tuleb laadida mod_chroot moodul ja lisada httpd.conf'i read
 +
 
 +
  ChrootDir    '''/home/chroot/'''
 
  DocumentRoot /var/www/html
 
  DocumentRoot /var/www/html
 
  PidFile      /var/run/apache2.pid  
 
  PidFile      /var/run/apache2.pid  
  
Pid tekib tegelikult siis kausta /home/chroot/var/run/
+
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/
 
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
  
===Testimine===
+
mkdir -p /home/chroot/var/www/html
  
Virtualhostis on määratud kodukataloogiks
+
ja loome virtualhosti kuhu kirjutame kataloogiks
  
 
  /var/www/html
 
  /var/www/html
  
 
Tekitame test php faili kausta /home/chroot/var/www/html
 
Tekitame test php faili kausta /home/chroot/var/www/html
 
+
Sisuks järgnev php kood
Loome selleks test.php mille sisuks näiteks järgnev php kood
+
mis avab $path muutujas antud kausta '''/var/''' ja näitab selle sisu.
  
 
  $path = "/var/";
 
  $path = "/var/";
 
     $dir_handle = @opendir($path) or die("Unable to open $path");
 
     $dir_handle = @opendir($path) or die("Unable to open $path");
 
     while ($file = readdir($dir_handle)) {
 
     while ($file = readdir($dir_handle)) {
    if($file == "." || $file == ".." || $file == "index.php" )
+
        echo "$file";
        continue;
+
         echo "< br >";
         echo "<a href=\"$file\">$file</a><br />";
 
 
     }
 
     }
 
     closedir($dir_handle);
 
     closedir($dir_handle);
55. rida: 84. rida:
  
  
muutes  $path = "/etc/";
+
muutes  '''$path = "/etc/";'''
  
 
Vastuseks
 
Vastuseks
  
 
  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 22: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