Chrooted SSH unter Debian

Version 1.0 Author: Falko Timme Last edited: 12/28/2005
Diese Anleitung veranschaulicht, wie man OpenSSH installiert und configuriert, sodass es für Benutzer chrooted Sessions zulässt. Mit diesem Setup gewährst Du Deinen Benutzern Shell-Zugriff ohne Angst davor haben zu müssen, dass sie Einblick in Dein gesamtes System haben. Deine Benutzer werden in ein bestimmtes Verzeichnis gesperrt, aus welchem sie nicht ausbrechen können.
Dieses Setup basiert auf einem Debian Sarge (Debian 3.1) System. Das chrooted SSH wird so installiert,dass es immer noch die Konfigurationsdateien des Standard-OpenSSH-Debian-Paketes verwendet, die in dem Verzeichnis /etc/ssh/ sind. Du kannst das Standard-OpenSSH-Debian init Skript /etc/init.d/ssh verwenden. Daher musst Du nicht Dein eigenes init Skript und eine Konfigurationsdatei erstellen.
Ich möchte an dieser Stelle darauf hinweisen, dass dies nicht der einzige Weg ist, ein solches System einzurichten. Es gibt viele Varianten dieses Ziel zu erreichen - dies ist der Weg, den ich gewählt habe. Ich übernehme keine Garantie, dass dies auch bei Dir funktionieren wird!

1 Installiere Die Neuste Zlib Version

Da es eine Sicherheitslücke in zlib-1.2.2 gab, über die sich das chrooted SSH beschweren wird, wenn wir versuchen, es zu erstellen, installieren wir jetzt die neuste zlib Version:
cd /tmp
wget http://www.zlib.net/zlib-1.2.3.tar.gz
tar xvfz zlib-1.2.3.tar.gz
cd zlib-1.2.3
make clean
./configure -s
make
make install

2 Installiere Das Chrooted SSH
Dies ist ziemlich einfach. Wir laden die patched OpenSSH Quellen runter und konfigurieren sie mit /usr als Verzeichnis für die SSH ausführbaren Dateien, mit /etc/ssh als Verzeichnis, in dem das chrooted SSH nach Konfigurationsdateien suchen wird und wir gewähren außerdem PAM Authentisierung:
cd /tmp
apt-get install libpam0g-dev openssl libcrypto++-dev libssl0.9.7 libssl-dev ssh
wget http://chrootssh.sourceforge.net/download/openssh-4.2p1-chroot.tar.gz
tar xvfz openssh-4.2p1-chroot.tar.gz
cd openssh-4.2p1-chroot
./configure --exec-prefix=/usr --sysconfdir=/etc/ssh --with-pam
make
make install

3 Erstelle Die Chroot Umgebung
Als Nächstes erstelle ich eine chroot Umgebung unter /home/chroot. Dies ist das Verzeichnis, in das alle chrooted SSH Benutzer eingesperrt werden, das heißt sie können Dateien/Verzeichnisse außerhalbt von /home/chroot nicht sehen.
Ich muss einige Verzeichnisse in /home/chroot erstellen und muss einige Binärdateien wie /bin/bash, /bin/ls, etc. wie auch die Bibliotheken, von denen diese Binärdateien abhängig sind, in die chroot Umgebung kopieren, damit sie jedem chrooted Benutzer zugänglich sind.
mkdir /home/chroot/
mkdir /home/chroot/home/
cd /home/chroot
mkdir etc
mkdir bin
mkdir lib
mkdir usr
mkdir usr/bin
mkdir dev
mknod dev/null c 1 3
mknod dev/zero c 1 5

