Inhaltsverzeichnis
proFTPD
Ein FTP-Server ermöglicht den Dateitransfer (Download/Upload) über das Internet oder über ein privates Netz. Viele Webapplikationen benötigen beispielsweise einen FTP-Server, der schreibend auf das Webroot zurückgreifen kann. In dieser Anleitung geht es um die Einrichtung von proFTPD.
Softwarevoraussetzungen: Paketverwaltung | Editor
Schwierigkeitsgrad: Einfach
Ausgetestet mit folgenden Betriebssystemen: Ubuntu | Debian
Archiv: Diese Anleitung behandelt ältere Softwareversionen, kann aber noch als Referenz verwendet werden.
Ziel
Ziel ist es einen FTP-Server einzurichten, der Zugriff auf /var/www
(Webroot des Webservers) und auf die Home-Verzeichnisse der Systembenutzer bietet. Optional ist die Möglichkeit eines anonymen Zugangs, so kann der FTP-Server auch als Downloadserver dienen.
Mögliche Zugänge
1. Anonymer Zugang
Der FTP-Server kann als Downloadserver dienen, ohne Login können Besucher die dort veröffentlichten Dateien herunterladen (nur lesen, nicht schreiben). Die zu veröffentlichten Dateien müssen nach /home/ftp
oder /srv/ftp/
kopiert werden.
2. Zugang für Systembenutzer
Systembenutzer können sich über FTP einloggen und auf ihr Homeverzeichnis sowohl lesend, als auch schreibend zurückgreifen. Die Zugangsdaten sind die gleichen, wie auf dem System.
3. Virtuelle Benutzer
proFTPD bietet die Möglichkeit virtuelle Benutzer anzulegen, diesen kann man beliebige Rechte (einer Gruppe/eines Benutzers) versehen werden, so ist nach Belieben schreiben, als auch lesen möglich (hängt von den Rechten der Gruppe/des Benutzers ab).
Installation
Benötigte Pakete
Es wird nur das Paket proftpd
benötigt:
user@server:~$ sudo apt-get install proftpd
Bei der Installation wird man nach der Startmethode von proFTPD gefragt, hier wählt man von Inetd
.
Hinweis: hierzu muss ein Inet-Daemon vorhanden sein:
user@server:~$ sudo apt-get install openbsd-inetd # Installation (falls kein Inet-Daemon vorhanden)
Kontrolle des Inet-Daemons
Nachträglich muss überprüft werden, ob in der /etc/inetd.conf
user@server:~$ cat /etc/inetd.conf
…bereits folgende Zeile vorhanden ist:
ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/proftpd
Falls nicht, muss der Datei
user@server:~$ sudo nano /etc/inetd.conf
am Besten am Ende folgendes anghängt werden:
ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/proftpd
Anschließend noch den Inet-Daemon neu starten:
user@server:~$ sudo service openbsd-inetd restart
Konfiguration
Ein Großteil der Konfiguration findet in /etc/proftpd/proftpd.conf
statt:
user@server:~$ sudo nano /etc/proftpd/proftpd.conf
Konfigurationsdatei
Dieser hier abgebildete Code ist die Konfigurationsdatei eines proFTPD Servers, gehe sie Stück für Stück durch und ergänze ggf. an deiner Config etwas. Ich hab mir Mühe gemacht die Konfigurationsdatei zu gut wie möglich durch Kommentare (#) zu ergänzen.
# Includes DSO modules Include /etc/proftpd/modules.conf # Set off to disable IPv6 support which is annoying on IPv4 only boxes. UseIPv6 on # If set on you can experience a longer connection delay in many cases. IdentLookups off ServerName "ein FTP-Server Name" # hier kannst du den Servernamen eintragen ServerType inetd # dieser Parameter gibt an, dass der proFTPD als inetd-Server gestartet wird DeferWelcome off MultilineRFC2228 on DefaultServer on ShowSymlinks on TimeoutNoTransfer 600 TimeoutStalled 600 TimeoutIdle 1200 DisplayLogin welcome.msg DisplayChdir .message true ListOptions "-l" DenyFilter \*.*/ # Use this to jail all users in their homes DefaultRoot ~ # dieser Parameter lässt zu, dass sich Systembenutzer (oder virtuelle User) in ihr Home (mit ihrem Passwort) verbinden können # Users require a valid shell listed in /etc/shells to login. # Use this directive to release that constrain. RequireValidShell off # nicht nur Systembenutzer dürfen sich einloggen (wird für einen anonymen Zugang oder virtuellen Benutzer benötigt) #virtueller user - einstellungen AuthUserFile /etc/proftpd/ftpd.passwd # dieser Parameter erlaubt virtuelle Benutzer AuthPAM off # ...und dieser # Port 21 is the standard FTP port. Port 21 # der Port, auf dem der FTP-Server horchen soll (Standard: 21) # To prevent DoS attacks, set the maximum number of child processes # to 30. If you need to allow more than 30 concurrent connections # at once, simply increase this value. Note that this ONLY works # in standalone mode, in inetd mode you should use an inetd server # that allows you to limit maximum number of processes per service # (such as xinetd) MaxInstances 30 # maximale Verbindungen zum Server # Set the user and group that the server normally runs at. User proftpd Group nogroup # Umask 022 is a good standard umask to prevent new files and dirs # (second parm) from being group and world writable. Umask 022 022 # Normally, we want files to be overwriteable. AllowOverwrite on TransferLog /var/log/proftpd/xferlog SystemLog /var/log/proftpd/proftpd.log <IfModule mod_quotatab.c> QuotaEngine off </IfModule> <IfModule mod_ratio.c> Ratios off </IfModule> # Delay engine reduces impact of the so-called Timing Attack described in # http://security.lss.hr/index.php?page=details&ID=LSS-2004-10-02 # It is on by default. <IfModule mod_delay.c> DelayEngine on </IfModule> <IfModule mod_ctrls.c> ControlsEngine off ControlsMaxClients 2 ControlsLog /var/log/proftpd/controls.log ControlsInterval 5 ControlsSocket /var/run/proftpd/proftpd.sock </IfModule> <IfModule mod_ctrls_admin.c> AdminControlsEngine off </IfModule> # This is used for FTPS connections #Include /etc/proftpd/tls.conf # wenn aktiviert ist eine verschlüsselte Verbindung möglich (# entfernen und /etc/proftpd/tls.conf konfigurieren) # Diese Konfiguration ermöglicht einen anonymen Zugang in das Verzeichnis /home/ftp ohne Schreibrechte # (dieser Code steht bereits in deiner Konfigurationsdatei) # Du musst, falls du einen anonymen Zugang willst einfach die Rauten (#) entfernen ####### Anfang anonymer Zugang ####### <Anonymous ~ftp> User ftp Group nogroup # We want clients to be able to login with "anonymous" as well as "ftp" UserAlias anonymous ftp # Cosmetic changes, all files belongs to ftp user DirFakeUser on ftp DirFakeGroup on ftp RequireValidShell off # Limit the maximum number of anonymous logins MaxClients 10 # We want 'welcome.msg' displayed at login, and '.message' displayed # in each newly chdired directory. DisplayLogin welcome.msg DisplayChdir .message # Limit WRITE everywhere in the anonymous chroot <Directory *> <Limit WRITE> DenyAll </Limit> </Directory> ## Uncomment this if you're brave. # <Directory incoming> # # Umask 022 is a good standard umask to prevent new files and dirs # # (second parm) from being group and world writable. # Umask 022 022 # <Limit READ WRITE> # DenyAll # </Limit> # <Limit STOR> # AllowAll # </Limit> </Directory> </Anonymous> ###### Ende anonymer Zugang ######## # Zusätzliche Parameter <Global> DefaultTransferMode binary # binärer Transfermode RootLogin off # root darf sich nicht einloggen (Sicherheitsaspekt) -> Dockstar-User sollten diesen Parameter deaktivieren (# davor), ansonsten können sie sich nicht mit root einloggen </Global> # limit Direktive ist optional <limit LOGIN> AllowUser anonymous,ftp,user1,user2 ^ftp # nur User, die hier stehen dürfen sich einloggen (anonymous, ftp werden für anonymen Zugang gebraucht) #AllowGroup group1 # alternativ auch mit Gruppen möglich (# entfernen) DenyALL # der Rest wird verweigert </limit>
Zusätzlich Schritte
Rechte anpassen
Der anonyme Zugang wird jetzt nach /home/ftp
oder /srv/ftp/
(einfach schauen, welcher der beiden Ordner existiert) geleitet (falls in der Konfigurationsdatei so festgelegt), dieses Verzeichnis kann man nun mit Dateien füllen, die jede herunterladen darf, allerdings müssen danach noch die Rechte angepasst werden:
user@server:~$ sudo chmod 755 -R /home/ftp/ # so oder user@server:~$ sudo chmod 755 -R /srv/ftp/ # so
proFTPD neustarten
um den Dienst neustarten zu können muss folgender Befehl ausgeführt werden: und anschließend proFTPD selbst:
user@server:~$ sudo service proftpd restart
Dabei erscheint folgende (Fehler-)Meldung, die getrost ignoriert werden kann:
ProFTPd is started from inetd/xinetd.
Nach jeder Änderung der Konfigurationsdatei muss der Befehl sudo service proftpd restart
ausgeführt werden.
Virtuelle User anlegen
Falls in der Konfigurationsdatei richtig konfiguriert, können virtuelle User (müssen angelegt werden) sich in ein beliebiges, festgelegtes Verzeichnis auf den FTP-Server verbinden .
Beispiel mit /var/www (Webserververzeichnis)
Da der Benutzer www-data der einzige Benutzer (außer root) ist, der dort vollen Schreibschutz hat, brauchen wir dessen Benutzerid (uid) und Gruppenid (gid), diese finden wir so heraus:
user@server:~$ id www-data
auf diesem System ist diese in beiden Fällen 33. Nun wechselt man in das Verzeichnis /etc/proftpd/:
user@server:~$ cd /etc/proftpd/
und führen folgenden Befehl aus
user@server:/etc/proftpd/$ sudo ftpasswd --passwd --name VIRTUELLERBENUTZER --uid 33 --gid 33 --home /var/www/ --shell /bin/false
anschließend müssen wir zwei mal ein Passwort eingeben (mit Eingabetaste bestätigen).
Nach dem Neustart des FTP-Servers:
user@server:~$ sudo service proftpd restart
kann sich nun ein virtueller Benutzer mit dem Benutzernamen VIRTUELLERBENUTZER
in /var/www/
mit dem festgelegtem Passwort einloggen und kann dort mit den Rechten von www-data schreiben.
Grober Ablauf
user@server:~$ id <benutzer> user@server:~$ cd /etc/proftpd/ user@server:/etc/proftpd/$ sudo ftpasswd --passwd --name VIRTUELLERBENUTZER --uid <Benutzerid> --gid <Gruppenid> --home /Verzeichnis --shell /bin/false user@server:~$ sudo service proftpd restart
Mögliche Fehlermeldunge
ftpasswd: /bin/false is not among the valid system shells. Use of ftpasswd: "RequireValidShell off" may be required, and the PAM ftpasswd: module configuration may need to be adjusted.
Diese Fehlermeldung kann eigentlich ignoriert werden, so lange der angelegte Benutzer nach einem Neustart von proFTPD funktioniert (siehe hier).