
FTP/sFTP Dienst installieren und einrichten
Wofür brauche ich (s)FTP?
Auf meinem Webserver habe ich FTP (File Transfer Protocol) installiert, damit ich ohne grossen Aufwand Dateien auf den
Server laden kann.
Achtung: Falls Du sFTP (secure File Transfer Protocol = verschlüsselt) verwenden
möchtest (zu empfehlen!), dann bitte weiter unten bei sFTP einrichten weiterlesen!
vsftpd wird für eine sFTP Verbindung nicht benötigt, da OpenSSH einen kleinen sFTP Dienst integriert hat!
Voraussetzungen
- Computer der auf einem Debian-Linux (wie z.B. auch Ubuntu, oder in meinem Fall Raspbian) läuft
- Basicwissen über standard Linux Commandline Befehle -> Einführung auf dieser Seite
- Editor (In diesem Beispiel wird nano verwendet)
Dokumentation
Mehr Infos über vsFTPd und die Einstellungen dafür findet man wenn man hier klickt.
Mehr Infos über sFTP/OpenSSH und die Einstellungen dafür findet man wenn man hier klickt.
Inhaltsverzeichnis
FTP Dienst mit vsFTPd bereitstellen
Falls noch kein Terminal offen ist, bitte ein Terminal öffnen und den Befehl ausführen:
sudo apt-get install vsftpd
Jetzt wird vsFTPd installiert. Eventuell muss man noch mit (Y)es oder (J)a antworten, damit die Installation fertiggestellt wird.
Die Konfiguration von vsFTPd findet man hier: /etc/vsftpd.conf
Jetzt kannst Du folgenden Befehl ausführen, damit die Konfigurationsdatei im Editor geöffnet wird:
sudo nano /etc/vsftpd.conf
Hier müssen wir noch ein paar Zeilen ändern, damit der FTP Server so läuft wie wir das gerne hätten.
Die Zeile:
anonymous_enable=YES
ändern auf:
anonymous_enable=NO
Jetzt kann man nicht mehr als anonymer Benutzer auf den FTP-Server einloggen
Diese Zeilen unkommentieren (Das # am Anfang der Zeile entfernen):
local_enable=YES
write_enable=YES
Wenn man local_enable=YES aktiviert, kann man als lokaler Benutzer einloggen per FTP. Mit der Zeile write_enable=YES
erlauben wir dass der Benutzer Änderungen am Filesystem vornehmen darf, sprich, dass man etwas hochladen darf.
Zum Ende der Datei scrollen und diese Zeilen einfügen:
force_dot_files=YES
local_root=/home/$USER/ftp
Mit force_dot_files=YES stellen wir den Server so ein, dass er nur Dateien mit Dateiendung akzeptiert.
Die Zeile local_root=/home/$USER/ftp spezifiziert das Hauptverzeichnis des FTP-Servers.
Jetzt muss nur noch der Server oder der Dienst neu gestartet werden und die Änderungen sind aktiv:
sudo shutdown -r now
Oder:
sudo service vsftpd restart
Port Forwarding für FTP Port (21)
Damit der FTP-Server aus dem Internet erreichbar ist muss noch eine Routerregel eingerichtet werden für Port 21.
Da das je nach Router anders gemacht wird, bitte eine Anleitung googlen.
Trotzdem hier ein Bild wie die Regel auf meinem Router (D-Link Dir-645; Advanced -> Virtual Server) aussieht:

sFTP einrichten und Benutzer auf seinen Ordner beschränken
Wenn die SSH Verbindung auf einen Server funktioniert, hat man auch mit sFTP Zugriff.
Um aber die erstellten Benutzer zu chrooten, das heisst dass sie nur noch in den eigens für sie erstellten Ordner Zugriff haben, sind
noch ein paar Handgriffe notwendig. Hier mache ich das Beispielsweise für Webservernutzer, damit sie auf ihren eigenen Ordner beschränkt
Webinhalte hochladen können:
Gruppe für gechrootete User einrichten (Brauchen wir dann nochmals bei den SSH Einstellungen):
sudo addgroup sftpusers
Jetzt öffnen wir die Datei sshd_config und nehmen ein paar Einstellungen vor:
sudo nano /etc/ssh/sshd_config
Hier folgendes Linie auskommentieren:
#Subsystem sftp PFAD (kann je nach System unterschiedlich sein)
Und fügen folgende Zeile ein:
Subsystem sftp internal-sftp
Zuunterst in der Datei folgendes anfügen:
Match Group sftpusers (Die Gruppe, die wir vorher erstellt haben)
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
Das Chrootdirectory habe ich mit %h auf das nachher erstellte und verwendete Homeverzeichnis gesetzt.
Wichtig ist, das bis und mit Homeverzeichnis eines neuen Sftpbenutzers root die rechte hat. Auch Gruppen dürfen nicht schreiben
können! Darunter mache ich ein weiteres Verzeichnis, in das der Benutzer dann schreiben kann.
Wenn man das nicht macht, bekommt man einen Fehler beim Verbinden.
Einrichten des Benutzers für einen Apache-Webserver mit sftp Zugriff
Zuerst vergeben wir die richtigen Berechtigungen für den Webserver:
sudo chown root:root /var/www
Jetzt erstellen wir den Ordner für den neuen Benutzer:
sudo mkdir /var/www/USERNAME
Darin erstellen wir den eigentlichen Webinhalteordner:
sudo mkdir /var/www/USERNAME/webseite
Jetzt wird der eigentliche Benutzer erstellt mit Homeverzeichnis /var/www/USERNAME und Hauptgruppe des Apachen (www-data):
sudo adduser --ingroup www-data --home /var/www/USERNAME USERNAME
Da der User jetzt existiert, ändern wir seinen Webseitenordner auf die richtigen Berechtigungen:
sudo chown USERNAME:www-data /var/www/USERNAME/webseite
Um den sftp-chroot einzurichten, fügen wir den neuen Benutzer der oben erstellten sftpgruppe hinzu:
sudo usermod -G sftpusers USERNAME
Jetzt kann man dem Benutzer ein Passwort vergeben:
sudo passwd USERNAME
Wenn man einem Benutzer den SSH Login unmöglich machen möchte, kann man für alle Fälle die Shell für den Benutzer
ins Leere laufen lassen:
sudo usermod -s /bin/false USERNAME
SSH Dienst neu starten:
sudo service ssh restart
Port Forwarding für sFTP Port (22)
Damit der sFTP-Server aus dem Internet erreichbar ist muss noch eine Routerregel eingerichtet werden für Port 22.
Da das je nach Router anders gemacht wird, bitte eine Anleitung googlen.
Trotzdem hier ein Bild wie die Regel für Port 21 auf meinem Router (D-Link Dir-645; Advanced -> Virtual Server) aussieht:

Wenn man jetzt mit einem Benutzer per sFTP einloggt, ist man auf den webseite-Ordner des Benutzers beschränkt. Trotzdem werden die
Daten aber mit der Gruppe www-data hochgeladen, deshalb kann der Webserver damit auch gleich etwas anfangen.
Damit die Webseite auch gefunden wird muss natürlich auch ein VirtualHost erstellt werden. Wie man
das macht, kannst Du hier nachlesen.
Infos zum Dokument
Author: Christoph Iseli und Carlo Kirchmeier
Datum: 25.06.2013
Letzte Änderung: 12.08.2015
4 Kommentare
Seite: 1
#1
Von Gast
in Bregenz
am 12.5.2014
um 09:37 Uhr
Danke für die Erklärung, war sehr hilfreich.
mfg. Yannick
#2
Von Easelee
in Jona
am 21.10.2014
um 00:02 Uhr
Anleitung für SFTP eingefügt.
#3
Von Gast
in IBK
am 12.8.2015
um 14:59 Uhr
Hallo,
wenn ich mehrere User haben will welche jedoch nur Zugriff auf Sub-Ordner des bereits angelegten Users haben dürfen, wie kann ich das implementieren? (Ich verwende keinen Webserver weshalb es egal ist ob die Daten im Webordner liegen)
Danke im Vorraus,
lm
#4
Von Easelee
in Jona
am 12.8.2015
um 19:11 Uhr
Hallo Gast,
Meinst Du sFTP oder FTP mit vsFTPd?
Wenn die Subordner die richtigen Rechte haben, damit der (s)FTP User da etwas hochladen kann, müsste das direkt gehen. Wenn der System-User auch etwas in die Ordner schreiben oder zumindest lesen muss, könnte man das mit einer Gruppenzugehörigkeit lösen...
Was möchtest Du denn konkret einrichten?