Da wir nun die notwendigen Verzeichnisse erstellt haben, werden wir einige Binärdateien und alle Bibliotheken, von denen sie abhängig sind, in die chrooted Umgebung kopieren. Dies ist ein Auszug eines Skriptes, das ich auf http://mail.incredimail.com/howto/openssh/create_chroot_env gefunden habe, welches dies ausführt. Kopiere einfach folgende Zeilen in Deine Kommandozeile und drücke Return. Wenn Du Deinen chrooted Benutzern Zugriff auf weitere Programme gewähren möchtest, füge diese Programme einfach der APPS Zeile hinzu:
APPS="/bin/bash /bin/ls /bin/mkdir /bin/mv /bin/pwd /bin/rm /usr/bin/id /usr/bin/ssh /bin/ping /usr/bin/dircolors"
for prog in $APPS; do cp $prog ./$prog # obtain a list of related libraries ldd $prog > /dev/null if [ "$?" = 0 ] ; then LIBS=`ldd $prog | awk '{ print $3 }'` for l in $LIBS; do mkdir ./`dirname $l` > /dev/null 2>&1 cp $l ./$l done fi done
Dann führen wir Folgendes aus:
cp /lib/libnss_compat.so.2 /lib/libnsl.so.1 /lib/libnss_files.so.2 ./lib/
echo '#!/bin/bash' > usr/bin/groups
echo "id -Gn" >> usr/bin/groups
touch etc/passwd
grep /etc/passwd -e "^root" > etc/passwd

Du solltest außerdem die Zeile der Gruppe, in der Du neue Benutzer anlegen wirst, von /etc/group zu /home/chroot/etc/group. In dieser Anleitung werden wir Benutzer in der Gruppe users erstellen, also führen wir dies aus:
grep /etc/group -e "^root" -e "^users" > etc/group
und starten SSH neu:
/etc/init.d/ssh restart
4 Erstelle Einen Chrooted Benutzer
Du kannst Dich sogar mit dem chrooted SSH, das wir gerade installiert haben, einloggen ohne gechrooted zu werden (was Sinn macht, wenn Du Dich zum Beispiel als root anmeldest). Wie entscheidet das chrooted SSH nun, wer gechrooted wird und wer nicht? Das ist einfach: Das chrooted SSH nimmt den Benutzer unter die Lupe, der versucht sich in /etc/passwd einzuloggen. Wenn das Home Verzeichnis des Benutzers in /etc/passwd ein a . enthält, wird der Benutzer gechrooted werden.

Beispiel (von /etc/passwd):user_a:x:2002:100:User A:/home/user_a:/bin/bashDieser Benutzer wird nicht gechrooted werden.user_b:x:2003:100:User B:/home/chroot/./home/user_b:/bin/bash Dieser Benutzer wird gechrooted werden.

Nun erstellen wir den Benutzer testuser mit dem Home Verzeichnis /home/chroot/./home/testuser und der Gruppe users (was die Standard-Gruppe für Benutzer unter Debian ist, Du musst es also nicht explizit definieren):useradd -s /bin/bash -m -d /home/chroot/./home/testuser -c "testuser" -g users testuserDann weisen wir testuser ein Passwort zu:passwd testuserSchließlich müssen wir die Zeile für testuser in /etc/passwd nach /home/chroot/etc/passwd kopieren:

grep /etc/passwd -e "^testuser" >> /home/chroot/etc/passwd
Wir haben bereits die Guppen-Zeile von users von /etc/group nach /home/chroot/etc/group kopiert, wir müssen es also nicht noch einmal tun. Wenn Du einen chrooted Benutzer in einer anderen Gruppe als users erstellst, füge diese Gruppe dem Verzeichnis /home/chroot/etc/group hinzu:
grep /etc/group -e "^othergroup" >> /home/chroot/etc/group
Versuche nun Dich als testuser in SSH einzuloggen. Du müsstest gechrooted werden und dürftest nicht in der Lage sein, Dateien/Verzeichnisse außerhalbt von /home/chroot zu sehen.

Viel Spaß!
Links

Wenn Du andere Konfigurationen kennst (für Debian, RedHat, SuSE oder Mandrake), die mit dem 42go ISP-Manager funktionieren und Du möchtest, dass diese Konfigurationen hier veröffentlicht werden, dann kannst Du gerne Deine Installationsanleitung an <falko [dot] timme [at] projektfarm [dot] de> schicken.

0 Kommentar(e)

Zum Posten von Kommentaren bitte