Chrooted SSH/SFTP Anleitung (Debian Etch)

Als Nächstes müssen wir einige zusätzliche Dateien und Libraries in das chroot Gefängnis kopieren:

cp /lib/libnss_compat.so.2 /lib/libnsl.so.1 /lib/libnss_files.so.2 /lib/ld-linux.so.2 /lib/libcap.so.1 /lib/libnss_dns.so.2 ./lib/

cp /etc/hosts etc/
cp /etc/resolv.conf etc/
cp /etc/pam.d/* etc/pam.d/
cp -r /lib/security lib/
cp -r /etc/security etc/
cp /etc/login.defs etc/

cp /usr/lib/libgssapi_krb5.so.2 usr/lib/
cp /usr/lib/libkrb5.so.3 usr/lib/
cp /usr/lib/libk5crypto.so.3 usr/lib/
cp /lib/libcom_err.so.2 lib/
cp /usr/lib/libkrb5support.so.0 usr/lib/

Dann führen wir dies aus:

echo ‚#!/bin/bash‘ > usr/bin/groups
echo „id -Gn“ >> usr/bin/groups
touch etc/passwd
grep /etc/passwd -e „^root“ > etc/passwd

Du solltest auch die Zeile de Gruppe kopieren, in der Du neue Benutzer von /etc/group zu /home/chroot/etc/group erstellen wirst. In dieser Anleitung werden wir Benutzer in der Gruppe users anlegen, also führen wir Folgendes aus:

grep /etc/group -e „^root“ -e „^users“ > etc/group

und starten OpenSSH neu:

/etc/init.d/ssh restart

2.3 Einen chrooted Benutzer anlegen

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 Benutzer anmeldest). Aber wie entscheidet der die chrooted SSH nun, wer gechrooted wird und wer nicht? Das ist einfach: die chrooted SSH sieht sich den Benutzer an, der versucht, sich in /etc/passwd einzuloggen. Wenn das Home Verzeichnis des Benutzers in /etc/passwd einen . (Punkt) hat, dann wird der Benutzer gechrooted.


Beispiel (von /etc/passwd):user_a:x:2002:100:User A:/home/user_a:/bin/bashDieser Benutzer wird nicht gechrooted.

user_b:x:2003:100:User B:/home/chroot/./home/user_b:/bin/bash

Dieser Benutzer wird gechrooted.


Nun legen wir den Benutzer testuser mit dem Home Verzeichnis /home/chroot/./home/testuser und die Gruppe users (was die Standard-Gruppe für Benutzer auf Debian ist, Du musst sie also nicht explizit festlegen) an:useradd -s /bin/bash -m -d /home/chroot/./home/testuser -c „testuser“ -g users testuserDann weisen wir testuser ein Passwort zu:

passwd testuser

Letztlich kopieren wir die Zeile für testuser in /etc/passwd nach /home/chroot/etc/passwd:

grep /etc/passwd -e „^testuser“ >> /home/chroot/etc/passwd

Wir haben bereits die users Gruppen-Zeile von /etc/group nach /home/chroot/etc/group kopiert, also müssen wir das hier nicht noch einmal tun. Falls Du einen chrooted Benutzer in einer anderen Gruppe als users erstellst, füge diese Gruppe /home/chroot/etc/group hinzu:

grep /etc/group -e „^othergroup“ >> /home/chroot/etc/group

Versuche nun Dich in SSH oder SFTP als testuser einzuloggen. Du müsstest gechrooted werden und dürftest nicht in der Lage sein, Dateien/Verzeichnisse außerhalb von /home/chroot zu durchsuchen.

Viel Spaß!

3 Zweite Variante (mit Skript)

Es gibt ein Skript namens make_chroot_jail.sh auf http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/ das das Setup von SSH/SFTP chroot Gefängnissen automatisiert. Es läuft fehlerlos auf Debian Etch.

3.1 Das Skript beziehen

Zunächst müssen wir einige Voraussetzungen installieren:

apt-get install sudo debianutils coreutils

Dann laden wir make_chroot_jail.sh nach /usr/local/sbin und machen es für den Root Benutzer ausführbar:

cd /usr/local/sbin
wget http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/make_chroot_jail.sh
chmod 700 /usr/local/sbin/make_chroot_jail.sh

3.2 make_chroot_jail.sh verwenden

Jetzt können wir das Skript bereits wie folgt verwenden:

make_chroot_jail.sh username [/path/to/chroot-shell [/path/to/chroot]]

Es spielt keine Rolle, ob der Benutzer bereits existiert oder nicht. Wenn ja, wird er aktualisiert; wenn nicht, wird er erstellt. Wenn Du den Pfad zu chroot-shell und den Pfad zum chroot Gefängnis nicht definierst, werden die Standardwerte /bin/chroot-shell und /home/jail verwendet, z.B.:

make_chroot_jail.sh testuser

Ich möchte /home/chroot als das chroot Gefängnis verwenden, daher muss ich auch den Pfad zu chroot-shell festlegen:

make_chroot_jail.sh testuser /bin/chroot-shell /home/chroot

Damit wird der Benutzer testuser mit dem chroot Gefängnis /home/chroot erstellt/aktualisiert.

Um alle Dateien/Libraries im chroot Gefängnis zu aktualisieren, führe dies aus

make_chroot_jail.sh update

oder

make_chroot_jail.sh update /bin/chroot-shell /home/chroot

das hängt davon ab, wie Du Deine Benutzer erstellt hast.

3.3 ProFTPd

Falls Du ProFTPd verwendest, solltest Du Folgendes lesen:

Wie auf http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/ erwähnt wird, solltest Du /bin/chroot-shell nicht /etc/shells hinzufügen, da dies den Benutzern erlauben würde, aus dem chroot Gefängnis auszubrechen. Dieses Problem betrifft ProFTPd, da in ProFTPds Standardkonfiguration nur die Benutzer ProFTPd verwenden können, deren Shell in /etc/shells aufgelistet ist. Das bedeutet, dass Benutzer, die /bin/chroot-shell verwenden, ProFTPd nicht nutzen können.

Um dies zu ändern, öffne /etc/proftpd/proftpd.conf und füge Folgendes hinzu:

vi /etc/proftpd/proftpd.conf

[...]
RequireValidShell               off
[...]

Starte dann ProFTPd neu:

/etc/init.d/proftpd restart

Nun können alle Benutzer ProFTPd verwenden, egal was für eine Shell sie haben, was Du wiederum vielleicht nicht möchtest. Die beste Lösung wäre, einfach SFTP zu verwenden und das normale FTP auszulassen.

4 Links

Das könnte dich auch interessieren …