How-To: ProFTPD mit virtuellen Usern

Ich bin der festen Überzeugung, dass jeder Mensch, der einen FTP-Server verwaltet, früher oder später auch virtuelle User anlegen möchte. Damit auch der geneigte Leser dieses How-Tos versteht was ich meine erkläre ich vielleicht erst einmal, was es mit den virtuellen Usern auf sich hat und warum sie so toll sind. Üblicherweise haben nur Leute auf den FTP-Server Zugriff, die auch einen Benutzeraccount im System haben. Das bringt zum einen den Nachteil, dass für jeden Menschen, der Zugang zum FTP-Walhalla haben soll auch ein Nutzeraccount auf dem System angelegt werden muss; zum anderen stellt das Vorgehen ein Sicherheitsrisiko dar: Da FTP auch das Passwort unverschlüsselt überträgt, ist es mit einem Packetsnifffer nicht weiter schwer, eben jenes herauszufinden (man berichtige mich, wenn ich hier falsch liege). Der Angreifer hat dann jedoch nicht zur Zugang zu dem FTP-Server, sondern zu allen Daten des Betriebssystems, die für jeden ‘normalen’ Nutzer lesbar sind.
Um diese Unannehmlichkeiten zu beseitigen bietet der von mir genutzte ProFTPD das Konzept der virtuellen User an: diese User sind nicht real auf dem System vorhanden, sondern existieren praktisch nur für den FTP-Server. Die Kenntnis des Passworts eines Users durch einen Angreifer stellt dann nur noch für die auf dem FTP-Account des Nutzers hinterlegten Daten ein Risko dar. Die virtuellen User können beispielsweise in einer MySQL-Datenbank festgelegt werden, was sich auf Grund der Performance bei FTP-Servern mit vielen Nutzeraccounts eignet. Ein anderer Weg, der meiner Meinung nach einfacher zu handlen und für Systeme mit wenigen Benutzern sehr gut geeignet ist, ist das Nutzen eines sogenannten AuthUserFiles. Ein AuthUserFile entspricht von der Syntax der /etc/passwd-Datei, in dem die Benutzer eines unixoiden Betriebssystems festgelegt werden. Der Unterschied ist jedoch, dass das AuthUserFile nur für den ProFTP-Daemon gilt: User, die in dem File definiert sind, existieren nur für den FTP-Server.
So viel zu Theorie, die Praxis kann auch erfreulich schnell abgehandelt werden, da der ProFTPD ein nützliches Werkzeug für all jene mitbringt, die die Vorzüge von virtuellen Usern nutzen möchte: ftpasswd. Um einen virtuellen User anzulegen, geht man einfach wie folgt vor:

cd /etc/proftpd
ftpasswd --passwd --name username --uid 9999 --home /pfad/zum/userdir --shell /bin/false

Der User, unter dem der FTP-Server läuft (bei Debian: proftpd) muss Leseberechtigungen für diese Datei haben!

ftpasswd verlangt nun, dass ein Passwort für den virtuellen User festgelegt, und einmal bestätigt wird.

In dem Verzeichnis befindet sich nun eine Datei mit dem Namen ftpd.passwd, welche Informationen zu den FTP-Benutzern enthält. Jetzt muss dem FTP-Server nur noch mitgeteilt werden, dass er auf diese Datei auch Zugriff haben soll. Das geschieht in der Configdatei, welche unter /etc/proftpd/proftpd.conf zu finden ist. Es ist sicherzustellen, dass die Zeile

DefaultRoot ~

in genau dieser Form in der Config zu finden ist, wenn man sicherstellen möchte, dass jeder Benutzer nur Zugriff auf den Ordner inkl. Unterordner hat, die ftpasswd als /pfad/zum/userdir übergeben wurden. Des weiteren muss noch festgelegt werden, wo der Server das AuthUserFile findet. Das geschieht durch die Zeile

AuthUserFile /etc/proftpd/ftpd.passwd

Um jetzt noch zu verhindern, dass sich ‘normale’ Systemuser via FTP einloggen können, wird die Zeile

AuthPAM off

an die Konfigurationsdatei angefügt.

