Vorteil: sperrt standardmäßig User ein (chroot)
Ansonsten ist in c´t 6/06 S. 247 eine längere Anleitung.
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
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
).
pure-pw list [USER]
mkdir -p /srv/ftp/USER chgrp ftpgroup /srv/ftp/USER
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
pure-pw userdel BENUTZER pure-pw mkdb
pure-pw passwd BENUTZER
pure-pw mkdb
Nach jeder Änderung muss IMMER dieser Befehl ausgeführt werden (vorher werden keine Änderungen aktiv):
pure-pw mkdb
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
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. |
(Übersetzung)
Anonymous users are authenticated in any of three ways:
Note that ftpd allows remote users to log in as root if the password is known and -u not used.
/etc/ssl/private/pure-ftpd.pem
kopierenMit -Y 2 oder -Y 3 kann man TLS durchdrücken, siehe README.TLS
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'],
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).
apt-get source pure-ftpd
cd /pureftpd-1.0.21/debian
nano rules
optflags=--with-everything --with-largefile --with-pam --with-privsep --with-tls --without-capabilities
dpkg-buildpackage
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
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
dpkg -i pure-ftpd_1.0.21-11.4_i386.deb pure-ftpd-common_1.0.21-11.4_all.deb
/etc/init.d/pure-ftpd start