Archiv

Posts Tagged ‘vsftpd.conf’

FTP: rein anonymer Download, anonymer Dropbox-Upload (provisorisch)

2012/01/17 Kommentare aus

Anonyme Dateifreigabe via FTP ist bereits in der Standardkonfiguration des vsftpd (Very Secure FTP Daemon) aktiviert. Dieses Prüfungsziel ist also bereits nach Installation und Aktivierung des FTP-Servers erfüllt. Freizugebende Dateien sind einfach in das Verzeichnis /var/ftp/pub (Heimatverzeichnis des Benutzers ftp) zu kopieren.

Installation des FTP-Servers vsftpd und des Werkzeuges für die Firewallkonfiguration:

yum install vsftpd system-config-firewall-tui

Anpassung der Konfiguration für rein anonymen Download

Anonymer Download ist zwar schon in der Standardkonfiguration möglich, jedoch ist auch ein Login lokal vorhandener Benutzer möglich. Falls der FTP-Server ausschließlich für anonyme Benutzer verwendbar sein soll ist die Direktive local_enable in /etc/vsftpd/vsftpd.conf entsprechend abzuändern oder auch einfach auszukommentieren:

local_enable=NO

Nach erfolgreicher Installation und Konfiguration wird vsftpd gestartet und außerdem sichergestellt, dass der Dienst beim Hochfahren des Systems automatisch startet:

service vsftpd start
chkconfig vsftpd on

Mit Hilfe von system-config-firewall-tui erlauben wir noch den Zugriff auf den FTP-Dienst:

system-config-firewall-tui

–> Anpassen –> „FTP“ markieren –> Schließen

Der FTP-Server ist danach unter der IP-Adresse bzw. dem Hostnamen des Servers erreichbar.

Dateien für anonymen Download bereitstellen

Freizugebende Dateien werden einfach in das Heimatverzeichnis des Benutzers ftp kopiert:

cp myfile /var/ftp

Wichig ist hierbei, dass Dateien kopiert und nicht verschoben werden. Bei Kopieren wird der SELinux-Kontext des Zielverzeichnisses übernommen, bei Verschieben der Datei bleibt der Kontext der Datei erhalten, was ziemlich sicher zu Problemen mit SELinux führen wird. In einer normalen Arbeitsumgebung ist das kein Problem, der Kontext kann mit einem Aufruf von

restorecon -R /var/ftp

korrigiert werden. Für die Prüfung sollte man aber einfach cp verwenden.

Anonymer Dropbox-Upload

Um anonymen FTP-Benutzern Schreibrechte zu geben sind weitere Änderungen notwendig. Zunächst muss die Konfigurationsdatei entsprechend abgeändert werden. Danach sind ausreichende Zugriffsrechte für das Verzeichnis zu setzen und zuletzt der SELinux-Kontext und ein SELinux Boolean setzen.

Ein Dateiupload für anonyme Benutzer kann durch Entfernung des Kommentar-Zeichens vor anon_upload_enable in /etc/vsftpd/vsftpd.conf erlaubt werden. Falls anonyme Benutzer auch Verzeichnisse erstellen sollen können, muss auch anon_mkdir_write_enable gesetzt sein:

anon_upload_enable=YES
anon_mkdir_write_enable=YES

Das Upload-Verzeichnis (hier: /var/ftp/pub) inklusive aller eventuell vorhandener Unterverzeichnisse für den Benutzer ftp beschreibbar machen:

chown -R ftp /var/ftp/pub

Um möglichst unkompliziert SELinux-Kontexte ändern zu können ist die Installation des Pakets policycoreutils-python empfehlenswert:

yum install policycoreutils-python

Der SELinux-Sicherheitskontext des Verzeichnisses muss von public_content_t auf public_content_rw_t geändert werden, um vsftpd schreibenden Zugriff auf das enstprechende Verzeichnis zu erlauben:

semanage fcontext -a -t public_content_rw_t /var/ftp/pub
restorecon -R /var/ftp/pub

Zuletzt wird der SELinux Boolean allow_ftpd_anon_write permanent (-P) gesetzt, um vsftpd Schreiboperationen anonymer Benutzer zu erlauben:

setsebool -P allow_ftpd_anon_write 1
Anonyme FTP-Benutzer haben nun die Möglichkeit, Dateien hochzuladen und Verzeichnisse zu erstellen.
 
Weiterführende Informationen bieten die Befehle
man vsftpd
man ftpd_selinux
getsebool -a | grep ftp
semanage boolean -l
Advertisements

Sicheres FTP – vsftpd für SSL/TLS konfigurieren

2011/02/05 Kommentare aus

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
Der FTP Zugang wird dabei durch setzen einer Markierung bei „FTP“ ermöglicht. Im darauf folgenden Menü ist der vorher festgelegte Portbereich für passive Verbindungen zu setzen, in unserem Falle also in dieser Form:
Port / Port-Bereich: 40000-40100
Protokoll:           tcp
system-config-securitylevel erlaubt auch das Aktivieren von SELinux. Enforcing bedeutet hier dass SELinux aktiviert und aktiv ist. Permissive bedeutet dass SELinux aktiviert ist, unzulässige Zugriffe jedoch nur meldet und nicht blockiert – sehr sinnvoll für die erste Konfiguration von Diensten. Disabled bedeutet, wie der Name schon vermuten lässt eine vollständige Deaktivierung von SELinux.

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.