Pure-FTPd unterstützt virtual users. Wem das kein Begriff
sein sollte, hier in einem Satz: Virtuelle User sind User, die nur dem Programm bekannt sind
und nicht real auf dem System existieren.
Dies ist aus sicherheitstechnischen Gründen – und wegen der Verwaltung – sehr
praktisch.
Da die virtuellen User kein »richtiges« Benutzerkonto auf dem Rechner haben, können sie sich
auch nicht via Telnet oder SSH am Rechner anmelden. Somit schließt man eine nicht notwendige
Sicherheitslücke und vereinfacht das Usermanagement auf einen Schlag – auch wenn es zunächst
anders aussehen mag.
Zunächst muß ein »echter« Benutzer angelegt werden. In der Datei
README.Virtual-Users
ist bereits eine Anleitung enthalten, ich habe sie etwas
abgewandelt. Daher entspricht meine Variante nicht dem Vorschlag aus der eben erwähnten
Datei.
Der neue Benutzer wird mit
useradd -u 7777 -g 65534 -d /dev/null -s /etc ftpuser
angelegt. Die uid »7777« ist bei mir im System noch nicht belegt gewesen, daher habe ich
sie für den neuen Benutzer ftpuser
gewählt. Die verwendete gid »65534« entspricht
nogroup
.
Da diese Gruppe bereits existiert, konnte ich das in der Readme-Datei angegebene Anlegen
einer neuen Gruppe umgehen.
Anschließend können die virtuellen Benutzerkonten mit dem Befehl pure-pw
verwaltet
werden. Eine Auswahl der zur Verfügung stehenden Optionen:
pure-pw useradd userdel usermod passwd show mkdb
Nun kann ein virtueller Benutzer hinzugefügt werden:
pure-pw useradd joe -u ftpuser -g nogroup -d /home/ftp/joe
Mit diesem Aufruf wird ein virtueller Benutzer »joe« angelegt, welcher die Systemuser-ID
»ftpuser« verwendet und der Systemgruppe »nogroup« angehört. Nach der Eingabe des Befehls
wird nach einem Passwort für den Benutzer gefragt.
Sein Home-Verzeichnis /home/ftp/joe
wird noch nicht erstellt. Dies kann man mit dem
Startparameter -j
vom Pure-FTPd erledigen lassen. Sobald sich der Benutzer das erste
mal anmeldet, wir das Verzeichnis erstellt. Der »echte« Benutzer ftpuser
und die
Gruppe nogroup
werden dabei als Benutzer und Gruppe dem neu angelegten Verzeichnis
zugeordnet.
Noch kann sich der Benutzer aber nicht anmelden, da er nur angelegt, aber noch nicht
initialisiert worden ist. Dies bedeutet im Klartext: Es wurde zwar ein Eintrag in der Datei
/etc/Pure-FTPd.passwd
erstellt, auf diesen greift aber der Pure-FTPd nicht zu. Es
muß erst eine Database im Binärformat erstellt werden:
pure-pw mkdb
Die Datei /etc/pureftpd.passwd
wird in die Datei /etc/pureftpd.pdb
»übersetzt«. Jetzt muß der Pure-FTPd allerdings noch per Startparameter die Information
erhalten, dass er auch darauf zugreifen soll. Hier ein Beispiel für die Startparameter für
den Pure-FTPd, damit virtuelle User unterstützt, und deren Verzeichnisse beim ersten Login
angelegt werden:
pure-ftpd -j -l puredb:/etc/pureftpd.pdb
Natürlich muß der bisher laufende Pure-FTPd neu gestartet werden (beim standalone-Modus),
oder der inetd
neu gestartet werden (kill -i <pid>
), damit die
Änderungen in der /etc/inetd.conf
übernommen werden.
Sollte danach die folgende Fehlermeldung erscheinen...
421 Unknown authentication method: puredb:/etc/pureftpd.pdb
...wurde Pure-FTPd ohne Unterstützung für alternative Authentifizierungsmöglichkeiten
kompiliert. Mit der Option --with-everything
sollte sie auf alle Fälle unterstützt
werden.
Sollte dies bereits geschehen sein und dennoch diese Fehlermeldung erscheinen, so könnte beim
Aufruf des Servers oder aber beim anlegen der pureftpd.pdb
ein kleiner
Buchstabendreher die Ursache des Problems sein.
Vorneweg ein paar wichtige Informationen: Nach einer Änderung der Daten eines Benutzers
oder nach dem Anlegen eines neuen Benutzers muß erneut pure-pw mkdb
aufgerufen
werden. Die Änderungen/das Anlegen wird nicht sofort in die Datenbank übernommen sondern in
einer anderen Datei zwischengespeichert. Erst nach dem Aufruf wird die neue Datenbank
erstellt.
Ein Neustart des Servers ist nicht notwendig, da die Datenbank bei jedem Aufruf abgefragt
wird. Es wird schließlich nur der Inhalt der Datenbank verändert, nicht ein Startparameter
des Servers.
Sollte der Server vom inetd aus gestartet werden wird er so oder so bei einer neuen
Verbindung neu gestartet. So. Nun aber zum eigentlichen Thema, dem anpassen von
Benutzereinstellungen.
Man kann für jeden virtuellen Benutzer diverse Einstellungen bzw. Beschränkungen einrichten.
Die bereits zugeteilten Einstellungen kann man sich mit dem folgenden Befehl anzeigen
lassen:
pure-pw show joe
Die Ausgabe sieht so (oder so ähnlich) aus:
Login : joe Password : CONTENT$fALoMD40$Wf.UzMQkvyNeYHHGdQjrp1 UID : 7777 (ftpuser) GID : 65534 (nogroup) Directory : /home/ftp/joe/./ Full name : Download bandwidth : 0 Kb (unlimited) Upload bandwidth : 0 Kb (unlimited) Max files : 0 (unlimited) Max size : 0 Mb (unlimited) Ratio : 0:0 (unlimited:unlimited) Allowed local IPs : Denied local IPs : Allowed client IPs : Denied client IPs : Time restrictions : 0000-0000 (unlimited) Max sim sessions : 0 (unlimited)
Wie man sehen kann gibt es eine Anzahl von Möglichkeiten, die Benutzer individuell
einzurichten. Insbesondere die Ratio-Einstellungen und natürlich auch die
Bandbreiten-Kontrolle wären auf LANs interessant. Für den Hosting-Einsatz ist die
Beschränkung des Speicherplatzes sehr wichtig. Hierzu gleich ein einfaches Beispiel: Der
Speicherplatz des Benutzers joe
soll auf 100 MB beschränkt werden:
pure-pw usermod joe -N 100
Anschließend wieder mit pure-pw show joe
kontrollieren, ob die Änderung wie
gewünscht übernommen worden ist:
Login : joe Password : CONTENT$fALoMD40$Wf.UzMQkvyNeYHHGdQjrp1 UID : 7777 (ftpuser) GID : 65534 (nogroup) Directory : /home/ftp/joe/./ Full name : Download bandwidth : 0 Kb (unlimited) Upload bandwidth : 0 Kb (unlimited) Max files : 0 (unlimited) Max size : 100 Mb (enabled) Ratio : 0:0 (unlimited:unlimited) Allowed local IPs : Denied local IPs : Allowed client IPs : Denied client IPs : Time restrictions : 0000-0000 (unlimited) Max sim sessions : 0 (unlimited)
Wie man jetzt sehen kann, hat sich die Angabe von (unlimited)
in
(enabled)
geändert worden. Weiterhin sind die 100 MB als Grenze eingetragen
worden.
Die übrigen Einstellungen wie beispielsweise Quotas und die Beschränkungen des Zugriffs von
bzw. auf bestimmte IPs werden auf die gleiche Art und Weise dem Benutzer zugeordnet.
Mir mißfällt zwar die Übersetzung »Heimatverzeichnis« für »home directory«, aber diese wird
nunmal oft verwendet und ist somit eindeutig. Dafür habe ich es bei »Ratio« belassen und
nicht in »Verhältnis« übersetzt.
Hier nun der aus der Hilfe zu pure-pw
übernommene Teil mit den Optionen vom Aufruf
pure-pw usermod
:
pure-pw usermod <Benutzername> -f <Passwortdatei> -u <uid> [-g <gid>] -D/-d <Heimatverzeichnis> -[c <gecos>] [-t <Download Bandbreite>] [-T <Upload bandbreite>] [-n <maximale Anzahl der Dateien>] [-N <max Mbyte>] [-q <Upload Ratio>] [-Q <Download Ratio>] [-r <erlaube Client-IP>/<mask>] [-R <verbiete Client-IP>/<mask>] [-i <erlaube lokale IP>/<mask>] [-I <verbiete lokale IP>/<mask>] [-y <maximale Anzahl von gleichzeitigen Sitzungen>] [-z <hhmm>-<hhmm>] [-m]
Noch ein paar Hinweise zu den Schaltern:
-d
<heimatverzeichnis> : chroot Benutzer (empfohlen)
-D
<heimatverzeichnis> : kein chroot des Benutzers
-y 0
: unbegrenzte Anzahl von gleichzeitigen Sitzungen
-m
: anschließend die /etc/pureftpd.pdb Datenbank aktualisieren
Um einen 1:10 Ratio einzurichten, -q 1 -Q 10
angeben
Um den Zugriff ausschließlich zwischen 9 Uhr morgens und 6 Uhr abends, -z 0900-1800
angeben
Und – wie schon geschrieben – nicht vergessen mit pure-pw mkdb
die Änderungen in die
Datenbank zu übernehmen!
Standardmäßig ist beim Pure-FTPd ein Zugriff über einen anonymen Benutzer möglich. Sowohl
über den Benutzernamen »ftp« als auch über das als Alias verwendete »anonymous« ist die
Verbindung als anonymer Benutzer möglich. Allerdings müssen dafür einige Vorraussetzungen
erfüllt sein.
Die Benutzer nobody
, ftp
und die Gruppen nogroup
, ftp
müssen vorhanden sein. Dies kann man überprüfen, indem man mit cat /etc/passwd | grep
nobody
nach dem Benutzer nobody
sucht und das Gleiche mit ftp anstatt nobody
wiederholt. Bei den Gruppen lautet der Aufruf cat /etc/group | grep nogroup
bzw.
ftp
anstatt von nogroup
.
Sind die Benutzer und die Gruppen angelegt, so sollte anonymes FTP mit dem Pure-FTPd möglich
sein – sofern er dementsprechend gestartet worden ist.
Sollte ein Benutzer und/oder eine Gruppe fehlen, dann muss man ihn/sie anlegen. Zunächst muß
ein Verzeichnis für den FTP-User angelegt werden (sofern noch nicht vorhanden): mkdir
/home/ftp
.
Nun den Benutzer mit Gruppe anlegen. Bei dem von mir verwendeten Debian GNU/Linux darf man ab
der uid »1000« neue Benutzer definineren. Bis zur uid »999« sind sie für das System und für
die Paketinstallation reserviert. Standardmäßig bekommt der Benutzer ftp bei Debian (laut
mehreren Seiten im Web) die uid »101«. Bei anderen Distributionen kann sich dies
unterscheiden.
turanga:~# addgroup ftp Adding group ftp (101)... Done.
Nun muß der Benutzer ftp
angelegt werden. Er bekommt als gid die »101« von
geradeeben mit, sollte sie differieren muß der Aufruf angepasst werden. Vorsicht: Damit der
Aufruf nicht die Formatierung sprengt, habe ich einen Zeilenumbruch eingebaut.
turanga:~# adduser --system --no-create-home --gecos "Ftp user" --gid 101 --disabled-password ftp Adding system user ftp... Adding new user ftp (101) with group ftp. Not creating home directory.
Der Benutzer ftp
hat die uid »101« erhalten – zumindest auf meinem System. Nun
kann das Home-Verzeichnis vom Benutzer ftp
per CHOWN richtig konfiguriert
werden:
chown 101:101 /home/ftp
Zu beachten sind auch in diesem Fall natürlich die richige uid und gid. Eigentlich sollte
nun anonymes FTP problemlos funktionieren. Sowohl der Benutzer ftp
als auch der
Benutzer anonymous
lassen eine Anmeldung als anonymer Benutzer zu.
Im Zweifelsfall müssen die neu angelegten User/Gruppen dem Pure-FTPd erst »bekanntgemacht«
werden. Spätestens nach einem Reboot sollte also alles wie gewünscht funktionieren.
Die umask (Schalter -U) gibt an, welche Zugriffsrechte die hochgeladenen Dateien zugewiesen bekommen. Hierzu ein Beispiel: Der Besitzer der Dateien sollen rwx-Zugriffe erhalten, die Gruppe darf lediglich lesen und Others haben keine Zugriffsrechte. Etwas übersichtlicher dargestellt:
rwx r-- --
Es würde beim chmod
-Befehl dem Wert 740
entsprechen. Der Wert der umask
wird anders gebildet. Man nimmt als »Startwert« den Wert 777
und zieht davon den
»normalen« Wert des chmod-Befehls Stelle um Stelle ab. Somit ergibt »777« weniger »740« die
umask 037
.