Pure-ftpd
Vorteil: sperrt standardmäßig User ein (chroot)
Links
- pure-ftpd Documentation for version 1.07 (large document)
Ansonsten ist in c´t 6/06 S. 247 eine längere Anleitung.
Verwaltung
grafische Oberflächen
Stammverzeichnis für alle FTP-Benutzer
Benutzerdatenbank von pure-ftpd verwalten
Das Handbuch (man pure-pw
) zeigt eine Menge Optionen:
NAME pure-pw - Manage virtual users files for Pure-FTPd SYNTAX pure-pw useradd login [-f passwd_file] [-F puredb_file] -u uid [-g gid] -D/-d home_directory [-c gecos] [-t download_bandwidth] [-T upload_bandwidth] [-n max number_of_files] [-N max_Mbytes] [-q upload_ratio] [-Q download_ratio] [-r <allow client host>/<mask>[,<ip>/<mask>]...] [-R <deny client host>/<mask>[,<ip>/<mask>]...] [-i <allow local host>/<mask>[,<ip>/<mask>]...] [-I <deny local host>/<mask>[,<ip>/<mask>]...] [-y <max number of concurrent sessions>] [-z <hhmm>-<hhmm>] [-m] pure-pw usermod login [-f passwd_file] [-F puredb_file] [-u uid] [-g gid] -D/-d home_directory -[c gecos] [-t download_bandwidth] [-T upload_bandwidth] [-n max_number_of_files] [-N max_Mbytes] [-q upload_ratio] [-Q download_ratio] [-r <allow client host>/<mask>[,<ip>/<mask>]...] [-R <deny client host>/<mask>[,<ip>/<mask>]...] [-i <allow local host>/<mask>[,<ip>/<mask>]...] [-I <deny local host>/<mask>[,<ip>/<mask>]...] [-y <max number of concurrent sessions>] [-z <hhmm>-<hhmm>] [-m] pure-pw userdel login [-f passwd_file] [-F puredb_file] [-m] pure-pw passwd login [-f passwd_file] [-F puredb_file] [-m] pure-pw show login [-f passwd_file] [-m] pure-pw mkdb [<puredb_database_file> [-f passwd_file]] [-F puredb_file] pure-pw list [-f passwd_file]
Die Optionen werden (etwas ungewöhlich) durch ein wrapper-Script geparst: /usr/sbin/pure-ftpd-wrapper
, siehe man-page:
man pure-ftpd-wrapper
Benutzerdatenbank aktivieren
Die unterstützten Mechanismen sind in /etc/pure-ftpd/auth
per Symlink aktiviert. Standardmäßig sind unix und PAM aktiviert
65unix -> ../conf/UnixAuthentication 70pam -> ../conf/PAMAuthentication
Soll pure-ftpd lediglich mit der pureDB laufen, dann müssen diese Symlinks gelöscht werden und ein neuer Symlink mit Ziel auf ../conf/PureDB
angelegt werden (ln -s ../conf/PureDB
). In dieser Datei steht dann der Ort der PureDB (standardmäßig: /etc/pure-ftpd/pureftpd.pdb
).
Benutzer auflisten
pure-pw list [USER]
FTP-Benutzer hinzufügen
- Heimatverzeichnis des neuen Benutzer erzeugen (kann auch automatisch erfolgen wenn CreateHomeDir=yes gesetzt ist):
mkdir -p /srv/ftp/USER chgrp ftpgroup /srv/ftp/USER
- Benutzer zur pure-ftpd-Datenbank hinzufügen:
pure-pw useradd USER -u ftpuser -d /srv/ftp/USER
Ein komplexeres Beispiel: Der Benutzer Adam mit der Benutzer-ID „AdamBinIch“ und der Gruppe „Mensch“ mit dem Homeverzeichnis /srv/www/Adam
anzulegen:
pure-pw useradd Adam -u AdamBinIch -g Mensch -d /srv/www/Adam
Neue Benutzer lassen sich auch über Script hinzufügen: die doppelte Bestätigung von pure-pw lässt sich mit einer Datei steuern die zwei mal das Passwort enthält.
Beispiel: Die Datei Passwortdatei „Passwort.txt“ enthält 2x das Passwort:
geheimes Passwort geheimes Passwort
nun leiten wir die Datein auf die Standardeingabe (stdin) von pure-pw:
pure-pw useradd Adam -u AdamBinIch -g Mensch -d /srv/www/Adam < Passwort.txt
FTP-Benutzer entfernen
pure-pw userdel BENUTZER pure-pw mkdb
FTP-Benutzer - Passwort ändern
pure-pw passwd BENUTZER
pure-pw mkdb
Benutzer-Datenbank aktualisieren
Nach jeder Änderung muss IMMER dieser Befehl ausgeführt werden (vorher werden keine Änderungen aktiv):
pure-pw mkdb
Standard-Vorgaben ändern (Debian)
Pure-FTPd starten
manueller Start:
/usr/sbin/pure-ftpd -A -B -i -s -l puredb:/etc/pure-ftpd/pureftpd.pdb -u 1000 -O clf:/var/log/pure-ftpd/transfer.log
Wichtige Startparameter
Parameter | Wirkung |
---|---|
-u [UID] | login nicht unter UID (Zahlenwert) erlauben |
-c [Zahl] | max. clients, Standard ist 50 |
-C [Zahl] | max. connections per ip |
-A | chroot everyone but root |
-B | start in background (daemonize) |
-k percentage → Disallow upload if the partition is more than percentage full | |
-w | Enable support for the FXP protocol (for non-anonymous users only) |
-E | Only allow authenticated login. Anonymous users are prohibited. |
-Y 1 | SSL aktiviert, pem-Datei wird als /etc/ssl/private/pure-ftpd.pem erwartet. |
nur Anonyme Benutzer erlauben
(Übersetzung)
- -e → Only allow anonymous users to log in. leave out if usual users should login
- -i → Disallow upload for anonymous users
- -s → Don't allow anonymous users to retrieve files owned by „ftp“ (other anonymous users)
Anonymous users are authenticated in any of three ways:
- The user logs in as „ftp“ or „anonymous“ and there is an account called „ftp“ with an existing home directory. This server does not ask anonymous users for an email address or other password.
- The user connects to an IP address which resolves to the name of a directory in /etc/pure-ftpd (or a symlink in that directory to a real directory), and there is an account called „ftp“ (which does not need to have a valid home directory). Ftpd does a chroot(2) to the relevant base directory when an anonymous user logs in.
Note that ftpd allows remote users to log in as root if the password is known and -u not used.
TLS aktivieren
- Zertifikat und Schlüssel in einer .pem-Datei nach
/etc/ssl/private/pure-ftpd.pem
kopieren - echo 1 > /etc/pure-ftpd/conf/TLS
- /etc/init.d/pure-ftpd restart (Bei den Startparametern sollte -Y 1 stehen)
Mit -Y 2 oder -Y 3 kann man TLS durchdrücken, siehe README.TLS
Konfiguration durch Textdateien per pure-ftpd-wrapper
Zumindest auf Debian ist es möglich per Textdateien die Startparameter von pure-ftpd zu beeinflussen. Die Konfigurationsdateien liegen unterhalb /etc/pure-ftpd/ im „conf“ und „auth“ Ordnern.
Das Perl-Skript /usr/sbin/pure-ftpd-wrapper
kümmert sich um die Auswertung, hier finden sie auch mögliche Dateinamen. Z. B. legt man /etc/pure-ftpd/conf/TLS
mit dem Inhalt „1“ an, daraus macht der Wrapper „-Y 1“. Einige Parameter heißen auch anders (z. B. MaxDiskUsage) deshalb kann man im Skript selber nachschauen was alles ausgewertet wird.
In /etc/pure-ftpd/conf/
können dies bei Debian Lenny folgende Namen sein (nach dem Pfeil sieht das den wirklichen Parameter, mögliche Werte finden sich in man pure-ftpd
):
AllowAnonymousFXP' => ['-W'], AllowDotFiles' => ['-z'], AllowUserFXP' => ['-w'], AltLog' => ['-O %s', \&parse_string], AnonymousBandwidth' => ['-t %s', \&parse_number_1_2], AnonymousCanCreateDirs' => ['-M'], AnonymousCantUpload' => ['-i'], AnonymousOnly', => ['-e'], AnonymousRatio' => ['-q %d:%d', \&parse_number_2], AntiWarez' => ['-s'], AutoRename' => ['-r'], Bind' => ['-S %s', \&parse_string], BrokenClientsCompatibility' => ['-b'], CallUploadScript' => ['-o'], ChrootEveryone' => ['-A'], CreateHomeDir' => ['-j'], CustomerProof' => ['-Z'], Daemonize' => ['-B'], DisplayDotFiles' => ['-D'], DontResolve' => ['-H'], ForcePassiveIP' => ['-P %s', \&parse_string], FortunesFile' => ['-F %s', \&parse_filename], IPV4Only' => ['-4'], IPV6Only' => ['-6'], KeepAllFiles' => ['-K'], LimitRecursion' => ['-L %d:%d', \&parse_number_2], LogPID' => ['-1'], MaxClientsNumber' => ['-c %d', \&parse_number_1], MaxClientsPerIP' => ['-C %d', \&parse_number_1], MaxDiskUsage' => ['-k %d', \&parse_number_1], MaxIdleTime' => ['-I %d', \&parse_number_1], MaxLoad' => ['-m %d', \&parse_number_1], MinUID' => ['-u %d', \&parse_number_1], NATmode' => ['-N'], NoAnonymous' => ['-E'], NoChmod' => ['-R'], NoRename' => ['-G'], NoTruncate' => ['-0'], PassivePortRange' => ['-p %d:%d', \&parse_number_2], PerUserLimits' => ['-y %d:%d', \&parse_number_2], ProhibitDotFilesRead' => ['-X'], ProhibitDotFilesWrite' => ['-x'], Quota' => ['-n %d:%d', \&parse_number_2], SyslogFacility' => ['-f %s', \&parse_word, 99], TLS' => ['-Y %d', \&parse_number_1], TrustedGID' => ['-a %d', \&parse_number_1], TrustedIP' => ['-V %s', \&parse_ip], Umask' => ['-U %s:%s', \&parse_umask], UserBandwidth' => ['-T %s', \&parse_number_1_2], UserRatio' => ['-Q %d:%d', \&parse_number_2], ' => ['-d'],
Pureftpd ohne Capabilities unter Debian Lenny selbst bauen
Auf einem virtuellen Server mit OpenVZ oder virtuozzo scheitert der Start von pure-ftpd mit folgender Fehlermeldung:
pure-ftpd: (?@?) [ERROR] Unable to switch capabilities : Operation not permitted
Um das Problem zu lösen muss pure-ftpd ohne capabilities kompiliert werden.
Vorbereitungen: dpkg-dev muss installiert sein (aptitude install dpkg-dev).
- mkdir tmp
- cd tmp
- Source-Paket mit folgendem Befehl herunterladen:
apt-get source pure-ftpd
cd /pureftpd-1.0.21/debian
nano rules
- die Zeile beginnend mit „optflags“ suchen und hinten „--without-capabilities“ dranhängen:
optflags=--with-everything --with-largefile --with-pam --with-privsep --with-tls --without-capabilities
- abspeichern („STRG-X“ und „J“)
- cd ..
- Das Paket muss neu gebaut werden:
dpkg-buildpackage
- den folgenden Fehler
sh: dpkg-source: command not found Entpack-Befehl »dpkg-source -x pure-ftpd_1.0.21-11.4.dsc« fehlgeschlagen. Überprüfen Sie, ob das Paket »dpkg-dev« installiert ist.
lässt sich schnell durch die Installation von
dpkg-dev
beheben:aptitude install dpkg-dev
- Falls gleich eine Fehlermeldung wegen fehlender Abhängigkeiten kommt:
dpkg-checkbuilddeps: Nicht erfüllte Bauabhängigkeiten: debhelper (>= 4.1.16) libpam-dev libcap-dev libldap2-dev libmysqlclient-dev | libmysqlclient15-dev libpq-dev libssl-dev po-debconf
also alle diese Pakete nachinstallieren (Liste sortiert):
aptitude install debhelper libcap-dev libldap2-dev libmysqlclient15-dev libpam-dev libpq-dev libssl-dev po-debconf
- erneut dpkg-buildpackage aufrufen
- cd ..
- Nun können wir das Paket Installieren (Dateinamen können anders lauten!):
dpkg -i pure-ftpd_1.0.21-11.4_i386.deb pure-ftpd-common_1.0.21-11.4_all.deb
- pure-ftpd starten:
/etc/init.d/pure-ftpd start