• Chroot jail SSH w CentOS i nie tylko

    dodany przez Przemysław Sikora

    Zdarza się, że musimy dać komuś dostęp do konsoli naszego serwera. Obawiamy lub po prostu nie chcemy, aby mógł on/ona zrobić zbyt dużo …. nawet jak na zwykłego użytkownika. Innym przypadkiem jest firma hostingowa dająca dostęp do ssh swoim klientom. We wszystkim omawianych przypadkach można zastosować tzw. jail dla ssh.

    Nie konfiguruje się go trudno, choć trochę upierdliwie szczególnie przy dodawaniu kolejnych poleceń dostępnych z poziomu „ograniczone powłoki”. Przystąpmy do pracy.

    groupadd sshusers

    dodajemy grupę sshusers

    adduser user

    dodajemy użytkownika np. user

    usermod -a -G sshusers user

    dodajemy użytkownika do grupy sshusers, która to staje się jego główną grupą

    mkdir -p /home/jail/{dev,etc,lib,bin,usr,home,proc}

    tworzymy niezbędne katalogi dla naszego odizolowanego środowiska

    mkdir /home/jail/usr/bin/
    mkdir /home/jail/usr/share
    mknod -m 666 /home/jail/dev/null c 1 3

    przyda nam się /dev/null

    cd /home/jail/etc
    cp /etc/ld.so.cache .
    cp /etc/ld.so.conf .
    cp /etc/nsswitch.conf .
    cp /etc/hosts .
    cd /home/jail/bin
    cp /bin/bash .
    cp /bin/ls .
    cd /home/jail/usr/bin
    cp /usr/bin/top .

    Aby zapewnić działanie poszczególnych poleceń, niezbędne jest skopiowanie niezbędnych zależności. W tym celu skorzystałem ze skryptu ze strony cyberciti.biz. Można go pobrać również z naszej strony, wydając w terminalu poniższe polecenie:

    wget http://pliki.centos.com.pl/l2chroot 

    następnie

    chmod +x l2chroot

    Przed skorzystaniem ze skryptu, należy go wyedytować i zmienić wartość „BASE”, domyślnie ma wartość „/webroot”. W naszym przypadku powinno to tak wyglądać:
    BASE="/home/jail/"
    Aby zainstalować zależności np. dla ls, należy:

    ./l2chroot /bin/ls

    co powinno skutkować poniższym komunikatem:

    Copying shared files/libs to /var/jail/…

    Dodatkowo, aby działało w pełni polecenie top, trzeba zapewnić dostęp do „/proc” naszemu jailowi. W tym celu dodajemy do pliku „/etc/fstab” poniższy wpis:
    /proc /home/jail/proc none rw,bind 0 0
    następnie

    mount -a

    Na koniec wyedujmy plik konfiguracji daemona sshd („/etc/ssh/sshd_config”) i dodajmy następujący wpis:
    Match group sshusers
    ChrootDirectory /home/jail/
    X11Forwarding no
    AllowTcpForwarding no

    a następnie

    service sshd restart

    Jeśli zalogujemy się na naszego „ograniczonego” użytkownika i wydamy polecenie „top”, otrzymamy następujący błąd

    ’xterm’: unknown terminal type.

    Aby temu zaradzić, należy skopiować katalog „/usr/share/terminfo” w odpowiednie miejsce do naszego jaila.

    cd /home/jail/usr/share
    cp -a /usr/share/terminfo .

    Teraz powinno działać 🙂
    Nie zapomnijmy o założeniu w jailu katalogu domowego naszego użytkownika.

    mkdir /home/jail/home/user
    chown user:user /home/jail/home/user

    To chyba tyle na początek. Zaznaczam, iż opisany jail posiada bardzo okrojoną funkcjonalność. Oczywiści nic nie stoi na przeszkodzie, aby ją dowolnie rozszerzać.

3 komentarze do “Chroot jail SSH w CentOS i nie tylko”

  1. shadow pisze:

    Cześć,

    Fajny opis, ale warto zauważyć, że taki jail to już nie jest 'nasz system’, jak wspomniano na początku artykułu. Wspólny jest tak właściwie kernel, /proc i /dev/pts (z dokładnością do konkretnej konfiguracji).

    Poza tym, co równie ważnie, wraz z nadejściem RH 7 mamy do dyspozycji narzędzia do obsługi 'Linux Containers’ (LXC oraz Dockera), które pozwalają nam robić rzeczy jeszcze fajniejsze.

    K.

  2. invidian1 pisze:

    U mnie na CentOS’ie 6.5 trzeba jeszcze było zrobić ./l2chroot /bin/bash aby wszystko podziałało, inaczej wywalało

    -bash: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

    🙂

  3. centos pisze:

    invidian1 masz rację, dziękuję za Twój komentarz.

    „Aby zainstalować zależności np. dla ls, należy: ./l2chroot /bin/ls”

    Trochę nieprecyzyjnie się wyraziłem. Powyższą komendę trzeba wykonać dla każdego programu działającego w jailu, czyli w opisywanym przypadku dla /bin/bash, /bin/ls, /usr/bin/top.

Dodaj komentarz

Warto odwiedzić
Valid XHTML 1.0 Transitional centos.com.pl- mapa strony