Chrooted SSH/SFTP Anleitung (Debian Etch)

Version 1.0
Author: Falko Timme <ft [at] falkotimme [dot] com>

Diese Anleitung veranschaulicht auf zwei verschiedenen Wegen wie man Benutzern einen chrooted SSH Zugriff ermöglicht. Mit diesem Setup ermöglichst Du Deinen Benutzern Shell Zugriff ohne fürchten zu müssen, dass sie Dein gesamtes System einsehen können. Deine Benutzer werden in ein bestimmtes Verzeichnis eingesperrt, aus dem sie nicht ausbrechen können. Die Benutzer werden außerdem in der Lage sein, SFTP in ihren chroot Gefängnissen zu verwenden.

Diese Anleitung ist ohne jegliche Gewähr! Ich möchte darauf hinweisen, dass dies nicht der einzige Weg ist, ein solches System einzurichten. Es gibt viele Möglichkeiten dieses Ziel zu erreichen – dies ist der Weg, den ich gewählt habe. Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 Vorbemerkung

Dieses Setup basiert auf einem Debian Etch (Debian 4.0) System.

Die erste Variante eine chrooted SSH einzurichten, ist die manuelle Installation, die der Methode in der Anleitung für Debian Sarge sehr ähnlich ist: https://www.howtoforge.com/chrooted_ssh_howto_debian. Die chrooted SSH wird so installiert, dass sie immer noch die Konfigurationsdateien des Standard OpenSSH Debian Paketes verwendet, die sich in /etc/ssh/ befinden. Weiterhin kannst Du das Standard OpenSSH Debian Init Skript /etc/init.d/ssh verwenden. Daher musst Du kein eigenes Init Skript und keine eigene Konfigurationsdatei erstellen.

Bei der zweiten Variante verwendest Du das make_chroot_jail.sh Skript von http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/. Dieses Setup unterscheidet sich vom ersten, in dem wir OpenSSH nicht neu kompilieren müssen. Anstelle von /bin/sh oder /bin/bash verwenden die chrooted Benutzer /bin/chroot-shell, die die sudo und chroot Befehle verwendet, um Benutzer zu chrooten. Ein weiterer Unterschied ist, dass die Benutzer keinen Punkt in ihren Homedirs in /etc/passwd haben (daher kann es nicht von Control Panels wie ISPConfig verwendet werden, was bei der ersten Variante kein Problem darstellt). Sieh Dir bitte http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/ an um herauszufinden, was dieses Skript für Dich bereit hält und was nicht.

Du solltes Dich für eine Variante entscheiden – verwende bitte nicht beide Varianten zur gleichen Zeit!

2 Erste Variante (manuell)

2.1 Installation der chrooted OpenSSH

Zunächst installieren wir einige Voraussetzungen:

cd /tmp
apt-get install libpam0g-dev openssl libcrypto++-dev libssl0.9.7 libssl-dev ssh build-essential bzip2

Dann laden wir die gepatchten OpenSSH Quellen runter und konfigurieren sie mit /usr als Verzeichnis für die SSH ausführbaren Dateien mit /etc/ssh als dem Verzeichnis, in dem die chrooted SSH nach Konfigurationsdateien sucht. Außerdem erlauben wir PAM Authentifizierung:

wget http://chrootssh.sourceforge.net/download/openssh-4.5p1-chroot.tar.bz2
tar xvfj openssh-4.5p1-chroot.tar.bz2
cd openssh-4.5p1-chroot
./configure –exec-prefix=/usr –sysconfdir=/etc/ssh –with-pam
make
make install

2.2 Die chroot Umgebung erstellen

Als Nächstes erstelle ich eine chroot Umgebung unter /home/chroot. Das ist das Verzeichnis, in dem alle chrooted SSH Benutzer eingesperrt werden, d.h. sie können keine Dateien/Verzeichnisse außerhalb von /home/chroot sehen.

Ich muss /home/chroot einige Verzeichnisse anlegen und muss ein paar Binärdateien wie /bin/bash, /bin/ls, etc. wie auch die Libraries, von denen diese Binärdateien abhängen, in die chroot Umgebung kopieren, so dass sie jedem chrooted Benutzer zugänglich sind.

mkdir -p /home/chroot/home/
cd /home/chroot
mkdir -p usr/lib/openssh
mkdir etc
mkdir etc/pam.d/
mkdir bin
mkdir lib
mkdir usr/bin
mkdir dev
mknod dev/null c 1 3
mknod dev/zero c 1 5

chmod 666 dev/null
chmod 666 dev/zero

Da wir nun die notwendigen Verzeichnisse erstellt haben, werden wir einige Binärdateien und alle Libraries, von denen sie abhängen, in die chroot Umgebung kopieren. Dies ist ein Auszug eines Skriptes, das ich auf http://mail.incredimail.com/howto/openssh/create_chroot_env gefunden habe; dieses Skript führt diese Aktion aus. Es habe es ein bisschen modifiziert:

vi /usr/local/sbin/create_chroot_env

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

APPS="/bin/sh /bin/bash /bin/cp /bin/ls /bin/mkdir /bin/mv /bin/pwd /bin/rm /bin/rmdir /usr/bin/id /usr/bin/ssh /bin/ping /usr/bin/dircolors /usr/bin/vi /usr/bin/sftp /usr/lib/openssh/sftp-server"
for prog in $APPS;  do
        mkdir -p ./`dirname $prog` > /dev/null 2>&1
        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 -p ./`dirname $l` > /dev/null 2>&1
                        cp $l ./$l  > /dev/null 2>&1
                done
        fi
done

(Wenn Du Deinen chrotted Benutzern mehr Programme zugänglich machen möchtest, füge diese Programme einfach der APPS Zeile hinzu.)

Nun machen wir das Skript ausführbar und führen es aus:

chmod 700 /usr/local/sbin/create_chroot_env
create_chroot_env

Das könnte dich auch interessieren …