Sicheres FTP – vsftpd für SSL/TLS konfigurieren
FTP ist standardmäßig recht unsicher – Benutzername, Passwort und Daten werden im Klartext übertragen und können somit relativ einfach mitgeschnitten werden. Es besteht jedoch die Möglichkeit SSL/TLS zu verwenden um eine sichere Übertragung zu gewährleisten. vsftpd (Very Secure File Transfer Daemon) lässt sich sehr einfach hierfür konfigurieren.
vsftpd – Installation
yum install vsftpd
yum installiert vsftpd und kümmert sich automatisch um eventuell vorhandene Abhängigkeiten. Die Installation sollte schnell und problemlos erfolgen. Die Konfigurationsdateien von vsftpd liegen im Verzeichnis /etc/vsftpd.
Ein Zertifikat generieren
Mit Hilfe von OpenSSL wird ein Zertifikat generiert und unter /etc/vsftpd abgelegt. Der Backslash im Beispiel ist nur für den Zeilenumbruch notwendig, der Befehl kann so direkt in die Shell kopiert werden.
openssl req -x509 -nodes -newkey rsa:1024 -keyout \ /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem -days 3650
Wichtig ist dabei unter „Common Name“ den voll qualifizierten Domainnamen (z.B. ftp.example.com) des Servers zu verwenden, die Angabe eines Passworts ist nicht notwendig. Das hier erstellte Zertifikat hat eine Gültigkeitsdauer von 10 Jahren (-days 3650).
Konfiguration von vsftpd
vsftpd wird über die Datei /etc/vsftpd/vsftpd.conf konfiguriert, die Optionen sind größtenteils selbsterklärend. Anonyme Logins sind im folgenden Beispiel nicht erlaubt, die Verwendung von TLS (Nachfolger von SSL) wird erzwungen. Die Benutzer haben ausschließlich auf ihr Heimatverzeichnis Zugriff.
anonymous_enable=NO local_enable=YES write_enable=YES local_umask=0002 dirmessage_enable=YES xferlog_enable=YES xferlog_std_format=YES ftpd_banner=Welcome at ftp.foo.bar chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list listen=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES port_enable=NO pasv_enable=YES ssl_enable=YES allow_anon_ssl=NO force_local_data_ssl=NO force_local_logins_ssl=YES ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO rsa_cert_file=/etc/vsftpd/vsftpd.pem ssl_ciphers=HIGH chroot_local_user=YES pasv_min_port=40000 pasv_max_port=40100
chroot_local_user beschränkt den Zugriff auf die jeweiligen Benutzerverzeichnisse. Ausnahmen werden in chroot_list_file angegeben – hier eingetragene Benutzer sind nicht auf ihr Heimatverzeichnis beschränkt. Mit der Option force_local_data_ssl=YES könnte problemlos auch der gesamte Datenverkehr verschlüsselt werden, was jedoch naturgemäß auch mehr Rechenleistung erfordert. In den meisten Fällen wird ein verschlüsselter Steuerkanal ausreichen. Mit pasv_min_port und pasv_max_port wird vsftpd angewiesen bei Verwendung des FTP PASV Kommandos Ports zwischen 40000 und 40100 zu verwenden. Wichtig für die Konfiguration der Firewall, diese Ports müssen von außen erreichbar sein.
FTP Server starten
service vsftpd start # vsftpd starten chkconfig vsftpd on # vsftpd beim Hochfahren starten
Bei Änderungen an der Konfigurationsdatei ist vsftpd neu zu starten um geänderte Einstellungen wirksam zu machen:
service vsftpd restart
Ausnahmen in die Firewall hinzufügen
Die Ports für FTP müssen in der Firewall noch geöffnet werden. Da Connection-tracking bei verschlüsselten Verbindungen nicht funktioniert muss außerdem noch ein Bereich festgelegt werden der für passive Verbindungen geöffnet ist.
system-config-securitylevel
- Eingang ermöglichen: FTP
- Erlauben der Ports 40000-40100
Port / Port-Bereich: 40000-40100 Protokoll: tcp
Konfiguration von SeLinux
SeLinux verhindert standardmäßig den Zugriff von vsftpd auf Benutzerverzeichnisse. Diese Einstellung muss noch geändert werden, falls SeLinux aktiviert ist (was auch unbedingt zu empfehlen ist).
setsebool -P ftp_home_dir 1
Benutzer anlegen
Im System vorhandene Benutzer können sich nun bereits via FTP anmelden und auf ihr Heimatverzeichnis zugreifen. Wenn auschließlich FTP Zugriff erforderlich ist und die Benutzer sich nicht am System selbst anmelden sollte die Login-Shell aus Sicherheitsgründen auf /sbin/nologin gesetzt sein.
useradd -s /sbin/nologin -m tux # Benutzer tux anlegen passwd tux # Passwort zuweisen
Das Anlegen von neuen Benutzern ist natürlich auch mit dem grafischen Tool zur Benutzerverwaltung möglich. Wichtig ist auch hier dass als Login-Shell /sbin/nologin gewählt und ein Heimatverzeichnis angelegt wird:
system-config-users
Neu angelegte Benutzer können sich sofort am FTP Server anmelden, ein Neustart von vsftpd ist nicht erforderlich.
mit HTTP/FTP Dateifreigabedienste einrichten
HTTP
Zur nachträglichen Installation des Apache Webservers:
yum install httpd
Service starten/beim hochfahren starten:
service httpd start chkconfig httpd on
Die Konfigurationsdateien des Webservers befinden sich unter /etc/httpd/, die default-Einstellungen sind aber für eine einfache Dateifreigabe via HTTP durchaus ausreichend und bedürfen keiner weiteren Anpassung.
Dateien unter /var/www/html sind nach Aktivieren des Webservers bereits automatisch verfügbar. Das Ziel der Freigabe von Dateien über HTTP ist damit bereits erreicht. Zu beachten ist dass der Webserver auch die Rechte haben muss, die Dateien zu lesen! Falls keine index.html/index.php und keine Dateien in diesem Verzeichnis vorhanden sind wird eine Standardseite angezeigt.
FTP
Neuinstallation:
Basis Server -> Jetzt anpassen
Server -> FTP-Server
Web Dienste -> Web-Server
Installation von der Kommandozeile
yum install vsftpd
Konfiguration
Standardmäßig sind anonyme und Benutzerlogins aktiviert. Read-only Freigabe ist damit bereits gegeben. Um Dateien freizugeben diese einfach in das Heimatverzeichnis des Benutzers „ftp“ kopieren, standardmäßig ist das /var/ftp.
Um anonyme Uploads zu erlauben sind die folgenden Zeilen in /etc/vsftpd/vsftpd.conf einzutragen:
anon_upload_enable=YES anon_mkdir_enable=YES
Der Benutzer hat damit das Recht Dateien hinaufzuladen und Verzeichnisse zu erstellen, darf jedoch weder Dateien oder Verzeichnisse löschen noch diese umbenennen. Um Vollzugriff und damit das auch das Löschen und Verändern von Dateien und Verzeichnissen zu erlauben ist noch die Zeile
anon_other_write_enable=YES
einzutragen.
Die Linux-Dateirechte müssen Schreibzugriffe auf das Verzeichnis ebenfalls erlauben.
chmod a+w /var/ftp/pub
Außerdem muß der SELinux Kontext geändert werden, um anonyme Schreibzugriffe zu ermöglichen:
semanage –a –t public_content_rw_t /var/ftp/pub restorecon /var/ftp/pub setsebool allow_ftpd_anon_write 1
Die geänderte Konfiguration ist nun mit
service vsftpd reload
neu einzulesen, damit diese wirksam wird.
Netzwerk konfigurieren:
/etc/sysconfig/network
NETWORKING=”yes”
/etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=”dhcp” ONBOOT=”yes”
Dienst starten
chkconfig vsftpd on service vsftpd start
Ausnahmen in Firewall hinzufügen
Firewall: Zugriff auf FTP erlauben
system-config-firewall -> Anpassen -> FTP