ProFTPD ist ein weit verbreiteter, gut konfigurierbarer FTP Server für UNIX-basierte Betriebssysteme. Im gezeigten Beispiel wird eine TLS Verschlüsselung am FTP Server konfiguriert, um die Kommunikation zwischen FTP Client (z.B. FileZilla) und dem FTP Server ProFTPD zu verschlüsseln.
Grundlagen |
Installation |
Konfiguration |
Das FTP Protokoll | Installation | Grundlegende Konfiguration (in Bearbeitung) |
SSL/TLS verschlüsselte FTP-Verbindung | ||
FTP Benutzer erstellen (in Bearbeitung) | ||
Anonymous Zugang | ||
Fehlerquellen | ||
———————————————- | ———————————————- | ———————————————- |
Das FTP Protokoll
Das File Transfer Protocol (FTP, englisch für Dateiübertragungsprotokoll) ist ein Netzwerkprotokoll zur Übertragung von Dateien über IP-Netzwerke. Es wird benutzt, um Dateien vom Server zum Client (Herunterladen), vom Client zum Server (Hochladen) oder clientgesteuert zwischen zwei FTP-Servern zu übertragen (File Exchange Protocol). Außerdem können mit FTP Verzeichnisse angelegt und ausgelesen sowie Verzeichnisse und Dateien umbenannt oder gelöscht werden.
Das FTP verwendet für die Steuerung und Datenübertragung jeweils separate Verbindungen: Eine FTP-Sitzung beginnt, indem vom Client zum Control Port des Servers (der Standard-Port dafür ist Port 21) eine TCP-Verbindung aufgebaut wird. Über diese Verbindung werden Befehle zum Server gesendet. Der Server antwortet auf jeden Befehl mit einem Statuscode, oft mit einem angehängten, erklärenden Text. Die meisten Befehle sind allerdings erst nach einer erfolgreichen Authentifizierung zulässig.
Installation
Installation
Der ProFTP Server ist bei allen aktuellen Linux Distributionen bereits im Hauptzweig der Softwarequellen enthalten. Aktualität und Sicherheit des ProFTP Servers wird durch die Zugehörigkeit zum Haupt/Main/Basis Zweig der Softwarequellen gewährleistet. Der ProFTP Server kann daher mit folgendem Befehl installiert werden :
1 |
sudo apt-get install proftpd-basic |
Der ProFTP Daemon kann über den inetd Dienst ( eingehende Verbindungen werden von inetd verwaltet, wobei jede Verbindung einen eignen Prozess zugewiesen bekommt) oder als eigenständiges ( standalone ) Programm gestartet werden ( ProFTP übernimmt die vollständige Verwaltung aller Verbindungen; nur ein Prozess aktiv ).
Konfiguration
Grundlegende Konfiguration
Die Konfigurationsdateien des ProFTP Servers befinden sich in dem Verzeichnis /etc/proftp/. Um ein Überschreiben der Konfigurationen bei Paket-Aktualisierungen zu vermeiden, werden benutzerspezifische Konfigurationen in dem Verzeichnis /etc/proftpd/conf.d/ abgelegt.
In diesem Beispiel wird die Datei custom.conf für die Anpassungen des ProFTPD Servers verwendet, damit die Konfiguration wirksam wird:
1 |
sudo nano /etc/proftpd/conf.d/custom.conf |
Inhalt:
1 2 3 4 5 6 7 8 9 10 11 12 |
# Ftp user doesn't need a valid shell <Global> RequireValidShell off </Global> # If desired turn off IPv6 UseIPv6 off # Default directory is ftpusers home DefaultRoot ~ ftpuser # Limit login to the ftpuser group <Limit LOGIN> DenyGroup !ftpuser </Limit> |
Anschließend wird die Datei gespeichert und der ProFTPD Server neu gestartet:
1 |
sudo service proftpd restart |
SSL/TLS verschlüsselte FTP-Verbindung
Verschlüsselungs-Modul aktivieren
Das TLS Modul ermöglicht eine verschlüsselte Verbindung über SSL/TLS zum ProFTPD Server. In den meisten Fällen ist SSL/TLS in /etc/proftpd/modules.conf bereits enthalten und automatisch aktiv. Ob der installierte ProFTP Server TLS Verschlüsselung unterstützt kann mit folgenden Befehl überprüft werden :
1 2 |
sudo proftpd -vv | grep tls mod_tls/2.4.3 |
Zertifikat erstellen
Das folgende Beispiel verwendet als Zertifikat das selbst-signierte Snakeoil Zertifikat des ssl-cert Packages (siehe Ubuntu default snakeoil SSL-Zertifikat erneuern):
1 2 3 4 5 6 |
sudo apt-get install ssl-cert sudo make-ssl-cert generate-default-snakeoil --force-overwrite sudo ls -la /etc/ssl/certs/ssl-cert-snakeoil.pem -rw-r--r-- 1 root root 997 Oct 30 08:25 /etc/ssl/certs/ssl-cert-snakeoil.pem sudo ls -la /etc/ssl/private/ssl-cert-snakeoil.key -rw-r----- 1 root ssl-cert 1704 Oct 30 08:25 /etc/ssl/private/ssl-cert-snakeoil.key |
TLS konfigurieren
Die SSL/TLS Konfiguration erfolgt über die Datei /etc/proftpd/conf.d/tls.conf mit folgendem Inhalt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<IfModule mod_tls.c> TLSEngine on TLSOptions AllowPerUser TLSLog /var/log/proftpd/tls.log TLSProtocol SSLv23 TLSOptions NoCertRequest TLSRSACertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem TLSRSACertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key TLSVerifyClient off TLSRequired on </IfModule> # Userspecific parameter <IfUser speefak> TLSRequired off </IfUser> |
Anschließend wird ProFTPD neu gestartet.
* Kurzinfo auf www.proftpd.org *Serverseitige benutzerabhängige TLS/SSL Konfiguration auf www.howtoforge.com *TLSv1.1 oder v1.2 ist erst ab der Version 1.3.5 möglich.FTP Benutzer erstellen
Die Benutzerverwaltung von ProFTP kann auf zwei Arten erfolgen:
- Benutzer auf Hostsystem – Host verwaltet Benutzer
Für den FTP Zugriff wird ein eigener Benutzer im Hostsystem erstellt, ohne gültiger Login Shell und mit dem Homeverzeichnis /var/www/upload:
1 |
sudo adduser ftpuser --shell /bin/false --home /var/www/upload |
- Virtuelle Benutzer – ProFTP verwaltet Benutzer über Datei
FTP Benutzer werden nicht im Hostsystem erstellt, sondern über eine Datei verwaltet
1Infos folgen / script folgt
Um einen anonymen Lesezugriff zu erlauben wird folgende Datei erstellt:
1 |
sudo nano /etc/proftpd/conf.d/anon.conf |
Inhalt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<Anonymous ~ftpuser> User ftp Group ftp # Users can also login with ftp UserAlias anonymous ftp # All files belong to ftp DirFakeUser on ftp DirFakeGroup on ftp RequireValidShell off MaxClients 10 <Directory *> <Limit WRITE> DenyAll </Limit> </Directory> </Anonymous> |
Damit der Benutzer ftp auf den anonymen FTP-Bereich zugreifen darf, muss er der Gruppe ftpuser hinzugefügt werden:
1 |
sudo adduser ftp ftpuser |
Fehlerquellen
Bei Problemen der FTP Verbindungen können folgende Dinge überprüft werden:
- ProFTPD Dienst läuft: sudo service proftpd status
- ProFTPD lauscht auf Port 21: sudo netstat -tlp|grep proftp
- Fehlermeldungen im ProFTPD Log: sudo tail -20 /var/log/proftpd/proftpd.log
- Fehlermeldungen im ProFTPD TLS Log: sudo tail -20 /var/log/proftpd/tls.log
- Verbindungstest auf Port 21 mit telnet: telnet 192.168.1.100 21
- Verbindungstest auf Port 21 mit TLS: openssl s_client -connect 192.168.1.100:21 -starttls ftp
Meldung: memcache support not enabled
In manchen Fällen kann bei einem Neustart des ProFTPD Servers folgende Meldung erscheinen:
1 2 3 4 5 |
<span class="kw2">sudo</span> service proftpd restart <span class="br0">[</span> ok <span class="br0">]</span> Stopping <span class="kw2">ftp</span> server: proftpd. <span class="br0">[</span>....<span class="br0">]</span> Starting <span class="kw2">ftp</span> server: proftpddebian proftpd<span class="br0">[</span><span class="nu0">4856</span><span class="br0">]</span>: mod_tls_memcache<span class="sy0">/</span><span class="nu0">0.1</span>: notice: unable to register <span class="st_h">'memcache'</span> SSL session cache: Memcache support not enabled . ok |
Der ProFTP Server wurde nicht mit der Option -enable-memcache kompiliert. Das Einfügen einer Raute vor der Zeile deaktiviert das Modul:
1 2 3 4 |
<span class="kw2">sudo</span> <span class="kw2">vi</span> <span class="sy0">/</span>etc<span class="sy0">/</span>proftpd<span class="sy0">/</span>modules.conf <span class="br0">[</span>...<span class="br0">]</span> <span class="co0"># LoadModule mod_tls_memcache.c</span> <span class="br0">[</span>...<span class="br0">]</span> |
Ein anschließender Neustart erfolgt ohne der Memcache Meldung:
1 2 3 |
<span class="kw2">sudo</span> service proftpd restart <span class="br0">[</span> ok <span class="br0">]</span> Stopping <span class="kw2">ftp</span> server: proftpd. <span class="br0">[</span> ok <span class="br0">]</span> Starting <span class="kw2">ftp</span> server: proftpd. |
by Speefak | wiki.ubuntuusers.de | www.thomas-krenn.com | www.howtoforge.com