-
Chroot jail SSH w CentOS i nie tylko
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ępniemount -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ępnieservice 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ć.
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.
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
🙂
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.