Jailkit

Mamy serwer, ale nie chcemy, by użytkownik miał dostęp do wszystkiego – jak sobie z tym poradzić? Jest kilka sposobów na to – a jednym z nich jest jail[^1]. Pierwotnie powstało to w BSD jako mechanizm wirtualizacji na poziomie systemu operacyjnego (ang: operating system-level virtualization). Polega to na tworzeniu na głównym systemie – mniejszych systemów nazywanych jailami. Dobrze, ale to w BSD – co z Linuksem?

No to zaczynamy

Pierwsze co – trzeba się zaopatrzyć w potrzebne oprogramowanie – jailkit[^2]. Ściągamy, rozpakowujemy, instalujemy. Chyba nie trzeba nikomu tłumaczyć. Gdy już mamy to za sobą – czas na stworzenie zamkniętego środowiska. Opiszę to na przykładzie kierowania niektórych użytkowników do jaila. Jednak zanim zacznę – na początek warto pomyśleć jakiego oprogramowania w tym środowisku nam (bądź innym użytkownikom) trzeba – warto rzucić okiem na plik /etc/jailkit/jkinit.ini_. Przykładowa sekcja wygląda tak:

[ssh]
comment = ssh secure shell
paths = ssh
includesections = netbasics, uidbasics
devices = /dev/urandom, /dev/tty, /dev/null

Odwoływać się do niej będziemy później przez nazwę zawartą w nawiasach „[]”. Poszczególnych linijek chyba nie trzeba tłumaczyć – wszystko jest według mnie zrozumiałe. Teraz – gdy wiemy, których sekcji nam trzeba – możemy przejść dalej.

Tworzenie środowiska jail

Na początek musimy stworzyć jakiś katalog, np. /home/jail – to w nim umieścimy nasz mini-system. Gdy już posiadamy miejsce docelowe, czas stworzyć to co chcemy!

jk_init -v -f /home/jail basicshell

Po tym poleceniu mamy w jailu dostępne podstawowe komendy i wszystkie potrzebne pliki i biblioteki do ich działania.

Tworzenie użytkowników

Robimy to na początku standardowo:

useradd -d /home/test -m test -s /bin/bash && passwd test

Resztę magii robi za nas jail:

jk_jailuser -m -j /home/jail/ test

Oczywiście jeśli nie chcemy przenosić danych użytkownika pomijamy parametr -m. Jeśli wyskoczy, że nie ma pliku /home/jail/usr/sbin/jklsh_ należy dodać sekcję jklsh poleceniem *jk\init -j /home/jail jk_lsh.
Jailkit powinien sam zmienić powłokę w pliku */etc/passwd
naszego głównego systemu na /usr/sbin/jk_chrootsh. Ostatni etap to już tylko włączenie logowania przez ssh dla danego użytkownika (jeśli stosujemy regułki AllowUser i DenyUser w sshd_config).

Możliwe problemy

Jak to zwykle bywa – gdzieś się może coś nie udać. Co poradzić? Jeśli nie możemy się zalogować, a ssh nas przepuszcza – to błąd leży gdzieś w jailu. Rzecz pierwsza do zrobienia:

jk_init -j /home/jail ssh

Możliwy jest też problem z jk_lsh (nie mam pojęcia czemu nie działa). Rozwiązaniem tego jest zmiana powłoki w pliku /home/jail/etc/passwd na jakąś inną dostępną w jail np. bash:

test:x:1010:1010::/home/test:/bin/bash

I to by było na tyle – prawda, że to proste?

[^1]:
FreeBSD jail na wikipedii (ang) 

[^2]:
http://olivier.sessink.nl/jailkit/