Wer regelmäßig größere Dateien auf einem Server ablegen und abrufen möchte, ist auf eine geeignete Übertragungstechnik angewiesen. Unter den möglichen Lösungen zählt der Dateitransfer via File-Transfer-Protocol (FTP) bis heute zu den gefragtesten.
Das auf der Anwendungsschicht agierende Übertragungsprotokoll für IP-Netzwerke bietet dem Nutzer zusätzlich zum Transport von Daten über die
- TCP-Port 20
- TCP-Port 21
auch die Möglichkeit, Verzeichnisse anzulegen und wunschgemäß zu strukturieren.
Da Sie zu diesem Zweck lediglich mit einer Client-Software auf den FTP-Server zugreifen müssen und eine Vernetzung beider Komponenten über das Internet ausreicht, kommt die Übertragungstechnik oft beim Up- und Download von Dateien auf Webspaces zum Einsatz.
Installation eines Debian-FTP-Servers
1 |
sudo apt-get install proftpd |
Nach der Installation können Sie damit beginnen, ProFTPD einzurichten. Die hierfür notwendige Konfigurationsdatei proftpd.conf befindet sich im Verzeichnis /etc/proftpd/. Um sie zu bearbeiten, öffnen Sie sie einfach mit dem Editor Ihrer Wahl.
1 |
nano /etc/proftpd/proftpd.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# Angabe von Hostname und Willkommensnachricht ServerName "xxx.kutayzorlu.com" DisplayLogin "Ihre Anmeldung - Hallo CODER ! " # Allgemeingültige Log-in-Richtlinien <Global> RequireValidShell on RootLogin off DefaultRoot Verzeichnis </Global> # Autorisierte Nutzer/Nutzergruppen für den FTP-Log-in definieren <Limit LOGIN> # Anmeldung ist nur für Nutzer der beispielhaften Gruppe ftpuser möglich # Anstelle einer langen Auflistung wird einfach die zugelassene Gruppe negiert (!) DenyGroup !ftpuser </Limit> |
1 2 |
# Nutzern lediglich den Zugriff auf ihr Home-Verzeichnis erlauben DefaultRoot ~ |
FTP-User erstellen
Wenn Sie einen neuen ProFTPD-User anlegen, sollten Sie immer /bin/false als Log-in-Shell definieren. Auf diese Weise sorgen Sie dafür, dass der User nur auf den FTP-Server und nicht auf das gesamte System zugreifen kann. Tragen Sie also mit folgendem Terminal-Befehl zunächst /bin/false in die Datei zugelassener Shells ein:
1 |
<span id="rb5ln1" class="line" data-line="1"></span>sudo echo "/bin/false" >> /etc/shells |
1 |
<span id="rb6ln1" class="line" data-line="1"></span>sudo adduser user1 --shell /bin/false --home /home/user1 |
In diesem Beispiel erstellen Sie einen Nutzer-Account mit dem Namen „user1“ und legen im gleichen Schritt auch sein Home-Verzeichnis an. Abschließend vergeben Sie für den neuen Nutzer-Account ein Passwort und bestätigen das Profil. Damit dieser neu angelegte Benutzer sich nun auch wirklich mit dem Debian-FTP-Server verbinden und Dateien in sein exklusives Verzeichnis hochladen (und später wieder aus diesem herunterladen) kann, geben Sie sein Home-Verzeichnis in der proftpd.conf an:
1 2 3 4 5 6 7 8 9 10 11 12 |
<Directory /home /user1> Umask 022 AllowOverwrite off <Limit LOGIN> AllowUser user1 DenyAll </Limit> <Limit ALL> AllowUser user1 DenyAll </Limit> </Directory> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Dieses Code-Beispiel schränkt das Verzeichnis auf verschiedene Arten ein, um es zum privaten Ablageort für die Dateien von user1 zu machen: Mit dem Umask-Befehl (022) wird zunächst der Verzeichnisbesitzer mit allen Rechten ausgestattet. Andere Nutzer dürfen Dateien hingegen lediglich lesen und sie nur dann ausführen, wenn der Besitzer die notwendige Berechtigung erteilt. Die deaktivierte Direktive AllowOverwrite verhindert, dass beim Upload von Dateien bereits gespeicherte Daten überschrieben werden können. Schließlich sind der FTP-Log-in(Limit LOGIN) und das Ausführen von FTP-Befehlen (Limit ALL) für alle Benutzer außer user1 blockiert. |
Tipp
Anstatt das Ausführen sämtlicher FTP-Befehle zu verbieten, können Sie auch einzelne Operationen unterbinden. Auf diese Weise lässt sich beispielsweise auch ein Verzeichnis erzeugen, in das Nutzer lediglich Dateien hochladen können. Eine ausführliche Übersicht über die verschiedenen Einstellungsmöglichkeiten finden Sie in den Online-Manuals.
Anonymen Zugriff erlauben
Wenn Sie Ihren Debian-FTP-Server so einrichten wollen, dass dieser als Server für öffentliche Downloads dient, möchten Sie in den meisten Fällen auch, dass Benutzer anonym auf die bereitgestellten Dateien zugreifenkönnen. Hierfür definieren Sie zunächst mithilfe von chmod die notwendigen Zugriffsrechte für das spätere Download-Verzeichnis, das wir hier beispielhaft /home/ftpdownload genannt haben:
1 |
sudo chmod 755 -R /home/ftpdownload |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<Anonymous ~ftp> User ftp Group ftpgroup # Mögliche Log-in-Profile für Clients UserAlias anonymous ftp # Nutzer- und Gruppeneigenschaften verschleiern und maximale Client-Zahl DirFakeUser on ftp DirFakeGroup on ftp RequireValidShell off MaxClients 10 <Directory *> <Limit WRITE> DenyAll </Limit> </Directory> </Anonymous> |
Damit nun die Anmeldung auf dem Debian-FTP-Server mit dem Profil ftp gelingt, müssen Sie es der Gruppe ftpuser hinzufügen:
1 |
sudo adduser ftp ftpgroup |
SSL/TLS-Verschlüsselung einrichten
Das FTP-Protokoll überträgt sowohl Anmeldeinformationen als auch die versendeten Daten im Klartext.
Wenn Sie einen privaten ProFTPD-Server einrichten wollen, der nicht für jedermann zugänglich sein soll,
ist es folglich empfehlenswert, den Log-in zu verschlüsseln.
Die meistgenutzte Lösung ist die Verschlüsselung via SSL/TLS,
die Sie mit wenig Aufwand und mithilfe der freien Software OpenSSL einrichten können.
Das Kryptographie-Toolkit ist standardmäßig in der Debian-Paketverwaltung enthalten und bereits installiert.
Alternativ lässt sich die Installation auf dem bekannten Weg durchführen:
1 |
apt-get install openssl |
Anschließend nutzen Sie OpenSSL, um ein Zertifikat zu erstellen. Da Sie dieses irgendwo ablegen müssen, legen Sie zunächst den passenden Ordner im ProFTPD-Verzeichnis an:
1 |
<span id="rb12ln1" class="line" data-line="1"></span>mkdir /etc/proftpd/ssl |
Zertifikat (proftpd.cert.pem) und Schlüssel (proftpd.key.pem) mit einer Lebensdauer von einem Jahr für Ihren Linux-FTP-Server generieren Sie nun unter Angabe dieses Ablageortes mit folgendem Befehl:
1 |
<span id="rb13ln1" class="line" data-line="1"></span>openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem |
Zusätzlich ist die Angabe einiger Informationen notwendig, um das Zertifikat ordnungsgemäß zu registrieren:
- Country Name (2 letter code): Ländercode, z. B. „DE“ für Deutschland
- State or Province Name (full name): Bundesland/Region, z. B. „Berlin“
- Locality Name (eg, city): Stadt, z. B. „München“
- Organization Name (eg, company): Name des Unternehmens bzw. Ihr Name
- Organizational Unit Name (eg, company): Angabe der Abteilung (insofern vorhanden), z. B. „IT“
- Common Name (eg, YOUR name): Angabe der zu schützenden Domain, z. B. „ftp.example.com.“
- Email Address: E-Mail-Adresse
Schritt 2: SSL/TLS in ProFTPD aktivieren
Nachdem Sie Ihr eigenes Zertifikat samt Private-Key erstellt haben, müssen Sie die Verschlüsselungstechnikfür den ProFTPD-Server aktivieren. Hierfür hält die Debian-FTP-Server-Software das Modul mod_tls bereit, das standardmäßig zwar installiert, aber ausgeschaltet ist. Für die Aktivierung sind einmal mehr Anpassungen in der proftpd.conf von Nöten. Öffnen Sie die Konfigurationsdatei und suchen nach dem folgenden Eintrag:
1 2 3 |
<span id="rb14ln1" class="line" data-line="1"></span><IfModule mod_tls.c> <span id="rb14ln2" class="line" data-line="2"></span> TLSEngine off <span id="rb14ln3" class="line" data-line="3"></span></IfModule> |
Weisen Sie der TLSEngine-Direktive den Wert „on“ zu und erweitern den Abschnitt darüber hinaus folgendermaßen:
1 2 3 4 5 6 7 8 9 |
<IfModule mod_tls.c> TLSEngine on TLSLog /var/log/proftpd/tls.log TLSProtocol TLSv1 TLSv1.1 TLSv1.2 TLSRSACertificateFile /etc/proftpd/ssl/proftpd.cert.pem TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key.pem TLSVerifyClient off TLSRequired on </IfModule> |
Auf diese Weise haben Sie nicht nur die SSL/TLS-Verschlüsselung für Ihren Debian-FTP-Server aktiviert, sondern im gleichen Schritt auch die wichtigsten Einstellungen gemacht.
So ist die Log-Datei für die Aufzeichnungen der FTP-Verbindungen (TLSLog) ebenso definiert wie die Pfade zu Zertifikat (TLSRSACertificateFile) und Schlüssel (TLSRSACertificateKeyFile). Ferner sind auch die möglichen Protokoll-Versionen (TLSProtocol) angegeben. Die letzten beiden Zeilen bewirken, dass das Modul die vom Client präsentierten Zertifikate nicht verifiziert (TLSVerifyClient) und dass die Verschlüsselung Grundvoraussetzung für den Verbindungsaufbau ist (TLSRequired). Nach einem Neustart des ProFTPD-Servers sind die Neueinstellungen wirksam:
1 |
<span id="rb16ln1" class="line" data-line="1"></span>sudo /etc/init.d/proftpd restart |
Schritt 3: Via SSL/TLS auf dem ProFTPD-Server anmelden
Wenn Sie SSL/TLS für ProFTPD (wie in diesem Debian-FTP-Server-Tutorial empfohlen) aktiviert haben, benötigen die Benutzer einen FTP-Client, der den verschlüsselten Verbindungsaufbau unterstützt.
Einer der prominentesten Vertreter ist FileZilla, der nicht nur für Debian und andere Linux-Distributionen, sondern auch für macOS und Windows verfügbar ist. Damit stellt das Open-Source-Programm für Sie und alle anderen Benutzer die optimale Lösung dar, um von verschiedenen Plattformen auf den FTP-Server zuzugreifen.
Im Servermanager von FileZilla geben Sie bei der Auswahl des Servertyps statt FTP die gesicherte Variante FTPS („FTP durch explizites TLS/SSL“) an. Beim ersten Verbindungsaufbau mit dem Server ist es zudem notwendig, das Zertifikat zu akzeptieren.
ProFTPD-Konfiguration – Tipps und Tricks
Bei den hier vorgestellten Konfigurationsmöglichkeiten handelt es sich nur um eine kleine Auswahl. Die facettenreiche FTP-Software lässt noch wesentlich spezifischere und komplexere Szenarien für die Konfiguration des eigenen Servers zu. Die offizielle Website von ProFTPD bietet zu diesem Thema zahlreiche nützliche Infos. Die frei verfügbare Online-Dokumentation beinhaltet unter anderem einige Beispiel-Setups, ausführliche How-tos, FAQs sowie Erklärungen zu den einzelnen Direktiven. Ferner gibt es dort Informationen zu den verschiedenen Standard- und Zusatzmodulen.
Debian FTP-Server einrichten leichtgemacht: Konfiguration via GUI
Im Tutorial haben wir gezeigt, wie Sie mit ProFTPD einen FTP-Server über die Kommandozeile und manuelle Änderungen in der Konfigurationsdatei einrichten. Wie für viele Linux/Unix-Programme gibt es jedoch auch für die FTP-Server-Software verschiedene grafische Benutzeroberflächen, die es ermöglichen, den Server ohne Einsatz des Terminals zu konfigurieren. Unter anderem enthält auch die GUI-Sammlung Gadmintools ein solches User-Interface, das sich problemlos über die Paketverwaltung installieren lässt. Die Oberfläche mit dem Namen gadmin-proftpd unterstützt Sie dabei, Ihren Debian-FTP-Server zu starten, Nutzer-Profile anzulegen oder Änderungen in der proftpd.conf vorzunehmen. Letzteres funktioniert, ohne dass Sie die Konfigurationsdatei dafür öffnen müssen – neue oder veränderte Einträge werden automatisch in diese übertragen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
###- kutayzorlu.com sudo nano /etc/proftpd/proftpd.conf DefaultRoot ~ RequireValidShell off AuthUserFile /etc/proftpd/ftpd.passwd AuthGroupFile /etc/proftpd/ftpd.group AuthOrder mod_auth_file.c # Very important # As you can see, only module mod_auth_file.c is used for authorization of users, # so logins and passwords are taken only from /etc/proftpd/ftpd.passwd file. Now create an example user, test: $ ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=test --uid=60 --gid=60 --home=/srv/ftp/test/ --shell=/bin/false After this command, the /etc/proftpd/ftpd.passwd file of the similar structure with /etc/passwd will be created. UID and GID can be specified any, preferably except 0 (this is root) and those specified in /etc/passwd. You can also specify the UID and GID similar to the user in /etc/passwd, for example, 33 as a www-data user, to provide similar rights to web files and specify the home directory of /var/www. You can create users with the same UID and GID, different home directories and taking into account that they are not allowed to go above their directory level (DefaultRoot ~ parameter in the server configuration). Create an ftpd.group file: sudo ftpasswd --group --name=nogroup --file=/etc/proftpd/ftpd.group --gid=60 --member test Let’s check the configuration: sudo proftpd -t Restart ProFTPd to apply the changes: sudo /etc/init.d/proftpd restart Since the passwords in the file are stored in encrypted form, you can change the password to the user as follows: sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=test --change-password # You can lock/unlock the user # (add/remove the ! character in the ftpd.passwd file before the password hash, # thereby making it impossible for the user to connect): sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=test2 --lock sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=test --unlock # You can delete the user as follows: sudo ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=test --delete-user ftpasswd is a script written in Perl, usually located in /usr/sbin/ftpasswd. |