: 24 kwietnia 2007, 20:06
W sumie racja ale jestem początkujący więc...
Polski portal użytkowników dystrybucji Debian GNU/Linux, dyskusje, artykuły, nowości, blog, porady, pomoc.
https://www.debian.pl/
Napisz jak rezultatyAdam Słodowy przedstawia: konta shell w środowisku chroot, czyli zrób to sam.N. Podziękowania
- Nieco teorii.
Wyobraźmy sobie pudełko. Takie zwykłe, kartonowe. Takie pudełko jest bardzo
pożyteczne. Możemy w nim trzymać różne nasze skarby. Oczywiście wiadomo -
im większe pudełko tym lepsze. Załóżmy teraz, że ktoś nas poprosił, abyśmy
mu udostępnili nasze pudełko, żeby i on mógł trzymać tam swoje skarby.
Myślisz sobie, czemu nie, mam jeszcze trochę miejsca. No dobrze, ale fajnie
by jeszcze było zabezpieczyć się przed nadmierną ciekawością naszego gościa.
Co tu zrobić? Najlepiej by było zaprojektować osobne pudełko, tak
aby zmieściło się w naszym a ścianki jego pudełka były na tyle grube, żeby
nie mógł się z niego dostać do naszych skarbów. Oczywiście powinien
wchodzić od razu do niego. Postarajmy to sobie narysować:Wygląda nieźle, pudełko dla gościa jest identycznie jak nasze, tylko że mniejsze.Kod: Zaznacz cały
_____________________________ | | | | | - | <-- nasze wejście | Nasze skarby - | | | | | -------------| | | | | | | | | Gość - | | <-- wejście dla gościa | | - | | | | | | -----------------------------
Praktycznie rzecz biorąc, nasz gość na pierwszy rzut oka nie zorientuje się, że
znalazł się w osobnym pudełku. I o to chodzi.- Potrzebne narzędzia.
Zbierzmy teraz potrzebne narzędzia. Najważniejszymi dla nas narzędziami będą
następujące programy: chroot, ldd oraz program jail. Dwa pierwsze znajdują się
standardowo w każdym systemie uniksowym. Ostatni program, czyli jail, znajduje
się w niemal każdym Uniksie, również w ogólnie dostępnych systemach z rodziny
*BSD. Użytkownicy systemu Linux będą musieli zaopatrzyć się w linuksową wersję
tego programu. Oto bezpośredni link do najnowszej (w chwili pisania tego howto)
wersji tego programu:
http://www.gsyc.inf.uc3m.es/~assman/dow ... 1.9.tar.gz
Strona domowa projektu:
http://www.gsyc.inf.uc3m.es/~assman/jail/
Na tej stronie znajdziemy informacje o programie, opis konfiguracji, instalacji
oraz składników jaila. Oczywiście wszystko to znajdziemy w plikach README oraz
INSTALL, dostarczonych razem ze źródłami.- Przygotowanie narzędzi. (UWAGA! Użytkownicy Uniksów mogą to pominąć)
Jak już wcześniej wspomniałem, w Linuksie powszechnie dostępne są dwa narzędzia:
chroot oraz ldd. Najprawdopodobniej będziemy zmuszeni do samodzielnej instalacji
programu jail. Zakładam tutaj, że nie przeczytałeś jednak plików README oraz INSTALL
lub przeczytałeś i nic z tego nie rozumiesz. Przejdżmy więc do procesu instalacji.
Rozpakujmy ściągnięte źródła:przejdźmy do katalogu:Kod: Zaznacz cały
[krzysiek@dark krzysiek]$ tar xzvf jail_1.9.tar.gz
Według instrukcji zawartej w pliku README, powinniśmy wyedytować plikKod: Zaznacz cały
[krzysiek@dark krzysiek]$ cd jail_1-9_stable/ [krzysiek@dark jail_1-9_stable]$
Makefile. Znajduje się on w podkatalogu src tarballa (archiwum), którego przed
chwilą rozpakowaliśmy. Możemy w tym celu użyć naszego ulubionego edytora. Ja będę używał edytora Vim.Co my tu mamy... No cóż, mnóstwo niezrozumiałych opcji. Ale spokojnie. InteresująKod: Zaznacz cały
[krzysiek@dark jail_1-9_stable]$ vim src/Makefile
nas tylko niektóre z nich. Spójrz:Reszta opcji jest dla nas nieistotna i raczej (o ile nie znamy się na Makefile)Kod: Zaznacz cały
ARCH=__LINUX__ #ARCH=__FREEBSD__ #ARCH=__IRIX__ #ARCH=__SOLARIS__ DEBUG = 0 INSTALL_DIR = /usr/local PERL = /usr/bin/perl ROOTUSER = root ROOTGROUP = root ARCH - określa system, na którym będziemy instalować program. Jak widać ARCH=__LINUX__ jest odkomentowana, czyli źródła skompilują się właśnie pod ten system. INSTALL_DIR - w tej opcji określamy tzw. prefix, czyli początkowe miejsce, do którego trafią pliki podczas instalacji. W powyższym przykładzie binarki wylądują w /usr/local/bin, i tak dalej. Ja podczasz instalacji dla wygody zmniłem prefix na /usr, aby wszystkie pliki binarne, które mi się zainstalują, znalazły się w zasięgu zmiennej środowiskowej $PATH. PERL - nazwa opcji mówi sama za siebie. Znajduje się tu ścieżka do interpretera perla.
nie powinniśmy ich ruszać. Zakończmy więc edycję, zapisując zmiany.
Plik INSTALL każe nam teraz wykonać polecenie make. Zróbmy to:Jeżeli nie pojawił się żaden komunikat o błędzie kompilacji, wszystko przebiegłoKod: Zaznacz cały
[krzysiek@dark jail_1-9_stable]$ cd src [krzysiek@dark src]$ make
pomyślnie. Jesteśmy już gotowi do przeprowadzenia instalacji. W tym celu wydajmy polecenie make install. Oczywiście, aby instalacja przebiegła pomyślnie, musimy mieć uprawnienia roota.No proszę, udało się. Mamy już wszystkie narzędzia do budowy naszego pudełka.Kod: Zaznacz cały
[root@dark src]# make install [root@dark src]#
- Przygotowywanie środowiska, czyli budowanie pudełka.
Załóżmy sobie katalog, który przeznaczymy na chroota, czyli nasze małe pudełko.W skład pakietu jail wchodzi szereg narzędzi, pomocnych w tworzeniu takiegoKod: Zaznacz cały
[root@dark root]# mkdir /home/chroot [root@dark root]#
zamkniętego środowiska. Na razie założony przez nas katalog jest pusty, zacznijmy więc go wypełniać.Narzędzie mkjailenv, jak sama nazwa wskazuje, służy do tworzenia zamkniętegoKod: Zaznacz cały
[root@dark root]# mkjailenv /home/chroot/
środowiska. Przyjrzyjmy się wynikowi:Kod: Zaznacz cały
[root@dark root]# ls -lah /home/chroot/ razem 16K drwxr-xr-x 4 root root 4.0K 2003-05-15 11:04 . drwxr-xr-x 6 root root 4.0K 2003-05-15 10:59 .. drwxr-xr-x 2 root root 4.0K 2003-05-15 11:04 dev drwxr-xr-x 2 root root 4.0K 2003-05-15 11:04 etc
Kod: Zaznacz cały
[root@dark root]# ls -lah /home/chroot/dev/ razem 8.0K drwxr-xr-x 2 root root 4.0K 2003-05-15 11:04 . drwxr-xr-x 4 root root 4.0K 2003-05-15 11:04 .. crw-rw-rw- 1 root root 1, 3 2003-05-15 11:04 null crw-r--r-- 1 root root 1, 9 2003-05-15 11:04 urandom crw-rw-rw- 1 root root 1, 5 2003-05-15 11:04 zero
Jak widać, udało się nam stworzyć zaczątek naszego nowego środowiska. Widzimy tutaj niezbędne urządzenia i pliki, potrzebne do identyfikacji użytkownikaKod: Zaznacz cały
[root@dark root]# ls -lah /home/chroot/etc/ razem 20K drwxr-xr-x 2 root root 4.0K 2003-05-15 11:04 . drwxr-xr-x 4 root root 4.0K 2003-05-15 11:04 .. -rw-r--r-- 1 root root 171 2003-05-15 11:04 group -rw-r--r-- 1 root root 104 2003-05-15 11:04 passwd -rw-r----- 1 root root 119 2003-05-15 11:04 shadow [root@dark root]#
w systemie, czyli group, passwd oraz shadow. Jednym słowem mamy już podstawkę.
Musimy zainstalować teraz zestaw niezbędnych programów w naszym środowisku.
Zrobi to za nas narzędzie addjailsw:U mnie skrypt nie skopiował basha oraz kilku bibliotek, które są potrzebne do jego działania. Zróbmy więc to ręcznie.Kod: Zaznacz cały
[root@dark root]# addjailsw /home/chroot/
Działa! Przetestujmy nasze dokonania:Kod: Zaznacz cały
[root@dark root]# cp /bin/bash /home/chroot/bin/ [root@dark root]# cp /lib/libreadline.so.4 /home/chroot/lib/ [root@dark root]# cp /lib/libhistory.so.4 /home/chroot/lib/ [root@dark root]# cp /lib/libdl.so.2 /home/chroot/lib/
Wygląda znajomo, prawda? Więc mamy już nasze małe pudełeczko. Małe, bo zajmuje ok. 23MB a wygląda tak samo jak te duże.Kod: Zaznacz cały
[root@dark root]# chroot /home/chroot/ [root@dark /]# ls -l razem 28 drwxr-xr-x 2 root root 4096 2003-05-15 09:37 bin drwxr-xr-x 2 root root 4096 2003-05-15 09:04 dev drwxr-xr-x 3 root root 4096 2003-05-15 09:31 etc drwxr-xr-x 2 root root 4096 2003-05-15 09:42 lib drwsrwxrwx 2 root root 4096 2003-05-15 09:31 tmp drwxr-xr-x 5 root root 4096 2003-05-15 09:31 usr drwxr-xr-x 3 root root 4096 2003-05-15 09:31 var [root@dark /]#
Przystąpimy teraz do przygotowania konta naszemu gościowi.- Tworzenie konta w nowym środowisku.
W pierwszej kolejności musimy stworzyć takiego użytkownika w systemie.
Zróbmy to w ten sposób:Teraz pora na krótki komentarz. Kazaliśmy systemowi założyć konto użytkownika,Kod: Zaznacz cały
[root@dark root]# mkdir /home/chroot/home [root@dark root]# useradd -d /home/chroot -s /usr/bin/jail gosc [root@dark root]# passwd gosc New UNIX password: Retype new UNIX password: [root@dark root]#
którego katalog domowy znajduje się w /home/chroot. Powłoką użytkownika będzie /usr/bin/jail. ¦cieżka dostępu do powłoki jest uzależniona od zawartości opcji INSTALL_DIR, którą ustawialiśmy w pliku Makefile podczas instalacji.
Wartość INSTALL_DIR=/usr powoduje ustawienie ścieżki na /usr/bin/jail.
Ostatnim parametrem jest nazwa użytkownika.
Ustawiamy teraz hasło dla naszego gościa. Tego nie trzeba komentować.
Dla pewności wyedytujmy jeszcze plik /etc/shells. Jeśli będzie to konieczne,
wpiszmy tam poprawną ścieżkę do programu jail.Przystępujemy teraz do stworzenia konta użytkownika w naszym chroocie, czyli,Kod: Zaznacz cały
[root@dark root]# cat /etc/shells |grep jail /usr/bin/jail [root@dark root]#
używając porównania, otwieramy wejście do naszego pudełka. Najwygodniej zrobić
to narzędziem dostarczonym w pakiecie jail o nazwie addjailuser:Pierwszy parametr tego polecenia, czyli /home/chroot/ określa pełną ścieżkęKod: Zaznacz cały
[root@dark root]# addjailuser /home/chroot/ /home/gosc /bin/bash gosc
do zamkniętego środowiska, które stworzyliśmy. Drugi parametr: /home/gosc
określa ścieżkę do katalogu domowego użytkownika w tym środowisku, które
podaliśmy w parametrze pierwszym. Parametr /bin/bash określa domyślną
powłokę, na której będzie pracował użytkownik. Ostatni parametr to nazwa
użytkownika.
Komunikat:oznacza pomyślne stworzenie konta w naszym środowisku, o ile nie pojawiły się komunikaty o błędach.Kod: Zaznacz cały
Adding user gosc in chrooted environment /home/chroot/ Done.
Przyjrzyjmy się teraz plikom /etc/passwd i analogicznemu /home/chroot/etc/passwdTak powinny wyglądać te pliki po poprawnym dodaniu użytkownika.Kod: Zaznacz cały
.[root@dark root]# cat /etc/passwd |grep gosc gosc:x:528:1000::/home/chroot:/usr/bin/jail [root@dark root]# [root@dark root]# cat /home/chroot/etc/passwd |grep gosc gosc:x:528:1000::/home/gosc:/bin/bash [root@dark root]#
Zróbmy teraz prawdziwy test.Działa! Wszystko idzie po naszej myśli. Sprawdźmy teraz, czy będziemy mogliKod: Zaznacz cały
[root@dark root]# su - gosc -jail-2.05b$
zalogować się po ssh na to konto. Do tego przecież cały czas zmierzamy.Jak widać - udało się. Pozostaje jeszcze udostępnić naszemu gościowi jakieś narzędzia do pracy.Kod: Zaznacz cały
[krzysiek@dark krzysiek]$ ssh localhost -l gosc Warning: Permanently added 'localhost' (RSA) to the list of known hosts. gosc@localhost's password: -jail-2.05b$
Adam Wysocki za poprawienie błędów ortograficznych i stylistycznych.
Rafał Zawadzki i Sebastian Kowalik za korektę