Sitemap | Nicht eingeloggt

Layout: V2_DayTime
V2_DayTime
| V2
V2
| V2 Dark
V2 Dark
| Alle

DE

Tux

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

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:

port_21_ftp

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:

port_21_ftp

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

#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?

Einen neuen Kommentar hinzufügen

Info: Wenn Du eingeloggt bist, musst Du keine Userdaten mehr eingeben.

Ort:
(Optional)

Kommentar:

Impressum
Programmierung: Christoph Iseli | Design: Christoph Iseli
Webseitencode: Darf frei kopiert / verwendet werden (Downloads) | Inhalt: Darf frei verwendet werden, solange ein Link auf diese Seite mitgegeben wird.