![]() |
| By Oscar Laycock Trebalo mi je vremena da shvatim šta chroot radi. Evo primera. Prvo koristim ldd da nadjem zajedničke biblioteke neophodne za moj 'bash'.
libtermcap.so.2 => /lib/libtermcap.so.2
libdl.so.2 => /lib/libdl.so.2 libc.so.6 => /lib/libc.so.6 /lib/ld-linux.so.2 => /lib/ld-linux.so.2 Onda kreiram direktorijum i kopiram fajlove.
myroot/bin:
ls bash myroot/lib: ld-linux.so.2 libc.so.6 libtermcap.so.2 libdl.so.2 i onda:
chroot myroot /bin/bash
cd / ls Pazi: bash će verovatno reći "nema ime!", pošto nema /etc/passwd fajla u chroot structuri. U Kernelu Chroot program je deo GNU školjke paketa. Program je mali, zove C funkciju chroot() i izvršava drugi argument uz pomoć C funkcije execvp(). Ovde koristi PATH ili "/bin:/usr/bin" ako ovo već nije postavljeno. Chroot biblioteka funkcija je definisana u unistd.h:
/* Make PATH be the root directory (the starting point for absolute paths).
This call is restricted to the super-user. */ extern int chroot (__const char *__path) Unutar kernela je funkcija "sys_chroot". Ona proverava CAP_SYS_CHROOT. Onda menja "current->fs" globalnu strukturu "rootmnt" i "root" za "dentry". Ostali kod koristi ovo da nadje root direktorijum. Pogledaj kernel kode u fs/open.c i fs/namespace.c (ime funkcije je 'set_fs_root'). Chroot u Linuksu iz početka Chroot je deo projekta Linuks iz početka . Projekat ti omogućava da napraviš tvoj sopstveni Linuks system. Njihova Chroot komanda je malo komlikovanija.
chroot "$LFS" /tools/bin/env -i \
HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
/tools/bin/bash --login +h
Opcija -i ti daje praznu sredinu. Bash kriptovanje je isključeno. Videćeš kako se chroot uklapa u ceo Linuks iz početka projekat. Pošto smo uradili predhodno pomenuto, radimo sledeće: 1. Napravi nove particije i osnovne direktorijume (/lib, /bin, /usr, itd.) 2. Napravi novi "toolchain" u particiji, da sadrži binutils, gcc kompajler, i veliku glibc (C biblioteku). 3. Ponovo kreiraj gcc, sa opcijom da se koristi nova glibc i promeni gcc specifikaciju da se koristi nova glibc dinamička biblioteka. (obično se radi "configure", "make", "make install" kada se pravi progam iz izvornog koda. Probaj "gcc -dumpspecs" da vidiš misterioznu specifikaciju.) 4. Ponovo kreiraj binutils koristeći '--prefix' 5. Kreiraj dosta alata kao bash, core/file utils, make, perl, itd. 6. CHROOT na novu particiju! 7. ponovo kreiraj glibc. 8. ponovo kreiraj binutils i gcc, promeni direktorijum da bude relativan na chroot top direktorijum. Kreiraj sve alate ponovo. 9. Kreiraj kernel. 10. Dodaj novu particiju i kernel na bootloader. Kao što vidiš kreirao si alate tri puta. Na svu sreću postoji drugi Linuks iz početka projekat koji ovo automatizuje. Brzi Kompajler Ja trenutno pravim moj Linuks na starom laptopu koji sam dobio od prijatelja. Počeo sam sa kernelom i malim programima, kao fdisk, ls, itd. Onda sam kopirao preko Damn Small Linux (DSL), flopi po flopi, pre nego što sam postavio ppp link sa serijalnim kablom. DSL nema kompajler. Kompajler je u konfliktu sa DSLom (stari kernel verzija 2.4), pa sam kreirao chroot direktorijum dovoljan da kreiram program "zdravo svete". Dodao sam sledeće fajlove. (verujem da "crt" znači "C run-time", "begin" fajlovi su dodati na početak programa (?). "s" na početku ili kraju obično znači zajednički deljene biblioteke.
myroot/usr
|
+---include:
| a.out.h ... xlocale.h
|
+---lib:
| Mcrt1.o Scrt1.o crt1.o crti.o crtn.o gcrt1.o
|
+---local
|
+---bin:
| gcc
|
+---i686-pc-linux-gnu
| |
| +---bin:
| | as ld
| |
| +---lib
| +---ldscripts:
| elf_i386.x ...
|
+---lib:
| | libgcc_s.so libgcc_s.so.1 libgmp.so.3 libmpfr.so.1
| |
| |---gcc
| +---i686-pc-linux-gnu
| +---4.3.2:
| crtbegin.o crtbeginS.o ...
| libgcc.a ...
|
+---libexec
+---gcc
+---i686-pc-linux-gnu
+---4.3.2:
cc1 cc1plus collect2
Najočiglednija primena chroot ja pokrenuti Web ili FTP server kao chroot u direktorijumima kao /home/www ili /home/ftp. Ovo pravi odličnu sigurnost, pošto ako neko provali biće zaglavljen u fajl sistemu koji ima malo ili nema uopšte programa i nema šanse da se izadje odatle. Ovo se takodje zove 'chroot zatvor'. Pazi, dozvoliti nekome da se uloguje kao root nije sigurno. Root moze da izadje iz chroot zatvora. Vidi linkove sa više informacija. http://kerneltrap.org/Linux/Abusing_chroot http://unixwiz.net/techtips/chroot-practices.html http://www.bpfh.net/simes/computing/chroot-break.html -- Ben Okopnik Napomena prevodioca: Ја sam 100% amater u prevođenju i veoma se dvoumim kada treba da prevedem neke reči karakteristične za oblast računara. Biće mi drago ako ima onih koji su veštiji u prevođenju i voljni da razvijaju ovaj sajt. | |||