Zu beheben FTP auf einem Linux-ServerÜberprüfen Sie, ob der Daemon läuft, stellen Sie sicher, dass Port 21 und die passiven Ports geöffnet sind, prüfen Sie die Protokolle auf Authentifizierungs- oder TLS-Fehler und konfigurieren Sie den passiven Modus korrekt (insbesondere hinter NAT/Firewalls).
Beheben Sie SELinux/AppArmor-Verweigerungen, überprüfen Sie die Benutzerberechtigungen und chroot-Einstellungen und testen Sie anschließend erneut mit einem Client wie FileZilla oder curl. FTP Probleme unter Linux entstehen üblicherweise an drei Stellen: Dienstkonfiguration, Firewall/NAT oder Authentifizierung und Berechtigungen.
In dieser Anleitung erfahren Sie, wie Sie das Problem beheben können. FTP auf einem Linux-Server Schritt für Schritt, egal ob Sie vsftpd oder Pro verwenden.FTPD oder Rein-FTPd. Wir werden den passiven Modus behandeln. FTPS, SELinux und echte Fehlermeldungen mit funktionierenden Befehlen.
Kurzcheckliste zur Diagnose FTP Funktioniert nicht unter Linux
- Identifizieren Sie Ihre FTP Server (vsftpd, Pro)FTPD, Rein-FTPd) und den Servicestatus überprüfen.
- Prüfen Sie, ob der Server auf Port 21 und einem passiven Portbereich (PASV) lauscht.
- Offene Ports in firewalld/ufw/iptables und Cloud-Sicherheit Gruppen.
- Konfigurieren Sie den passiven Modus mit der korrekten öffentlichen IP-Adresse, falls Sie sich hinter einem NAT-Router befinden.
- Überprüfen Sie die Protokolle für 530/425/550 Fehler und deren Behebung auth/permissions.
- Behebt SELinux/AppArmor-Verweigerungen und ordnet passive Ports dem richtigen Kontext zu.
- Bestätigen FTPS/TLS-Einstellungen und Clientkompatibilität.
- Testen Sie erneut mit FileZilla, lftp oder curl.
Schritt 1: Identifizieren Sie Ihre FTP Server- und Dienststatus
Die meisten Linux-Server verwenden standardmäßig vsftpd. Einige verwenden Pro.FTPD oder Rein-FTPd. Prüfen Sie, welcher Daemon installiert ist und ob er ausgeführt wird.
Überprüfen Sie das installierte Paket und die Version.
# Debian/Ubuntu
dpkg -l | egrep 'vsftpd|proftpd|pure-ftpd'
# RHEL/CentOS/Rocky/Alma
rpm -qa | egrep 'vsftpd|proftpd|pure-ftpd'Dienst prüfen und aktivieren
# vsftpd example
sudo systemctl status vsftpd
sudo systemctl enable --now vsftpd
# ProFTPD
sudo systemctl status proftpd
sudo systemctl enable --now proftpd
# Pure-FTPd (service name may vary)
sudo systemctl status pure-ftpd
sudo systemctl enable --now pure-ftpdFalls der Dienst nicht startet, überprüfen Sie die Syntax und die Protokolle:
sudo journalctl -u vsftpd -xe
sudo tail -n 200 /var/log/vsftpd.log 2>/dev/null || true
sudo tail -n 200 /var/log/syslog 2>/dev/null || sudo tail -n 200 /var/log/messagesSchritt 2: Ports, Listening-Sockets und Erreichbarkeit überprüfen
FTP Die Steuerung erfolgt über TCP 21. Die Datenports hängen vom aktiven oder passiven Modus ab. Im passiven Modus muss ein Adressbereich definiert und geöffnet werden (z. B. 21000–21010).
Überprüfen Sie die Listening-Sockets.
sudo ss -ltnp | egrep '(:21|:21000|:21001)'
sudo lsof -iTCP:21 -sTCP:LISTEN -nPTest von Client und Server
# From a remote client
nc -vz your-server.example.com 21
nc -vz your-server.example.com 21000
# Simple FTP banner check
curl -v telnet://your-server.example.com:21
# Discover open ports externally
nmap -Pn -p 21,21000-21010 your-server.example.comWenn die Meldung „Verbindung abgelehnt“ erscheint, ist der Serverdienst (Daemon) nicht erreichbar oder wird von einer Firewall blockiert. Die Meldung „Zeitüberschreitung“ deutet in der Regel auf ein Firewall-/NAT-Problem zwischen Client und Server hin.
Schritt 3: Firewall und NAT für Aktiv/Passiv konfigurieren FTP
Öffnen Sie Port 21 und den passiven Bereich in Ihrer Host-Firewall und auf allen vorgelagerten Geräten (Cloud-Sicherheitsgruppen, Load Balancer , Heimrouter).
firewalld (RHEL/Rocky/Alma/CentOS)
sudo firewall-cmd --permanent --add-service=ftp # opens 21/tcp
sudo firewall-cmd --permanent --add-port=21000-21010/tcp
sudo firewall-cmd --reloadUFW (Ubuntu/Debian)
sudo ufw allow 21/tcp
sudo ufw allow 21000:21010/tcp
sudo ufw reload
sudo ufw statusiptables (Legacy)
sudo iptables -I INPUT -p tcp --dport 21 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 21000:21010 -j ACCEPT
sudo service iptables save 2>/dev/null || sudo iptables-save | sudo tee /etc/iptables.rulesBefindet sich Ihr Server hinter einem NAT-Router, leiten Sie die Ports 21/TCP und den passiven Portbereich vom Edge-Router zur privaten IP-Adresse des Servers weiter. In AWS, Azure oder GCP müssen Sie diese Ports außerdem in Sicherheitsgruppen bzw. Firewall-Regeln zulassen.
Schritt 4: Passiven Modus korrekt konfigurieren (hinter NAT/Cloud)
Die meisten modernen Clients verwenden den passiven Modus. Der Server muss eine erreichbare öffentliche IP-Adresse bekanntgeben und einen definierten Portbereich öffnen.
# /etc/vsftpd/vsftpd.conf (key passive settings)
pasv_enable=YES
pasv_min_port=21000
pasv_max_port=21010
# Use your public IP or hostname
pasv_address=203.0.113.10
pasv_addr_resolve=YESStarten Sie den Dienst nach den Änderungen neu:
sudo systemctl restart vsftpdFür ProFTPD, verwenden Sie MasqueradeAddress und PassivePorts. Für reines-FTPd, Verwenden Sie -P für die öffentliche IP-Adresse und -p für den passiven Bereich.
Schritt 5: Authentifizierung, Benutzer und Chroot überprüfen
„530 Login incorrect“ deutet auf fehlerhafte Anmeldedaten, PAM-Probleme oder Einschränkungen wie beispielsweise in der Datei /etc/ftpusers hin. „550 Permission denied“ weist häufig auf Probleme mit Verzeichnisbesitz und Dateiberechtigungen hin.
Gängige vsftpd-Authentifizierungs- und chroot-Optionen
# /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
user_sub_token=$USER
local_root=/home/$USER/ftpErstellen Sie einen Benutzer und legen Sie ein geeignetes Home-Verzeichnis und die entsprechenden Berechtigungen fest:
sudo useradd -m -s /usr/sbin/nologin ftpuser
echo "ftpuser:StrongPassword" | sudo chpasswd
sudo mkdir -p /home/ftpuser/ftp/upload
sudo chown -R ftpuser:ftpuser /home/ftpuser/ftp/upload
sudo chmod 755 /home/ftpuser/ftp
sudo chmod 750 /home/ftpuser/ftp/uploadStellen Sie sicher, dass der Benutzer nicht in /etc/ftpusers oder /etc/vsftpd/user_list gesperrt ist, falls diese Listen Anmeldungen verweigern. Für ProFTPD/Rein-FTPd, prüfen Sie die entsprechenden Authentifizierungsmodule und Benutzerlisten.
Schritt 6: TLS/FTPS- und Clientkompatibilität
Explicit FTPS(FTP Die Übertragung über TLS auf Port 21 ist üblich. Stellen Sie ein Zertifikat bereit und passen Sie die Optionen für moderne Clients wie FileZilla an.
# vsftpd FTPS
ssl_enable=YES
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key
force_local_logins_ssl=YES
force_local_data_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO # Helps with some clients (e.g., FileZilla)
ssl_ciphers=HIGHTesten Sie TLS vom Server oder einem Remote-Host:
openssl s_client -starttls ftp -crlf -connect your-server.example.com:21Falls Clients die Verzeichnisse nicht auflisten können, die Anmeldung aber erfolgreich ist, sollten Sie passive Ports, Einstellungen zur TLS-Sitzungswiederverwendung oder eine Firewall mit Deep Packet Inspection in Betracht ziehen.
Schritt 7: SELinux/AppArmor und Sicherheitstools
Auf Systemen der RHEL-Familie kann SELinux blockieren FTP Schreib- und passive Ports. Aktivieren Sie die erforderlichen booleschen Werte und beschriften Sie die Ports.
# Enable common SELinux booleans
sudo setsebool -P ftpd_full_access=1
sudo setsebool -P ftpd_use_passive_mode=1
# Map your passive port range to ftp_port_t
sudo semanage port -a -t ftp_port_t -p tcp 21000-21010 2>/dev/null ||
sudo semanage port -m -t ftp_port_t -p tcp 21000-21010
# Check for denials
sudo ausearch -m avc -ts recent | tailUnter Ubuntu/Debian mit AppArmor überprüfen Sie die Datei `/etc/apparmor.d/usr.sbin.vsftpd` und erlauben Sie die benötigten Verzeichnisse. Laden Sie anschließend die Profile neu. Wenn Sie Fail2ban verwenden , stellen Sie sicher, dass Ihre IP-Adresse nach fehlgeschlagenen Anmeldeversuchen nicht gesperrt wird.
Schritt 8: Protokolle lesen und allgemeine Ausdrücke entschlüsseln FTP Fehler
Die Protokolle zeigen Ihnen genau, wo FTP schlägt fehl. Überprüfen Sie die Daemon- und Systemprotokolle:
sudo tail -f /var/log/vsftpd.log /var/log/auth.log 2>/dev/null
sudo journalctl -u vsftpd -f- 421 Dienst nicht verfügbar: Der Dienst ist abgestürzt oder die Ratenbegrenzungen wurden erreicht. Überprüfen Sie die Systemressourcen.
- 425 Datenverbindung kann nicht geöffnet werden: Passive Ports oder NAT nicht konfiguriert, oder Problem mit der TLS-Wiederverwendung.
- 530 Anmeldefehler: Falsche Anmeldeinformationen, PAM-Probleme, gesperrter Benutzer oder Shell-Beschränkungen.
- 550 Zugriff verweigert: Datei-/Verzeichnisbesitz oder -berechtigungen bzw. Schreibbeschränkungen im chroot-Verzeichnis.
- Verbindung abgelehnt: Lokaler Serviceausfall oder Port blockiert.
Schritt 9: Überlegen Sie SFTP als sichere Alternative
SFTP läuft über SSH Es wird über Port 22 verwendet und vermeidet die Komplexität passiver/aktiver Ports. Dadurch ist es einfacher zu sichern und Fehler zu beheben.
# Quick SFTP test
sftp [email protected]
# Ensure sshd has SFTP enabled in /etc/ssh/sshd_config
Subsystem sftp /usr/lib/openssh/sftp-serverFür SFTPNur Benutzer mit chroot müssen einen Match-Block konfigurieren und die Verzeichnisberechtigungen für das chroot-Verzeichnis auf root korrigieren. Dies ist oft einfacher als die Härtung. FTP/FTPS für Internetnutzung.
Relevante Artikeln: Fail2ban auf Linux-Servern beheben und wiederherstellen SSH Schutz
Beispiel einer minimalen vsftpd.conf-Datei (Produktionsbereite Basisversion)
# /etc/vsftpd/vsftpd.conf
listen=YES
listen_ipv6=NO
# Security
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
# Passive mode
pasv_enable=YES
pasv_min_port=21000
pasv_max_port=21010
pasv_address=203.0.113.10
pasv_addr_resolve=YES
# FTPS
ssl_enable=YES
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key
force_local_logins_ssl=YES
force_local_data_ssl=YES
require_ssl_reuse=NO
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
# Logging
xferlog_enable=YES
xferlog_std_format=NO
log_ftp_protocol=YES
# Performance
idle_session_timeout=600
data_connection_timeout=120
# PAM and userlist
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO
# Create /etc/vsftpd/user_list and add allowed usersFehlerbehebungsszenarien und Lösungen
- FileZilla stellt eine Verbindung her, aber die Verzeichnisauflistung schlägt fehl: Passive Ports öffnen, einstellen
require_ssl_reuse=NOund sicherstellen, dass NAT den passiven Bereich weiterleitet. - Uploads schlagen mit Fehlercode 550 fehl: Eigentumsverhältnisse klären (
chown user:user) und Berechtigungen (z. B. 750) für Zielverzeichnisse; SELinux-Boolesche Werte überprüfen. - Nach dem Login wurde die Verbindung aufgrund einer Zeitüberschreitung unterbrochen: Der Client kann passive Ports nicht erreichen; Firewall/Sicherheitsgruppen aktualisieren.
- Anmeldung als lokaler Benutzer nicht möglich: Gewährleisten
local_enable=YESDer Benutzer ist nicht in/etc/ftpusersund PAM verweist auf die richtigen Module. - Hinter der Unternehmensfirewall: Verwenden Sie explizite FTPS oder SFTP; einige Netzwerke blockieren den aktiven Modus und hohe Werte nummerierte Häfen.
Häufig gestellte Fragen
Warum tut FTP Was passiert unter Linux, wenn „Verbindung abgelehnt“ angezeigt wird?
Entweder FTP Der Daemon läuft nicht oder eine Firewall blockiert Port 21. Starten und aktivieren Sie Ihren Dienst, stellen Sie sicher, dass er auf Port 21 lauscht, und öffnen Sie TCP/21 in firewalld oder UFW. Überprüfen Sie außerdem die Cloud-Sicherheitsgruppen und die Firewalls Ihres Anbieters.
Wie behebe ich den Fehler „425 Datenverbindung kann nicht geöffnet werden“?
Definieren Sie einen passiven Portbereich auf dem Server, öffnen Sie diesen Bereich in allen Firewalls und NAT-Systemen und legen Sie die korrekte öffentliche IP-Adresse fest (z. B. 1278). pasv_address (für vsftpd). Einige Clients benötigen außerdem require_ssl_reuse=NO bei der Verwendung von FTPS.
Für welche Ports sollte ich öffnen? FTP Passivmodus?
Öffnen Sie immer TCP/21 für den Steuerkanal sowie einen definierten passiven Adressbereich, z. B. TCP/21000–21010. Leiten Sie diese Adressen auf Ihrem Router/NAT weiter und erlauben Sie sie in den Cloud-Sicherheitsgruppen. Die genaue Größe des Adressbereichs können Sie selbst bestimmen; halten Sie ihn so klein wie möglich.
Is FTPS besser als FTP? Wie wäre es mit SFTP?
FTPS verschlüsselt FTP mit TLS und ist weitaus sicherer als unverschlüsselt FTP. SFTP, die über SSHist einfacher zu implementieren, da es nur einen Port (22) verwendet und die Komplexität passiver/aktiver Protokollierung vermeidet. Für Server mit Internetanbindung gilt Folgendes: SFTP ist in der Regel die einfachste und sicherste Option.
Wie kann ich überprüfen, ob SELinux blockiert? FTP?
Führen Sie getenforce Um zu prüfen, ob SELinux aktiviert ist, verwenden Sie dann ausearch -m avc -ts recent or journalctl Ablehnungen finden. Aktivieren ftpd_use_passive_mode und ftpd_full_access Boolesche Werte und passive Ports zuordnen mit semanage port wie oben gezeigt.
