FTP Server, welche öffentlich genützt werden sollten nicht mit Systemusern laufen. Auf einem Linux-Host ist meist ein SSHd vorhanden, dessen Benutzung nicht immer erwünscht ist. Aus diesem Grund legt man virtuelle User an, die nicht am System vorhanden sind. So ist es u.a. auch möglich verschiedene Passwörter am System zu verwenden - was auch die Sicherheit erhöht.

Man mag einwerfen, dass man MySQL oder LDAP als Backend für die Benutzerverwaltung verwenden könne, nur sollte man dabei im Hinterkopf behalten, dass man damit von diesen Diensten abhängig ist.

Ziele dieser Anleitung:

  • Virtuelle User, keine Systemuser
  • Chroots
  • Anonymer Zugriff mit Upload-Möglichkeit
  • Warez-Trader aussperren

Installation der nötigen Pakete Da ich Gentoo-Linux benutze ist dieser Schritt sehr einfach:

Überprüfung der entsprechenden USE-Flags:
  • `ssl - Secure Socket Layer Unterstützung
  • caps - Linux capabilities library verwenden (Berechtigungen)
  • ldap - LDAP Unterstützung
  • mysql - mySQL Unterstützung
  • pam - PAM verwenden (Pluggable Authentication Modules)
  • postgres - postgresql Unterstützung
  • vchroot - Virtual chroots (security risc?)`

Die entsprechenden USE-Flags sollten - sofern sie globale Flags sind in der make.conf gesetzt werden. Paketspezifische Flags setzen wir in /etc/portage/package.use

Ich verwende für meine Installation "ssl caps -ldap -mysql -pam -postgres". Durch das Entfernen der unnötigen Flags bekommen wir eine schlankere Binary, was sich positiv auf die Performance des Systems auswirkt.

emerge -av pure-ftpd

Damit wäre der Teil der Installation für uns so weit abgeschlossen und wir können zur Konfiguration schreiten.

Konfiguration des Services

Die eigentliche Konfiguration des Systems findet (unter Gentoo Linux) in /etc/conf.d/pure-ftpd statt.

##Config file for /etc/init.d/pure-ftpd
##Comment variables out to disable its features, or change the values in it... ##

IS_CONFIGURED="no"

## FTP Server,Port (separated by comma) ##
## If you prefer host names over IP addresses, it's your choice :
## SERVER="-S ftp.rtchat.com,21"
## IPv6 addresses are supported.
## !!! WARNING !!!
## Using an invalid IP will result in server not starting and reporting
## a good start. Work is being done to solve that in:
## http://bugs.gentoo.org/show_bug.cgi?id=75861
#SERVER="-S 192.168.0.1,21"
SERVER="-S 21"

## Number of simultaneous connections in total, and per ip ##
MAX_CONN="-c 30"
MAX_CONN_IP="-C 3"

## Start daemonized in background ##
DAEMON="-B"

## Don't allow uploads if the partition is more full then this var ##
DISK_FULL="-k 75%"

## If your FTP server is behind a NAT box, uncomment this ##
#USE_NAT="-N"

## Authentication (others are 'pam', ...)##
## Further infos in the README file.
AUTH="-l puredb:/etc/pureftpd.pdb"

## Change the maximum idle time. (in minutes. default 15)
#TIMEOUT="-I 15"

## Use that facility for syslog logging. It defaults to 'ftp'
## Logging can be disabled with '-f none' .
#LOG="-f facility"

## Misc. Others ##
MISC_OTHER="-A -x -j -R -r -s -Z"

#
# Use these inside $MISC_OTHER
# More can be found on "http://pureftpd.sourceforge.net/README"
#
# -A [ chroot() everyone, but root ]
# -e [ Only allow anonymous users ]
# -E [ Only allow authenticated users. Anonymous logins are prohibited. ]
# -i [ Disallow upload for anonymous users, whatever directory perms are ]
# -j [ If the home directory of a user doesn't exist, auto-create it ]
# -M [ Allow anonymous users to create directories. ]
# -R [ Disallow users (even non-anonymous ones) usage of the CHMOD command ]
# -x [ In  normal  operation mode, authenticated users can read/write
#       files beginning with a dot ('.'). Anonymous users can't, for security reasons
#       (like changing banners or a forgotten .rhosts). When '-x' is used, authenticated
#       users can download dot-files, but not overwrite/create  them,  even  if they own
#       them. ]
# -X [ This  flag  is  identical  to  the  previous one (writing dot-files is prohibited), but in addition, users can't even *read* files and
#       directories beginning with a dot (like "cd .ssh"). ]
# -D [ List files beginning with a dot ('.') even when the client doesn't
#      append the '-a' option to the list command. A workaround for badly
#      configured FTP clients. ]
# -G [ Disallow renaming. ]
# -d [ Send various debugging messages to the syslog. ONLY for DEBUG ]
# -H [ By default, fully-qualified host names are logged. The '-H' flag avoids host names resolution. ]

Jetzt wo du die Config gelesen hast kannst du IS_CONFIGURED auf "yes" setzen, damit der Server startet. Diese Option sollte verhindern dass man einen unkonfigurierten Server online nimmt, was einem oftmals ungeahnte Probleme bereiten kann.

Anlegen der Benutzer

Zu allererst benötigen wir eine Datenbank in welche die Benutzerdaten eingetragen werden. Diese generieren wir mit dem pure-pw Tool:

pure-pw mkdb

Durch diesen Befehl werden die Dateien /etc/pureftpd.pdb und /etc/pureftpd.passwd angelegt. Erstere ist davon unsere Datenbank mit den Passwörtern. Um einen User anzulegen muss man dieser Datenbank einen Eintrag hinzufügen:

pure-pw useradd $USER /etc/pureftpd.pdb -u 100 -g 100 -d /path/to/homedir

Die angelegten User anzeigen geht mit folgendem Command:

pure-pw list -f /etc/pureftpd.pdb

Nun steht dem Serverstart nichts mehr im Wege, welchen wir mit /etc/init.d/pure-ftpd start durchführen um die Installation testen zu können.

Vorheriger Beitrag Nächster Beitrag