vsftpd (Very Secure FTP Daemon) ist ein schneller und sicherer FTP-Server für Linux. Er unterstützt virtuelle Benutzer, SSL/TLS und Bandbreiten-Limitierung.
Installation
# Debian/Ubuntu
apt install vsftpd
# RHEL/CentOS
dnf install vsftpd
# Service aktivieren
systemctl enable vsftpd
systemctl start vsftpdGrundkonfiguration
Basis-Setup
# /etc/vsftpd.conf
# Standalone-Modus
listen=YES
listen_ipv6=NO
# Anonymen Zugriff deaktivieren
anonymous_enable=NO
# Lokale Benutzer erlauben
local_enable=YES
# Schreibzugriff erlauben
write_enable=YES
# Umask für neue Dateien
local_umask=022
# Verzeichnis-Listing
dirmessage_enable=YES
# Logging
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/vsftpd.log
# Port 20 für Daten
connect_from_port_20=YES
# Idle-Timeout
idle_session_timeout=600
data_connection_timeout=120
# Banner
ftpd_banner=Willkommen auf dem FTP-ServerService neu starten
systemctl restart vsftpd
systemctl status vsftpdChroot-Jail
Benutzer einsperren
# /etc/vsftpd.conf
# Benutzer in Home-Verzeichnis einsperren
chroot_local_user=YES
# Schreiben im chroot erlauben
allow_writeable_chroot=YES
# Oder: Home nicht beschreibbar, Unterverzeichnis anlegen
# chroot_local_user=YES
# local_root=/srv/ftp/$USERAusnahmen definieren
# Bestimmte User vom chroot ausnehmen
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
# /etc/vsftpd.chroot_list
# User hier sind NICHT eingesperrt
adminBenutzer-Verwaltung
Lokale Benutzer
# FTP-Benutzer erstellen
useradd -m -s /usr/sbin/nologin ftpuser
passwd ftpuser
# Shell zu /etc/shells hinzufügen
echo "/usr/sbin/nologin" >> /etc/shellsBenutzer einschränken
# /etc/vsftpd.conf
# Nur bestimmte User erlauben
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
# /etc/vsftpd.user_list
# Nur diese User dürfen sich anmelden
ftpuser
ftpuser2Virtuelle Benutzer
# PAM-Modul installieren
apt install libpam-pwdfile
# Passwort-Datei erstellen
htpasswd -c -d /etc/vsftpd/virtual_users.txt vuser1
htpasswd -d /etc/vsftpd/virtual_users.txt vuser2
# PAM konfigurieren
# /etc/pam.d/vsftpd.virtual
auth required pam_pwdfile.so pwdfile /etc/vsftpd/virtual_users.txt
account required pam_permit.so
# System-User für virtuelle User
useradd -d /srv/ftp -s /usr/sbin/nologin vsftpd
# vsftpd.conf
guest_enable=YES
guest_username=vsftpd
pam_service_name=vsftpd.virtual
virtual_use_local_privs=YES
user_sub_token=$USER
local_root=/srv/ftp/$USER
# Verzeichnisse erstellen
mkdir -p /srv/ftp/vuser1
mkdir -p /srv/ftp/vuser2
chown -R vsftpd:vsftpd /srv/ftpSSL/TLS (FTPS)
Zertifikat erstellen
# Self-signed Zertifikat
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/vsftpd.key \
-out /etc/ssl/certs/vsftpd.crt
# Berechtigungen
chmod 600 /etc/ssl/private/vsftpd.keySSL konfigurieren
# /etc/vsftpd.conf
# SSL aktivieren
ssl_enable=YES
# Zertifikate
rsa_cert_file=/etc/ssl/certs/vsftpd.crt
rsa_private_key_file=/etc/ssl/private/vsftpd.key
# SSL erzwingen
force_local_data_ssl=YES
force_local_logins_ssl=YES
# TLS bevorzugen
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
# Starke Verschlüsselung
ssl_ciphers=HIGH
# Wiederverwendung der SSL-Session
require_ssl_reuse=NOImplicit vs Explicit FTPS
# Explicit FTPS (STARTTLS auf Port 21)
implicit_ssl=NO
# Implicit FTPS (Port 990)
implicit_ssl=YES
listen_port=990Passive Mode
# /etc/vsftpd.conf
# Passive Mode aktivieren
pasv_enable=YES
# Port-Range für passive Verbindungen
pasv_min_port=40000
pasv_max_port=40100
# Externe IP (bei NAT)
pasv_address=203.0.113.10
# Oder: pasv_addr_resolve=YES und pasv_address=ftp.example.deFirewall
# UFW
ufw allow 21/tcp
ufw allow 40000:40100/tcp
# firewalld
firewall-cmd --permanent --add-service=ftp
firewall-cmd --permanent --add-port=40000-40100/tcp
firewall-cmd --reload
# iptables
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 40000:40100 -j ACCEPTBandbreiten-Limitierung
# /etc/vsftpd.conf
# Maximale Übertragungsrate (Bytes/s)
# 0 = unbegrenzt
local_max_rate=1048576 # 1 MB/s
# Für anonyme User
anon_max_rate=524288 # 512 KB/s
# Maximale Verbindungen
max_clients=50
max_per_ip=5Logging
Erweitertes Logging
# /etc/vsftpd.conf
# Ausführliches Logging
xferlog_enable=YES
xferlog_std_format=NO
log_ftp_protocol=YES
vsftpd_log_file=/var/log/vsftpd.log
# Dual-Log (xferlog und vsftpd.log)
dual_log_enable=YESLog-Format
# Standard xferlog Format
# Mon Jan 26 10:00:00 2026 1 192.168.1.10 1234567 /home/user/file.txt b _ i r user ftp 0 * c
# vsftpd.log Format
# Mon Jan 26 10:00:00 2026 [pid 1234] [user] OK LOGIN: Client "192.168.1.10"
# Mon Jan 26 10:00:05 2026 [pid 1234] [user] OK UPLOAD: Client "192.168.1.10", "/file.txt", 1234567 bytesPer-User Konfiguration
# /etc/vsftpd.conf
user_config_dir=/etc/vsftpd/user_conf
# Verzeichnis erstellen
mkdir /etc/vsftpd/user_conf
# /etc/vsftpd/user_conf/specialuser
# Individuelle Einstellungen
local_root=/srv/ftp/special
write_enable=YES
local_max_rate=5242880 # 5 MB/sAnonymer FTP
# /etc/vsftpd.conf
# Anonymen Zugriff erlauben
anonymous_enable=YES
anon_root=/srv/ftp/public
# Nur Lesen
anon_upload_enable=NO
anon_mkdir_write_enable=NO
# Keine Passwort-Abfrage
no_anon_password=YES
# Verzeichnis erstellen
mkdir -p /srv/ftp/public
chown ftp:ftp /srv/ftp/publicTroubleshooting
Verbindung testen
# Lokaler Test
ftp localhost
# Mit lftp (SSL)
lftp -u user ftp://server.example.de
# Debug-Modus
ftp -d server.example.deHäufige Probleme
# "500 OOPS: vsftpd: refusing to run with writable root"
# → allow_writeable_chroot=YES
# → Oder: chmod 555 /home/ftpuser
# "530 Login incorrect"
# → /etc/shells prüfen
# → pam_service_name prüfen
# Passive Mode funktioniert nicht
# → Firewall prüfen
# → pasv_address prüfenSELinux
# Boolean setzen
setsebool -P ftpd_full_access on
# Oder für Home-Verzeichnisse
setsebool -P ftp_home_dir onSicherheits-Empfehlungen
# /etc/vsftpd.conf
# Anonymen Zugriff deaktivieren
anonymous_enable=NO
# SSL erzwingen
ssl_enable=YES
force_local_logins_ssl=YES
force_local_data_ssl=YES
# Chroot aktivieren
chroot_local_user=YES
# User-Liste verwenden
userlist_enable=YES
userlist_deny=NO
# Timeout setzen
idle_session_timeout=300
# Verbindungen begrenzen
max_clients=20
max_per_ip=3Zusammenfassung
| Option | Beschreibung | |--------|--------------| | listen=YES | Standalone-Modus | | local_enable=YES | Lokale User erlauben | | write_enable=YES | Schreibzugriff | | chroot_local_user=YES | Benutzer einsperren | | ssl_enable=YES | SSL/TLS aktivieren | | pasv_enable=YES | Passive Mode |
| Port | Verwendung | |------|------------| | 21 | FTP Kontrolle | | 20 | FTP Daten (aktiv) | | 40000-40100 | Passive Daten | | 990 | Implicit FTPS |
| Datei | Beschreibung | |-------|--------------| | /etc/vsftpd.conf | Hauptkonfiguration | | /etc/vsftpd.user_list | Benutzer-Liste | | /etc/vsftpd.chroot_list | Chroot-Ausnahmen | | /var/log/vsftpd.log | Log-Datei |
Fazit
vsftpd ist ein sicherer und performanter FTP-Server. SSL/TLS sollte für produktive Umgebungen aktiviert werden. Chroot-Jails erhöhen die Sicherheit. Für moderne Alternativen sind SFTP (SSH) oder SCP oft besser geeignet. vsftpd bleibt die beste Wahl wenn FTP-Protokoll erforderlich ist.