Szerintem többen használtak már linux rendszert, ha más nem távolról parancssoros elérést láttak már. Ilyenkor a shellel rendelkező userek (hacsak jogok által nincsenek korlátozva) szépen szabadon mozoghatnak, és egy egy levédetlen dokumentumba bele is kukkanthatnak, ill. futtathatnak programokat rendszerünkön. A chroot környezet egy elzárt belső rendszert tesz. Úgy kell képzelni, hogy a mi különböző szervízeket futtató (web, mail, ftp) rendszerünkön belül egy másik alrendszert hozunk létre, amikbe beszorítjuk a felhasználóinkat (azaz a mi szervizeket futtato rendszerunket nem latjak, nem tudnak benne garázdálkodni), és itt kezeljük őket biztonságosan. A következő magyar leírás itt található erdetileg, de én biztonság kedvéért lementettem ide is.

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 felhasyná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:~# mkdir /chroot
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# wget -q http://ftp.us.debian.org/debian/pool/main/g/glibc/libc6_2.2.5-14_i386.deb

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:

osiris:/chroot/bin# ls
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:

osiris:~# useradd -c “Chrooted User” -d /chroot/home/test -m -k /etc/skel -p test -s /bin/bash test

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:

osiris:~# grep ^test: /etc/passwd
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.

osiris:~# grep ^test: /etc/passwd &>/chroot/etc/passwd

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:

osiris:~# cat /etc/security/chroot.conf
# /etc/security/chroot.conf
# format:
# username chroot_dir

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…

osiris:~# tail -1 /etc/pam.d/ssh
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# cp /dev/MAKEDEV dev/; cd dev/
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# mkdir pts

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:

linux:~$ ssh -l test osiris
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:~$ touch testfile
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 / License

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 byIstvan Sebestyen .

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.