Thema VSFTP: Sicherer FTP-Server mit virtuellen Benutzern
**VSFTP (Very Secure FTP Daemon)** ist der Standard-FTP-Server unter vielen Linux-Distributionen. Er zeichnet sich durch seine Stabilität, Geschwindigkeit und vor allem seine **Sicherheit** aus. Ein modernes Setup nutzt **virtuelle Benutzer** (für eine vereinfachte Verwaltung) und erzwingt **TLS/SSL** für alle Daten- und Login-Verbindungen.
Abschnitt 1: Hauptkonfiguration (/etc/vsftpd.conf)
Die Konfiguration ist auf die Verwendung von **virtuellen Benutzern** über eine separate Datenbank (PAM) sowie die **Erzwingung von SSL/TLS** ausgelegt. Der Datenverkehr findet über den Pasv-Portbereich **30000-30999** statt.
# Allgemein / Listener
listen=YES
listen_port=21
listen_ipv6=YES
pasv_min_port=30000
pasv_max_port=30999
# Sicherheits- und Benutzer-Einstellungen
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
# Virtuelle Benutzer: Der Schlüssel zur Trennung von Login und System-User
virtual_enable=YES
guest_enable=YES
guest_username=ftp
nopriv_user=ftp
virtual_use_local_privs=YES
# Home-Verzeichnis-Management und Chroot
# Das Standard-Home-Verzeichnis des virtuellen Users.
local_root=/home/virtual/$USER
# Token, um den Benutzernamen in Pfaden zu ersetzen (z.B. in local_root)
user_sub_token=$USER
# Benutzerdefinierte Konfigurationen pro User im /etc/vsftp/users/ Ordner
user_config_dir=/etc/vsftp/users
chroot_local_user=NO
allow_writeable_chroot=YES # Notwendig für einige moderne Setups
# Logging & Banner
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
ftpd_banner=Welcome to Ihr-Projekt-FTP service.
secure_chroot_dir=/var/run/vsftpd/empty
# SSL/TLS erzwingen
rsa_cert_file=/pfad/zum/ihr-zertifikat.pem
rsa_private_key_file=/pfad/zum/ihr-key-d.key
ssl_enable=YES
force_local_data_ssl=YES # Datenverbindungen verschlüsseln
force_local_logins_ssl=YES # Logins verschlüsseln
ssl_tlsv1=YES
# PAM-Service für virtuelle User
pam_service_name=vsftpd
Abschnitt 2: Virtuelle Benutzer und PAM-Authentifizierung
Für virtuelle Benutzer wird ein dedizierter lokaler Systembenutzer (**guest_username=ftp**) als Platzhalter verwendet, der keinen Shell-Zugriff hat (**/sbin/nologin**). Die Logins und Passwörter werden in einer separaten Datenbank verwaltet, die über **PAM** authentifiziert wird.
1. Benutzerliste (/etc/vsftp/user_list):
Diese Textdatei enthält abwechselnd Benutzernamen und Passwörter.
root@server:/etc/vsftp# cat user_list
user1
passwort1
user2
passwort2
user3
passwort3
...
**Wichtig:** Nach der Bearbeitung muss die Datenbankdatei (hier: ftpuser.db) neu generiert werden. Die folgenden Befehle erstellen die Datenbank (oft ftpuser.db):
db_load -T -t hash -f /etc/vsftp/user_list /etc/vsftp/ftpuser.db
# Bzw. oft auch nur:
db_load -T -t hash -f user_list ftpuser.db
2. PAM-Konfiguration (/etc/pam.d/vsftpd):
Diese Konfigurationsdatei weist VSFTP an, die Authentifizierungsinformationen aus der generierten Datenbank (**ftpuser** ohne .db Suffix) zu holen.
/etc/pam.d/vsftpd:
auth required pam_userdb.so db=/etc/vsftp/ftpuser
account required pam_userdb.so db=/etc/vsftp/ftpuser
session required pam_loginuid.so
3. Lokaler Systembenutzer:
Der im VSFTP-Setup definierte Gastbenutzer (**ftp**) muss auf dem System existieren und zur korrekten Rechteverwaltung über eine Shell ohne Login-Möglichkeit verfügen:
useradd -m -s /usr/sbin/nologin ftp
Abschnitt 3: Benutzerdefinierte Konfigurationen (/etc/vsftp/users/)
Durch die Option **user_config_dir=/etc/vsftp/users** kann für jeden virtuellen Benutzer eine Konfigurationsdatei angelegt werden, die dessen spezifisches Wurzelverzeichnis (**local_root**) definiert.
root@server:/etc/vsftp# ls -l users
...
-rw-r--r-- 1 root root 27 Aug 27 16:34 user1
-rw-r--r-- 1 root root 21 Sep 2 20:26 user2
...
**Beispiel: Inhalt der Konfigurationsdatei für Benutzer 'USER2'**
root@server:/etc/vsftp# cat users/user2
local_root=/var/www/
**Hinweis:** Ohne eine explizite **local_root** in der User-Datei würde der Benutzer das globale Standardverzeichnis **/home/virtual/USER2** verwenden.