server:pure-ftpd

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
server:pure-ftpd [2014/04/22 22:10] stserver:pure-ftpd [2014/04/25 15:58] (aktuell) – [Benutzerdatenbank von pure-ftpd verwalten] st
Zeile 1: Zeile 1:
 +====== 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:<code>groupadd ftpgroup
 +  useradd -g ftpgroup -d /dev/null -s /usr/bin/false ftpuser</code>
 +  * Verzeichnis für [[netzwerke:FTP]]-User anlegen: <code>mkdir -p /srv/ftp
 +  chown ftpuser:ftpgroup /srv/ftp</code>
 +
 +
 +==== Benutzerdatenbank von pure-ftpd verwalten ====
 +
 +Das Handbuch (''man pure-pw'') zeigt eine Menge Optionen:
 +
 +<file>
 +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]
 +</file>
 +
 +Die Optionen werden (etwas ungewöhlich) durch ein wrapper-Script geparst: ''/usr/sbin/pure-ftpd-wrapper'', siehe man-page: <code bash>man pure-ftpd-wrapper</code>
 +
 +=== Benutzerdatenbank aktivieren ===
 +
 +Die unterstützten Mechanismen sind in ''/etc/pure-ftpd/auth'' per Symlink aktiviert. Standardmäßig sind unix und PAM aktiviert
 +<file>
 +65unix -> ../conf/UnixAuthentication
 +70pam -> ../conf/PAMAuthentication
 +</file>
 +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): <code>mkdir -p /srv/ftp/USER
 +chgrp ftpgroup /srv/ftp/USER</code>
 +  - Benutzer zur pure-ftpd-Datenbank hinzufügen:<code>pure-pw useradd USER -u ftpuser -d /srv/ftp/USER</code>
 +  
 +Ein komplexeres Beispiel: Der Benutzer Adam mit der Benutzer-ID "AdamBinIch" und der Gruppe "Mensch" mit dem Homeverzeichnis ''/srv/www/Adam'' anzulegen: <code bash>pure-pw useradd Adam -u AdamBinIch -g Mensch -d /srv/www/Adam</code>
 +
 +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:
 +
 +<file>
 +geheimes Passwort
 +geheimes Passwort
 +</file>
 +nun leiten wir die Datein auf die Standardeingabe (stdin) von pure-pw: <code bash>pure-pw useradd Adam -u AdamBinIch -g Mensch -d /srv/www/Adam < Passwort.txt </code>
 +
 +
 +=== FTP-Benutzer entfernen ===
 +
 +<code bash>
 +pure-pw userdel BENUTZER
 +pure-pw mkdb
 +</code>
 +
 +=== FTP-Benutzer - Passwort ändern ===
 +
 +<code bash>
 +pure-pw passwd BENUTZER
 +pure-pw mkdb
 +</code>
 +
 +=== 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' 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''):
 +<file>
 +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'],
 +</file>
 +
 +
 +
 +===== 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:
 +<file>
 +pure-ftpd: (?@?) [ERROR] Unable to switch capabilities : Operation not permitted
 +</file>
 +
 +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: <code>apt-get source pure-ftpd</code>
 +  - <code>cd /pureftpd-1.0.21/debian</code>
 +  - <code>nano rules</code>
 +  - die Zeile beginnend mit "optflags" suchen und hinten "<nowiki>--</nowiki>without-capabilities" dranhängen:<file>optflags=--with-everything --with-largefile --with-pam --with-privsep --with-tls --without-capabilities</file>
 +  - abspeichern ("STRG-X" und "J")
 +  - cd ..
 +  - Das Paket muss neu gebaut werden: <code>dpkg-buildpackage</code>
 +    - den folgenden Fehler<file>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.</file> lässt sich schnell durch die Installation von ''dpkg-dev'' beheben: <code>aptitude install dpkg-dev</code>
 +    - Falls gleich eine Fehlermeldung wegen fehlender Abhängigkeiten kommt: <file>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</file>also alle diese Pakete nachinstallieren (Liste sortiert): <code>aptitude install debhelper libcap-dev libldap2-dev libmysqlclient15-dev libpam-dev libpq-dev libssl-dev po-debconf</code>
 +  - erneut dpkg-buildpackage aufrufen
 +  - cd ..
 +  - Nun können wir das Paket Installieren (Dateinamen können anders lauten!): <code>dpkg -i pure-ftpd_1.0.21-11.4_i386.deb pure-ftpd-common_1.0.21-11.4_all.deb</code>
 +  - pure-ftpd starten: <code>/etc/init.d/pure-ftpd start</code>