====== Pure-ftpd ====== Vorteil: sperrt standardmäßig User ein (chroot) ===== Links ===== * [[http://www.pureftpd.org/project/pure-ftpd|Pure-ftpd Homepage]] * **[[http://www.pureftpd.org/project/pure-ftpd/doc|Pure-ftpd Documentation]]** * [[http://ftp.ntu.edu.tw/ftp/pure-ftpd/doc/readme.pdf|pure-ftpd Documentation for version 1.07]] (large document) * [[http://www.howtoforge.com/pureftpd_mysql_virtual_hosting|Virtual Hosting With PureFTPd And MySQL (Incl. Quota And Bandwidth Management)]] * [[http://www.ro.kde.org/kcmpureftpd/|KcmPureftpd: KControl module for easily setting up pure-ftpd]] Ansonsten ist in [[http://www.heise.de/ct/|c´t]] 6/06 S. 247 eine längere Anleitung. ===== Verwaltung ===== ==== grafische Oberflächen ==== * [[http://lkr.sourceforge.net/kcmpureftpd/|kcmpureftpd]] ([[linux:KDE]]) * [[http://purify.sourceforge.net/|PureAdmin]] ([[linux:GNOME]]) * [[http://machiel.generaal.net/index.php?subject=user_manager_pureftpd|User manager for PureFTPd]] (Web) ==== Stammverzeichnis für alle FTP-Benutzer ==== * Gruppe und Benutzer für [[netzwerke:FTP]]-User anlegen:groupadd ftpgroup useradd -g ftpgroup -d /dev/null -s /usr/bin/false ftpuser * Verzeichnis für [[netzwerke:FTP]]-User anlegen: mkdir -p /srv/ftp chown ftpuser:ftpgroup /srv/ftp ==== 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 /[,/]...] [-R /[,/]...] [-i /[,/]...] [-I /[,/]...] [-y ] [-z -] [-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 /[,/]...] [-R /[,/]...] [-i /[,/]...] [-I /[,/]...] [-y ] [-z -] [-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 [ [-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) ==== Zwischen standalone oder daemon wechseln ([[debian:Debian]]/[[ubuntu:Ubuntu]]): dpkg-reconfigure pure-ftpd-common ===== 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 ==== FIXME (Ü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 [[http://download.pureftpd.org/pub/pure-ftpd/doc/README.TLS|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 [[programmiersprachen: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: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 Fehlersh: 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-debconfalso 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