Wenn Sie ein Konto auf Ihrem System einrichten möchten, das nur zum Übertragen von Dateien verwendet wird (und nicht zum SSH auf das System), sollten Sie SFTP Chroot Jail einrichten, wie in diesem Artikel beschrieben.
In einem typischen sftp-Szenario (wenn chroot sftp nicht eingerichtet ist) können Sie, wenn Sie sftp verwenden, die Root-Datei wie unten gezeigt sehen.
Wenn Sie externen Anbietern sftp-Zugriff auf Ihr System gewähren möchten, um Dateien zu übertragen, sollten Sie kein Standard-sftp verwenden. Stattdessen sollten Sie Chroot SFTP Jail wie unten beschrieben einrichten.
Nicht-Chroot-SFTP-Umgebung
Im folgenden Beispiel (eine typische sftp-Umgebung) kann John per sftp auf das System zugreifen und den Ordner /etc anzeigen und die Dateien von dort herunterladen.
# sftp [email protected] john@thegeekstuff's password: sftp> pwd Remote working directory: /home/john sftp> ls projects john.txt documents sftp> cd /etc sftp> ls -l passwd -rw-r--r-- 0 0 0 3750 Dec 29 23:09 passwd sftp> get passwd Fetching /etc/passwd to passwd /etc/passwd 100% 3750 3.7KB/s 00:00
Chroot SFTP-Umgebung
Im folgenden Beispiel kann John per sftp auf das System zugreifen und nur das Verzeichnis anzeigen, das Sie für die Ausführung von sftp für John bestimmt haben (z. B. /incoming).
Wenn John versucht, „cd /etc“ auszuführen, wird eine Fehlermeldung ausgegeben. Da SFTP in einer Chroot-Umgebung eingerichtet wird, kann John keine anderen Dateien im System anzeigen.
# sftp [email protected] john@thegeekstuff's password: sftp> pwd Remote working directory: /home/john sftp> ls sftp> cd /etc Couldn't canonicalise: No such file or directory
Nachdem Sie nun wissen, was eine Chroot-SFTP-Umgebung ist, lassen Sie uns sehen, wie diese eingerichtet wird.
1. Erstellen Sie eine neue Gruppe
Erstellen Sie eine Gruppe namens sftpusers. Nur Benutzer, die dieser Gruppe angehören, werden automatisch auf die SFTP-Chroot-Umgebung auf diesem System beschränkt.
# groupadd sftpusers
2. Benutzer erstellen (oder bestehende Benutzer ändern)
Angenommen, Sie möchten einen Gastbenutzer erstellen, der nur SFTP in einer Chroot-Umgebung ausführen darf und nicht SSH ausführen darf.
Der folgende Befehl erstellt einen Gastbenutzer, weist diesen Benutzer der Gruppe sftpusers zu, macht /incoming zum Home-Verzeichnis, legt /sbin/nologin als Shell fest (was dem Benutzer nicht erlaubt, ssh zu verwenden und Shell-Zugriff zu erhalten).
# useradd -g sftpusers -d /incoming -s /sbin/nologin guestuser # passwd guestuser
Überprüfen Sie, ob der Benutzer ordnungsgemäß erstellt wurde.
# grep guestuser /etc/passwd guestuser:x:500:500::/incoming:/sbin/nologin
Wenn Sie einen bestehenden Benutzer ändern und ihn nur zu einem sftp-Benutzer machen und ihn in das chroot-sftp-Gefängnis stecken möchten, tun Sie Folgendes:
# usermod -g sftpusers -d /incoming -s /sbin/nologin john
Wenn Sie Dateien von Windows auf Linux übertragen müssen, verwenden Sie in diesem Zusammenhang einen der SFTP-Clients, die in dieser Top-7-SFTP-Clientliste aufgeführt sind.
3. Richten Sie das sftp-server-Subsystem in sshd_config
einSie sollten sshd anweisen, den internen sftp für sftp zu verwenden (anstelle des standardmäßigen sftp-Servers).
Ändern Sie die Datei /etc/ssh/sshd_config und kommentieren Sie die folgende Zeile aus:
#Subsystem sftp /usr/libexec/openssh/sftp-server
Fügen Sie als Nächstes die folgende Zeile zur Datei /etc/ssh/sshd_config
hinzuSubsystem sftp internal-sftp
# grep sftp /etc/ssh/sshd_config #Subsystem sftp /usr/libexec/openssh/sftp-server Subsystem sftp internal-sftp
4. Geben Sie das Chroot-Verzeichnis für eine Gruppe an
Sie möchten nur bestimmte Benutzer (d. h. Benutzer, die zur Gruppe sftpusers gehören) in die Chroot-Gefängnisumgebung stellen. Fügen Sie die folgenden Zeilen am Ende von /etc/ssh/sshd_config
hinzu# tail /etc/ssh/sshd_config Match Group sftpusers ChrootDirectory /sftp/%u ForceCommand internal-sftp
Oben:
- Match Group sftpusers – Dies zeigt an, dass die folgenden Zeilen nur für Benutzer abgeglichen werden, die zu Gruppen-sftpusers gehören
- ChrootDirectory /sftp/%u – Dies ist der Pfad, der für Chroot verwendet wird, nachdem der Benutzer authentifiziert wurde. %u gibt den Benutzer an. Für John ist dies also /sftp/john.
- ForceCommand internal-sftp – Dies erzwingt die Ausführung von internal-sftp und ignoriert alle Befehle, die in der Datei ~/.ssh/rc erwähnt werden.
5. Erstellen Sie ein sftp-Home-Verzeichnis
Da wir oben /sftp als ChrootDirectory angegeben haben, erstellen Sie dieses Verzeichnis (das Ihrem typischen /home-Verzeichnis entspricht).
# mkdir /sftp
Erstellen Sie nun unter /sftp die individuellen Verzeichnisse für die Benutzer, die Teil der Gruppe sftpusers sind. d.h. die Benutzer, die nur sftp ausführen dürfen und sich in einer Chroot-Umgebung befinden.
# mkdir /sftp/guestuser
/sftp/guestuser entspricht also / für den Gastbenutzer. Wenn der Gastbenutzer sftp zum System sendet und „cd /“ ausführt, sieht er nur den Inhalt der Verzeichnisse unter „/sftp/guestuser“ (und nicht das echte / des Systems). Das ist die Macht der Chroot.
Erstellen Sie also unter diesem Verzeichnis /sftp/guestuser ein beliebiges Unterverzeichnis, das der Benutzer sehen soll. Erstellen Sie beispielsweise ein Eingangsverzeichnis, in dem Benutzer ihre Dateien per sftp übertragen können.
# mkdir /sftp/guestuser/incoming
6. Richten Sie die entsprechende Berechtigung ein
Damit Chroot richtig funktioniert, müssen Sie sicherstellen, dass die entsprechenden Berechtigungen für das Verzeichnis, das Sie gerade oben erstellt haben, richtig eingerichtet sind.
Legen Sie die Eigentümerschaft auf den Benutzer fest und gruppieren Sie ihn wie unten gezeigt zur Gruppe sftpusers.
# chown guestuser:sftpusers /sftp/guestuser/incoming
Die Berechtigung sieht für das Eingangsverzeichnis wie folgt aus.
# ls -ld /sftp/guestuser/incoming drwxr-xr-x 2 guestuser sftpusers 4096 Dec 28 23:49 /sftp/guestuser/incoming
Die Berechtigung sieht für das Verzeichnis /sftp/guestuser
wie folgt aus# ls -ld /sftp/guestuser drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp/guestuser # ls -ld /sftp drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp
7. Starten Sie sshd neu und testen Sie Chroot SFTP
sshd neu starten:
# service sshd restart
Testen Sie die chroot sftp-Umgebung. Wie Sie unten sehen, sehen gusetuser, wenn sie sftp ausführen und „cd /“ ausführen, nur das eingehende Verzeichnis.
# sftp [email protected] guestuser@thegeekstuff's password: sftp> pwd Remote working directory: /incoming sftp> cd / sftp> ls incoming
Wenn der Gastbenutzer Dateien vom sftp in das Verzeichnis /incoming überträgt, befinden sie sich wirklich im Verzeichnis /sftp/guestuser/incoming auf dem System.