Uwiezienie użytkownika w jego katalogu

Konfiguracja serwerów, usług, itp.
palin
Posty: 20
Rejestracja: 21 kwietnia 2007, 22:00
Lokalizacja: Pruszków

Post autor: palin »

W sumie racja ale jestem początkujący więc...
ashford
Posty: 11
Rejestracja: 24 kwietnia 2007, 00:53

Post autor: ashford »

@velmafia oraz @stepien86
Moglibyscie byc tak mili i napisac krok po kroku ?
stepien86
Posty: 35
Rejestracja: 02 kwietnia 2007, 11:48

Post autor: stepien86 »

Proszę bardzo. Ja używałem takiej recepty na Jaila kiedyś: (chociaż odradzam rozdawania shelli) jak ktoś jest mądry to i tak się z tego wydostanie.
Adam Słodowy przedstawia: konta shell w środowisku chroot, czyli zrób to sam.
  1. 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ć:

    Kod: Zaznacz cały

    			_____________________________
    		       |			     |
    		       |			     |
    		       |			     - 
    		       |			        <-- nasze wejście
    		       |	Nasze skarby	     -
    		       |		  	     |
    		       |			     |
    		       |		-------------|
    		       |	       |	     |
    		       |	       |	     |
    		       |	       |     Gość    -
    		       |	       |	        <-- wejście dla gościa
    		       |	       |	     -
    		       |	       |	     |
    		       |	       |	     |
    			-----------------------------
    Wygląda nieźle, pudełko dla gościa jest identycznie jak nasze, tylko że mniejsze.
    Praktycznie rzecz biorąc, nasz gość na pierwszy rzut oka nie zorientuje się, że
    znalazł się w osobnym pudełku. I o to chodzi.
  2. 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.
  3. 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:

    Kod: Zaznacz cały

    [krzysiek@dark krzysiek]$ tar xzvf jail_1.9.tar.gz
    przejdźmy do katalogu:

    Kod: Zaznacz cały

    [krzysiek@dark krzysiek]$ cd jail_1-9_stable/
    [krzysiek@dark jail_1-9_stable]$
    
    Według instrukcji zawartej w pliku README, powinniśmy wyedytować plik
    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.

    Kod: Zaznacz cały

    [krzysiek@dark jail_1-9_stable]$ vim src/Makefile
    Co my tu mamy... No cóż, mnóstwo niezrozumiałych opcji. Ale spokojnie. Interesują
    nas tylko niektóre z nich. Spójrz:

    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.
    Reszta opcji jest dla nas nieistotna i raczej (o ile nie znamy się na Makefile)
    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:

    Kod: Zaznacz cały

    [krzysiek@dark jail_1-9_stable]$ cd src
    [krzysiek@dark src]$ make
    Jeżeli nie pojawił się żaden komunikat o błędzie kompilacji, wszystko przebiegło
    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.

    Kod: Zaznacz cały

    [root@dark src]# make install
    [root@dark src]#
    No proszę, udało się. Mamy już wszystkie narzędzia do budowy naszego pudełka.
  4. Przygotowywanie środowiska, czyli budowanie pudełka.

    Załóżmy sobie katalog, który przeznaczymy na chroota, czyli nasze małe pudełko.

    Kod: Zaznacz cały

    [root@dark root]# mkdir /home/chroot
    [root@dark root]#
    W skład pakietu jail wchodzi szereg narzędzi, pomocnych w tworzeniu takiego
    zamkniętego środowiska. Na razie założony przez nas katalog jest pusty, zacznijmy więc go wypełniać.

    Kod: Zaznacz cały

    [root@dark root]# mkjailenv /home/chroot/
    Narzędzie mkjailenv, jak sama nazwa wskazuje, służy do tworzenia zamkniętego
    ś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

    Kod: 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]#
    Jak widać, udało się nam stworzyć zaczątek naszego nowego środowiska. Widzimy tutaj niezbędne urządzenia i pliki, potrzebne do identyfikacji użytkownika
    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:

    Kod: Zaznacz cały

    [root@dark root]# addjailsw /home/chroot/
    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]# 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/
    Działa! Przetestujmy nasze dokonania:

    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 /]#
    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.
    Przystąpimy teraz do przygotowania konta naszemu gościowi.
  5. Tworzenie konta w nowym środowisku.

    W pierwszej kolejności musimy stworzyć takiego użytkownika w systemie.
    Zróbmy to w ten sposób:

    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]#
    Teraz pora na krótki komentarz. Kazaliśmy systemowi założyć konto użytkownika,
    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.

    Kod: Zaznacz cały

    [root@dark root]# cat /etc/shells |grep jail
    /usr/bin/jail
    [root@dark root]#
    Przystępujemy teraz do stworzenia konta użytkownika w naszym chroocie, czyli,
    używając porównania, otwieramy wejście do naszego pudełka. Najwygodniej zrobić
    to narzędziem dostarczonym w pakiecie jail o nazwie addjailuser:

    Kod: Zaznacz cały

    [root@dark root]# addjailuser /home/chroot/ /home/gosc /bin/bash gosc
    Pierwszy parametr tego polecenia, czyli /home/chroot/ określa pełną ścieżkę
    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:

    Kod: Zaznacz cały

    Adding user gosc in chrooted environment /home/chroot/
    Done.
    oznacza pomyślne stworzenie konta w naszym środowisku, o ile nie pojawiły się komunikaty o błędach.
    Przyjrzyjmy się teraz plikom /etc/passwd i analogicznemu /home/chroot/etc/passwd

    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]#
    Tak powinny wyglądać te pliki po poprawnym dodaniu użytkownika.
    Zróbmy teraz prawdziwy test.

    Kod: Zaznacz cały

    [root@dark root]# su - gosc
    -jail-2.05b$
    Działa! Wszystko idzie po naszej myśli. Sprawdźmy teraz, czy będziemy mogli
    zalogować się po ssh na to konto. Do tego przecież cały czas zmierzamy.

    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$
    Jak widać - udało się. Pozostaje jeszcze udostępnić naszemu gościowi jakieś narzędzia do pracy.
N. Podziękowania

Adam Wysocki za poprawienie błędów ortograficznych i stylistycznych.
Rafał Zawadzki i Sebastian Kowalik za korektę
Napisz jak rezultaty
Pozdrawiam.
ODPOWIEDZ