Elöszöris, el kell döntened, hogy hol akarod a chroot körnzezetedet telepíteni, mivel késöbb egy kisebb rendszert fogsz telepiteni bele. Tehát az elsö lépés, hogy csinálsz egy ilyen könyvtárat, és ezzel elkezded a chroot környezet telepítésének elsö lépéseit. Köztudott, hogy a chroot a felhasználónak a root könyvtárát egy külön könyvtárba rakja. A többi külsö forrás a chrootolt felhasználó javára nem elérhetö. Talán a legfontosabb dolog az új környezetben az, hogy ne legyen superuser (root, uid=û). Ha a chrootol felhasználó root jogot szerez, akkor nagyon könnyü ebböl a környezetböl kitörni. Emiatt is csináljuk ezt a fajta korlátolt környezetet, hogy nehezítsük meg a támadó dolgát. És mivel a környezeten belül nincs root, a támadó nem is tudja megszerezni a root jogot. Na, elég a dumából, vágjunk neki:
Akkor létrehozzuk a chroot-nak kijelölt könyvtárat (ebben ay esetben /chroot), ahol az új környezetet telepítjük.
osiris:~# cd /chroot
osiris:/chroot#
Itt két lehetöségünk van. Vagy forgatnod kell a követelt programokat, ezt nevezzuk a “statikai” forgatásnak, vagy pedig letöltöd a debian csomagokat és dpkg-deb -el felrakod (ezt a módszert használom én). A második eljárás a dinamikus:
osiris:/chroot# ls -l
-rw-rw-r– 1 root root 3348878 Aug 16 18:02 libc6_2.2.5-14_i386.deb
osiris:/chroot# dpkg-deb -x libc6_2.2.5-14_i386.deb .
osiris:/chroot# ls
etc lib libc6_2.2.5-14_i386.deb sbin usr
Na! Ezennel már telepítettük és integráltuk a libc6 csomagot a kis környezetünkbe, mindjárt megnézzük még milyen programokat kell telepítsünk, hogy a chroot környezetünk müködöképes legyen. Most akkor ugyanezt az eljárást megcsináljuk _legalább_ a következö csomagokkal: (ldso, libncurses5, bash, base-files és fileutils). Miután kicsomagoltuk és egyben telepítettük a csomagokat a dpkg-deb programmal törölhetjük a letöltött csomagokat. Ugy hiszem most már telepítve vannak a csomagok, a base-file nevezetü csomag létrehoz a rendszerhez tartozó fontos fileokat, egyben az alapvetö könyvtárakat is létrehozza. Nézzük meg, hogy a környezetünkben a bin/ könyvtárban milyen fileok találhatóak:
bash chmod cp df ln mkdir mv rm sh touch
chgrp chown dd dir ls mknod rbash rmdir sync vdir
A következö lépés, hogy telepítsük a libpam-chroot csomagot a szabványos (!) rendszerre. Debian felhasználóknak egy apt-get install libpam-chroot parancs végrehajtja a kívánt feladatot. A telepítés után megtalálható a libpam-chroot dokumentaciója a következö helyen: (/usr/share/doc/libpam-chroot/examples). De elmondom mi a tennivaló ezzel a libpam-chroottal. Elöszöris hozzunk létre egy “test” nevezetü felhasználót:
Namost ki kell javítsuk a /etc/passwd-ben lévö bejegyzést az épp létrehozott felhasználónkról. A home-dir sort átírjuk “/chroot/home/test”-röl “/home/test” -re, mivel majd a pam modulok hozzáadják késöbb a chroot környezet könyvtárát. Tehát a `grep ^test: /etc/passwd` kimenete valahogy így kéne kinézzen:
test:x:1041:100:Chrooted User:/home/test:/bin/bash
Mivel a chroot környezeten belül is kell szerepeljen a passwd file, mert anélkül nem leszünk képesek bejelentkezni ssh-n keresztul, iranyítsuk át a fent lévö kimenetet abba a fileba.
Ezután editáljuk a /etc/security/chroot.conf nevezetü filet, mint ahogy a doksi azt leírja. A chroot.conf file a mi esetünkben így kéne kinézzen:
# /etc/security/chroot.conf
# format:
# username chroot_dir
test /chroot
Aktiváljuk az újonnan telepített pam modult, tegyünk egy új sort a /etc/pam.d/[operáció] fileba. Az operáció annyit jelent, hogy milyen szolgálatot veszünk igénybe, amikor a chrootolt felhasználónk bejelentkezik, ez lehet ssh, login, su, stb… Tehát ha a felhasználó ssh-n keresztül kíván bejelentkezni, akkor a /etc/pam.d/ssh fileba írjuk a sort, ha lokálisan akar bejelentkezni, akkor a /etc/pam.d/login-ba, és így tovább…
session required pam_chroot.so debug
Most már a felhasználó képes arra, hogy bejelentkezzen vagy login-on keresztül, vagy `su - test` paranccsal (feltéve, hogy a /etc/pam.d/su-hoz hozzáadtuk az új sort). Ha viszont ssh-n keresztül akar bejelentkezni majd a chrootolt felhasználó, akkor még figyelembe kell vennünk még pár dolgot. Az ssh felhasználót a /dev/ptmx eszköz file kezeli, nade nekünk még nincs is egyetlen eszköz fileunk a /dev könyvtárban. Ez a /dev/ptmx nevezetü file követel egy “devpts” nevezetü filerendszert a chrootolt környezeten belülre mountolva. Mivel nincs eszközünk a /dev könyvtárban, létre kell hoznunk azokat az eszközöket. Másoljuk át a /dev/MAKEDEV nevezetü programot a chrootolt környezetben lévö eszközkönyvtárba és csináljuk meg az eszközöket:
osiris:/chroot/dev# ./MAKEDEV generic
Most egy kis türelem kell, amíg a program generálja æz eszközleíró fileokat. De még nem végeztünk, hisz az ssh a session-jeit a /dev/pts könyvtár alá fogja pakolni, emiatt létre kell hozzuk æzt a könyvtárat és bemountoljuk a “devpts” nevezetü filerendszert:
osiris:/chroot/dev# mount -t devpts devpts /chroot/dev/pts
Figyelem! Ha ssh-val szeretnénk bejutni a chroot környezetbe, akkor nézzük meg az ssh verziót, amit futtatni akarunk, mivel sshnak root jogokkal kell futnia, anélkül nem lesz képes bezárni a felhasználót a chroot-ba. A legújabb ssh démonoknak (3.4 vagy újabb) van egy új opció implementálva, ami annyit tesz, hogy az ssh sessionek nem root jogokkal, hanem egy sshd nevezetü felhasználóként futnak. Ezt ki lehet kapcsolni, ha rakunk az ssh démon konfigurációs file-jába egy “UsePrivilegeSeparation no” címü opciót, másképp nem lesz lehetséges bejelentkezni a chrootolt felhasználónak ssh-n keresztül. Ezen hibaüzenet tanuja lesz:
test@osiris’s password:
Connection to osiris closed by remote host.
Connection to osiris closed.
Ha megadtuk az opciót az ssh démonnak és újraindítottuk, akkor már képes lesz bezárni a felhasználót a chroot környezetbe. Majd kapunk egy bash promptot a környezetre való bejelentkezés után, és máris tesztelhetjük, hogy milyen parancsok futnak le (ha a fileutils csomagot felraktuk), mint példáúl ls, cd, rm, mv, stb…
test@osiris:~$ ls
testfile
Most már hozzá lehet adni a müködöképes chroothoz további csomagokat, a fent említett módszerrel.
Copyright © 2002 Istvan Sebestyen.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts and with no Back-Cover Texts. A Copy of the license is available at http://www.gnu.org/copyleft/fdl.html
This Document/Tutorial was written by Istvan Sebestyen-Teleki
Külön köszönet cafuego, rahul és tarzeau-nak a #debian csatornán az Openprojects IRC hálózaton (OPN) és mhp-nak.


(4 votes, average: 3.75 out of 5)