So nachdem der LAMP-Server funktioniert möchte man ihn ja mit Inhalt füllen. Nichts leichter als das: Einfach mit einem FTP-Client die Sachen hochladen.
Achso, da war ja was. Auf dem Server läuft ja noch gar kein FTP-Server. Also müssen wir zuerst wohl mal einen einrichten.
Hierfür wurde ProFTPD verwendet und als sicherer Server über FTPES konfiguriert.
Die Installation ist ubuntutypisch sehr einfach. apt-get ist unser Freund. apt-get hat ja auch Superkuhkräfte!
Installation
Also, wir befinden uns in unserer etwas kantigen Umgebung der SSH.
1 | apt-get install proftpd |
Bei der Installation wird man gefragt ob man den FTP-Server als Teil eines InetD’s (z.B. xinetd) starten möchte oder als eigenständigen Prozess starten möchte. Da nur auf den Nachteil hingewiesen wurde, dass bei mehreren Verbindungen die Leistung über einen InetD sinkt, habe ich mich entschlossen den Server als eigenen Prozess zu starten.
Konfiguration
Nach der Installation erfolgt die Konfiguration. Das wichtige bei FTP-Servern ist die Nutzerverwaltung. So sollte man stets den FTP-Benutzer von SSH-Benutzern trennen. Besonders wichtig ist das, wenn man ein unverschlüsseltes FTP-System aufsetzt. Da hier Benutzername und Passwort im Klartext übertragen werden und somit bei Doppelbelegung mit SSH-Benutzern man auch fast gleich einfach jedem Zugriff auf den Server erlauben kann.
Hier werde ich jedoch auf die Konfiguration eines FTPES-Servers (FTP over explicit SSL) eingehen, welcher keine unverschlüsselte Verbindungen zulässt.
Zuerst muss man die Datei /bin/false in die Liste der Shells eintragen. Diese „Shell“ wird dann den FTP-Benutzern zugewiesen. /bin/false macht bei Ausführung nichts. Wenn man sich einloggt wird keine Shell gestartet.
Also öffnen wir die Datei /etc/shells:
1 | nano /etc/shells |
Und fügen die Zeile hinzu:
1 | /bin/false |
Dann legt man einen Benutzer an. Dies geschieht über useradd. Die richtige Verwendung des Befehls ist kritisch, da hier schon Grundlagen gelegt werden für die weitere Konfiguration.
1 | useradd userftp -d /var/www -s /bin/false |
Wobei:
- userftp der Benutzername ist
- -d /var/www das Heimverzeichnis ist, das ist das Verzeichnis auf welches der Benutzer über FTP dann Zugriff erhält.
- -s /bin/false ist die Shell die beim Einloggen ausgeführt wird
Danach muss man noch das Passwort für den Benutzer setzen, welches auch zum Einloggen verwendet wird:
1 | passwd userftp |
Wie die Zugriffsrechte innerhalb des Verzeichnisses geregelt werden ist vom Einsatz abhängig. Natürlich macht ein FTP-Zugang nur Sinn wenn der FTP-Benutzer auch Rechte hat. Mit chown und chmod lassen sich die Rechte entsprechend anpassen. Wenn der FTP-Benutzer der Eigentümer ist könnte beispielsweise die Kombination 755 oder 744 verwendet werden.
ProFTPD
Jetzt beginnt erst die eigentliche Konfiguration des Servers. Diese findet sich zum größten Teil in der /etc/proftpd/proftpd.conf
Also los:
1 | nano /etc/proftpd/proftpd.conf |
Zeilen die ich bei meiner Konfiguration hinzugefügt habe waren folgende:
1 2 | # Manual settings ####### AuthAliasOnly on |
1 2 | # Choose here the user alias you want UserAlias superftpuser userftp |
Diese bewirken, dass nur Benutzer eingeloggt werden können die durch ein Alias festgelegt wurden. Und natürlich ein Alias für den angelegten Benutzer, sonst können wir uns ja nicht einloggen.
ENORM WICHTIG:
1 | DefaultRoot ~ |
Diese Zeile muss unbedingt auskommentiert werden, sonst kann der Benutzer durch den ganzen Server browsen.
Die restlichen Einstellungen sind für einen normalen FTP-Server in Ordnung, wenn man mehr Benutzer bedienen möchte gibt es auch hierfür eine Einstellung. Man kann auch den Standardport ändern wenn man nicht den Port 21 verwenden will.
FTP over explicit SSL
Zunächst muss man in der proftpd.conf die Zeile auskommentierten:
1 2 3 4 | # # This is used for FTPS connections # Include /etc/proftpd/tls.conf |
Jetzt kommen die Einstellungen die aus unserem unsicheren FTP-Server einen sichereren Server machen. Diese befinden sich in der /etc/proftpd/tls.conf. Standardmäßig findet man dort eine komplett auskommentierte Konfiguration vor.
Ein wenig Vorbereitung vor dem Editieren schadet jedoch nicht. Für eine Verbindung über SSL benötigt man ein Schlüssel und ein Zertifikat.
Diese kann man sich mithilfe von OpenSSL selbst erstellen. Über die Sinnhaftigkeit von eigens erstellten Zertifikaten möchte ich nur soviel sagen, der Benutzer wird quasi gezwungen zu überprüfen ob das Zertifikat gültig und stimmig ist…
Erzeugen wir also eines:
1 | openssl req -x509 -newkey rsa:1024 -keyout /etc/ssl/private/proftpd.key -out /etc/ssl/certs/proftpd.crt -nodes -days 365 |
Jetzt müssen noch die Rechte angepasst werden, da es hier auch zu Sicherheitsproblemen kommen kann. Der Schlüssel (proftpd.key) darf nur vom root gelesen werden können. Das Zertifikat (proftpd.crt) darf von jedem gelesen werden.
1 2 | chmod 0600 /etc/ssl/private/proftpd.key chmod 0640 /etc/ssl/certs/proftpd.crt |
Dann kommentieren wir die wichtigen Einstellungen aus:
1 2 3 4 5 6 7 8 | TLSEngine on TLSLog /var/log/proftpd/tls.log TLSProtocol SSLv23 TLSRSACertificateFile /etc/ssl/certs/proftpd.crt TLSRSACertificateKeyFile /etc/ssl/private/proftpd.key TLSOptions NoCertRequest TLSVerifyClient off TLSRequired on |
So dann ein Neustart des Servers:
1 | service proftpd restart |
Jetzt sollte alles funktionieren. Für weitere Benutzer kann man die Konfiguration anpassen.
Diese Anleitung wurde auf Basis des HowTos im Ubuntuforum geschrieben.