Mit Debian sowie vielen anderen Linux Distributionen lässt sich sehr leicht ein SFTP Server bzw. SFTP Zugang einrichten.
1.OpenSSH Server installieren
Die Voraussetzung für den späteren Zugriff ist OpenSSH. Dies ist oft schon bei der Installation dabei. Sollte es nicht installiert sein, dann kann es mittels des folgenden Befehls installiert werden.
apt-get update apt-get install openssh-server
2. SFTP Zugänge verwalten
Hier gibt es mehrer Möglichkeiten den Zugang auf den SFTP Server zu verwalten. Ihr könnt einzelne Benutzer / Gruppen anlegen, die Zugang haben sollen.
2a. Gruppe für SFTP User anlegen
In diesem Fall legen wir eine neue Gruppe an. Alle Benutzer in dieser Gruppe erhalten später Zugang zum SFTP Server.
addgroup sftp_users
Der Name “sftp_users” kann frei gewählt werden. Später werden wir alle Benutzer in diese Gruppe machen, damit sie Zugang haben.
Bestehende Benutzer werden dann einfach mit folgendem Befehl zur SFTP Gruppe hinzugefügt:
usermod -G sftp_users testbenutzer
In diesem Fall wird der Benutzer “testbenutzer” zu der Gruppe “sftp_users” hinzugefügt.
2b. einzelne SFTP User anlegen, der nur SFTP darf
In diesem Fall legt ihr einfach einen neuen Benutzer an und ändern später noch die Rechte ab, damit dieser in seinem Home-Verzeichnis gefangen ist und keinen Shell Zugriff mehr hat.
Hier wird nun ein Benutzer “test” angelegt. Bei Linux wird immer auch eine Gruppe erstellt, die den selben Namen wie der Benutzer trägt. Wenn ihr den Namen “test” ändert, dann müsst ihr auch immer die Gruppe entsprechend anpassen. In diesem Beispiel wird von dem Benutzer “test” mit seiner zugehörigen Gruppe “test” ausgegangen.
Der Befehl zum Anlegen eines neuen Benutzers lautet:
adduser test
Hier wird der Benutzer “test” angelegt. Nun wollen wir den Benutzer noch so abändern, dass er sich NUR per SFTP anmelden darf und sein eigenes Verzeichnis sieht. Es soll also verhindert werden, dass man sich per Shell anmelden kann und gleichzeitig auch, dass der User den kompletten Server sehen kann.
Dazu entziehen wir dem neu angelegten Benutzer “test” die Shell.
usermod -s /bin/false test
3. Ordnerberechtigungen anpassen
Damit der Benutzer nicht mehr sein Home-Verzeichnis verlassen kann (chroot), müssen wir die Ordnerberechtigungen anpassen.
Das Homeverzeichnis MUSS !!! root gehören.
Dazu geben wir folgenden Befehl ein:
chown root:root /home/test chmod 755 /home/test
Nun ist der Benutzer “test” in seinem Home-Verzeichnis eingesperrt. In diesem Verzeichnis kann er aber nun keine Dateien mehr anlegen. Deshalb erstellen wir ein neues Verzeichnis, in dem er Dateien anlegen / hochladen kann. Dies nennen wir “upload”.
mkdir /home/test/upload chown test:test /home/test/upload
4. SSHD_Config anpassen
Nun müssen wir noch die Konfigurationsdatei bearbeiten. Hier wird festgelegt, welcher Benutzer /Gruppe Zugang hat.
nano /etc/ssh/sshd_config
In dieser Datei solltet ihr folgende Zeile finden:
Subsystem sftp /usr/lib/openssh/sftp-server
Vor diese Zeile schreibt ihr ein “#” und fügt danach folgendes ein:
#Subsystem sftp /usr/lib/openssh/sftp-server Subsystem sftp internal-sftp
5.1 Gruppe freigeben für SFTP
Am Ende der Datei fügt ihr nun folgenden Code ein um die Gruppe “sftp_users” freizugeben:
Match Group sftp_users X11Forwarding no AllowTcpForwarding no ChrootDirectory /home/%u ForceCommand internal-sftp
5.2 Benutzer freigeben für SFTP
Am Ende der Datei fügt ihr nun folgenden Code ein um den Benutzer “test” freizugeben:
Match User test X11Forwarding no AllowTcpForwarding no ChrootDirectory /home/%u ForceCommand internal-sftp
6. Neustarten des OpenSSH Dienst
Nun muss der OpenSSH Dienst neu gestartet werden, damit die Änderungen übernommen werden.
/etc/init.d/ssh restart
7. Zugriff per SFTP
Nun kann man mittels SFTP Programm (zum Beispiel WinSCP) auf den Server zugreifen. Der Benutzer sieht nun nur sein Homeverzeichnis und kann dies auch nicht verlassen.
6. “absichern” des SFTP Servers
Nun könnt ihr die Sicherheit des SFTP Servers noch erhöhen, indem ihr die Anzahl falscher Logins begrenzt. Dies kann sehr leicht mit fail2ban erledigt werden. Dazu habe ich hier eine Anleitung geschrieben.
Zudem könnt ihr noch den SSH / SFTP Port ändern. Damit erreicht ihr, dass die ganzen Skripte, die auf den Port 22 prüfen nicht funktionieren. Eine Anleitung dazu findet ihr hier.
Vielen Dank für die super Beschreibung. Funktioniert auch bei Debian 9 Stretch.
Wenn man andere Verzeichnisse noch in den Zugriff übernehmen will, dann kann man die in den “upload”-Ordner mounten:
In die fstab fügt man dann am Ende eine solche Zeile ein:
Anschließend mit
den Ordner tatsächlich mounten.
Ahhh .. habe den Fehler gefunden:
Es muss natürlich die sFTP Gruppe eingetragen werden:
Funktioniert leider nicht. Der User kann trotzdem durch das gesamte Dateisystem klicken …