vsftpd
Siehe auch
SFTP mit sshd
Der „Very Secure File Transfer Protocol Daemon“ (vsftpd) ist ein schneller, kompakter FTP-Server, bei dem der Schutz gegen unbefugte Nutzung im Mittelpunkt der Entwicklung steht (in der Standard-Einstellung sind sämtliche Features abgeschaltet). Er ist der Standard FTP-Server auf RHEL-Derivaten.
Installation und Konfiguration
yum -y install vsftpd
systemctl enable --now vsftpd.service
In der Firewall müssen die FTP-Ports freigeschaltet werden:
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload
Eine Datei zum Download vorbereiten:
echo 'Works!' > /var/ftp/pub/test.txt
Der Benutzer „Anonymous“ darf sich nun verbinden und Dateien aus
/var/ftp/pub
herunterladen, was man auf dem Client mit
wget ftp://server/pub/test.txt
überprüfen kann.
Konfigurationsdatei sichern:
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
Log-File (wenn nicht anders konfiguriert):
tail -f /var/log/xferlog
Anwendungsfälle
- Nur lokale System-Benutzer erlauben, anonyme sperren
anonymous_enable=NO local_enable=YES
- Upload für anonyme Benutzer erlauben
anonymous_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES
setsebool -P allow_ftpd_anon_write on
- Zugriff auf Verzeichnisse ausserhalb des Home-Verzeichnisses verhindern
chroot_local_user=YES
- Root-Verzeichnis pro Benutzer setzen
Dazu muss man user-spezifische Config-Files anlegen.
chroot_local_user=YES user_config_dir=/etc/vsftpd/user_config
local_root=/data/share1
- FTP-Benutzer muss die Apache DocumentRoot pflegen
allow_writeable_chroot=YES chroot_local_user=YES userlist_deny=NO userlist_file=/etc/vsftpd/user_list
useradd \ --home-dir /var/www/html/test \ --shell /sbin/nologin \ --groups apache \ ftpuser passwd ftpuser echo 'ftpuser' >> /etc/vsftpd/user_list chmod g=rwxs /var/www/html/test setsebool -P ftpd_full_access on
/sbin/nologin
muss in/etc/shells
gelistet sein, ansonsten kann man sich nicht einloggen (Error 530)./sbin/nologin
- FTPS konfigurieren, inkl. Zertifikatserzeugung
openssl req -x509 -nodes -days 365 \ -newkey rsa:4096 \ -keyout /etc/pki/tls/private/vsftpd.key \ -out /etc/pki/tls/certs/vsftpd.pem
# if implicit ftps is wanted, enable those #implicit_ssl=YES #listen=YES #listen_port=990 # if using explicit (modern) ftps, lower the port range for data connection #pasv_min_port=34000 #pasv_max_port=35000 # either way, this is needed for both rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem rsa_private_key_file=/etc/pki/tls/private/vsftpd.key ssl_enable=YES
- Logging erhöhen
debug_ssl=YES dual_log_enable=YES log_ftp_protocol=YES xferlog_std_format=YES
- User aus dem Active Directory verwenden
Der Linux-Host muss AD-Joined sein.
# use PAM authentication session_support=YES
# get users from Active Directory auth required pam_env.so auth sufficient pam_sss.so account sufficient pam_sss.so session required pam_loginuid.so
Tipp
Testen lässt sich am einfachsten mit FileZilla oder lftp -d -u 'user1,secretpassword' -e 'set ssl:verify-certificate no' ftp.example.com
.
Gebräuchliche Konfigurationsoptionen
Ein Auszug der am häufigsten verwendeten Konfigurationsoptionen, abseits von den Standard-Einstellungen (alle Optionen erhält man per man vsftpd.conf 5
):
anon_mkdir_write_enable=YES
anon_upload_enable=YES
anonymous_enable=YES
ascii_download_enable=YES
ascii_upload_enable=YES
async_abor_enable=YES
chown_uploads=YES
chown_username=whoever
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
chroot_local_user=YES
connect_from_port_20=YES
data_connection_timeout=120
deny_email_enable=YES
dirmessage_enable=YES
ftpd_banner=Welcome to blah FTP service.
idle_session_timeout=600
listen_ipv6=YES
local_enable=YES
local_umask=022
ls_recurse_enable=YES
nopriv_user=ftpsecure
pam_service_name=vsftpd
tcp_wrappers=YES
userlist_enable=YES
write_enable=YES
xferlog_enable=YES
xferlog_std_format=YES
Troubleshooting
krb5_child Pre-authentication failed: Cannot read password
im/var/log/sssd/krb5_child.log
[pam] pam_passkey_auth = False
GPO-based access control failed
im/var/log/sssd/sssd_*.log
Zum den Fehler eingrenzen, temporär GPOs ignorieren:
[domain/example.com] ad_gpo_access_control = disabled
Wenn nun das Login funktioniert, müssen als langfristige Lösung die AD GPOs angepasst werden.
Built on 2024-11-18