Auch dass wir in der ftpasswd-Datei /bin/false als Shell für den User festgelegt haben muss ProFTPD mitgeteilt werden, da dies eine ungültige Shell ist:

RequireValidShell off

Diese Zeile legt fest, dass für die Benutzer des Servers keine gültige Shell erforderlich ist.

Unter Umständen ist in der proftpd.conf bereits festgelegt, dass sich nur User mit Zugehörigkeit zu einer bestimmten Benutzergruppe mit dem FTP-Server verbinden dürfen. In den Debian Etch Standardeinstellungen sorgen dafür die Zeilen

<Limit LOGIN>
deny !ftpuser
</Limit>

Hier haben lediglich Benutzer mit Zugehörigkeit zu der Gruppe ftpuser das Recht, sich mit dem Server zu verbinden. Um sich dennoch mit dem virtuellen User verbinden zu können kann man entweder diese Zeilen auskommentieren (inwiefern das zu empfehlen ist, vermag ich nicht zu sagen), oder aber wieder einmal ftpasswd bemühen, welches uns auch erlaubt, virtuelle Gruppen anzulegen:

ftpasswd --group --name ftpuser -gid 9999

Die jetzt angelegte Datei ftpd.group wird wieder in die proftpd.conf eingebunden:

AuthGroupFile /etc/proftpd/proftpd.conf --user username

Auch hierbei muss wieder darauf geachtet werden, dass die Datei für den FTP-Server lesbar ist. Nach einem Restart des FTP-Servers sollte man sich jetzt auch mit virtuellen Usern einloggen können. Ich hoffe, dass ich dem einen oder anderen vielleicht helfen konnte. Eventuell wird dieses How-To mit der Beschreibung des Quotasystems zur Begrenzung des Speicherplatzes pro User erweitert; vielleicht wird das aber auch in ein anderes How-To ausgelagert. Viel Spaß mit dem ganzen FTP-Geraffel ;)

2 Kommentare zu How-To: ProFTPD mit virtuellen Usern

  1. Geschrieben am 2. Juni 2008 um 22:44 | Permalink

    Es stimmt, dass das Passwort bei FTP unverschlüsselt übertragen und von jedem auf der Leitung mitgelesen werden kann. Wenn sich ein solcher User auch noch einloggen kann, hat ein Angreifer mit einem aufgeschnappten Passwort schon eine große Hürde genommen.

    Aber ein User muss nicht unbedingt die Rechte zum Einloggen haben. Wenn man dem User als Shell ein /bin/false einträgt, scheitert jeder Login, und der Angreifer kann mit dem Passwort auch “nur” FTP machen. (Manchmal ist das auch schlimm genug.) Damit kann der Angreifer also auch nichts mehr anfangen. Wo es um “kleinere” Server geht, gehe ich für FTP-Accounts eigentlich immer so vor.

    Damit die normalen Tools für die Useradministration auch ein /bin/false als Shell akzeptieren, muss diese “Shell” gegebenenfalls in die /etc/shells eingetragen werden.

    Bei großem Traffic oder vielen Usern führt aber kein Weg an der Einrichtung virtueller User vorbei…

  2. Geschrieben am 4. August 2010 um 8:14 | Permalink

    Hallo,

    danke für das gut beschriebene Tutorial! An folgender Stelle bin ich aber nicht weitergekommen:

    “Die jetzt angelegte Datei ftpd.group wird wieder in die proftpd.conf eingebunden:

    AuthGroupFile /etc/proftpd/proftpd.conf –user username”

    Das müsste doch folgendermaßen heißen?
    “AuthGroupFile /etc/proftpd/ftpd.group”

    Außerdem müsste man noch mit folgendem Befehl den User der Gruppe hinzufügen?
    “ftpasswd –group –member “Benutzername” –name ftpuser –gid 9999″

    Anschließend konnte ich mich einwandfrei mit dem ftp server verbinden.

    Zur SSL Absicherung kann man sich noch folgende Seite anschauen:
    http://www.howtoforge.com/setting-up-proftpd-tls-on-debian-lenny

Einen Kommentar hinterlassen

last.fm