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
- Chroot Patch For SSH: http://chrootssh.sourceforge.net/index.php
- OpenSSH: http://www.openssh.org
- make_chroot_jail.sh: http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail
- Debian: http://www.debian.org