FTP-Server einrichten (vsftpd)

Hallo Jungs,

in diesem Beitrag geht es um die Installation & Einrichtung eines FTP-Servers unter Linux.
Eigentlich kein Ding, manchmal sollte man sich aber trotzdem die Zeit nehmen den Dienst richtig zu konfigurieren wenn er ans Netz soll.

Sollte ich Verschlüsselung für den FTP-Server aktivieren?
Ja, mindestens die Logins sollten verschlüsselt übertragen werden – sonst macht man es dem ISP-Sniffer zu einfach.

Sollte ich besser virtuelle Benutzer oder lokale Benutzer verwenden?
Besser virtuelle damit kein direkter Zugriff auf die Kommandozeile durch einfache Anmeldung an alternativen Dienste wie ein locker konfiguriertes SSH erreicht werden kann.

Welche Möglichkeiten der Login-Verwaltung gibt es?

  • lokale Benutzer
  • virtuelle Benutzer-DB4
  • htpasswd-Benutzerdatei
  • Anbindung an LDAP/Active Directory
  • etc…

Installation FTP-Server (vsftpd)

Bei dieser Installation wird auf folgende Variante zurückgegriffen:
Der vsftpd wird mit einer virtuellen Benutzer-Datenbank erstellt (RedHat empfohlener Weg),
die Verschlüsselung per TLS über den Standard-Port des FTP wird zu dem optional bereitgestellt.

In einem späteren Nachtrag wird ggf. noch einmal behandelt wie der FTP-Dienst mit einem anderen Benutzerkonto als Dienst installiert wird. (per yum wird der Dienst als root hinzugefügt, Software-Fehler könnten also zu root-Rechten führen)

Anforderungen:
DB4 inkl. Werkzeuge für die virtuelle Datenbank, vsftpd, SSL-Support

yum install db4 db4-utils openssl openssl-devel vsftpd

Anpassung des virtuellen Datenbank-Providers auf ein DB-File im Ordner von vsftpd.
(pam – Anwendungs-Authentifizierungsdienste-Modul)

cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.virtual

nano /etc/pam.d/vsftpd.virtual
Neuer Auth-Dienst ist demnach „vsftpd.virtual“.
Der Inhalt sollte wie folgt aussehen:
#%PAM-1.0
session         required        pam_loginuid.so
auth            required        /lib64/security/pam_userdb.so db=/etc/vsftpd/virtual-users crypt=hash
account         required        /lib64/security/pam_userdb.so db=/etc/vsftpd/virtual-users crypt=hash
Der vollständige Pfad zum LibPAM-Modul ist für die 64-Bit-Installation von CentOS angelegt.
(falls mal ein System wie eine falsch geupdatete vMA 5.0 keine Logins mehr anbietet liegt es meist daran das die 32Bit-Version mit der x86_64-Version kollidiert)
Nun legen wir die virtuelle Benutzerdatenbank an:
cd /etc/vsftpd/
nano virtual-users.txt
Der Aufbau ist einfach wie folgt, eine Zeile Benutzername, folgende Passwort – möglichst ohne freie Zeilen herunter zu schreiben.
Danach lässt man durch folgendes Skript eine virtuelle Datenbank aus diesem File erstellen und löscht dieses sobald man diese nicht mehr anpassen möchte. (dokumentiert es also fern des Servers)
nano update-virtual-db.sh
Inhalt des Skripts:
db_load -T -t hash -f virtual-users.txt /etc/vsftpd/virtual-users.db
chmod 600 /etc/vsftpd/virtual-users.db
Nun legt man am besten die später zu benutzenden Verzeichnisse an,
je nach Konfiguration (keep it simple) in diesem Falle legt man einen Ordner pro Benutzer an oder einen allgemeinen für alle…

mkdir /var/ftp/public
# Neue Benutzerordner
mkdir /var/ftp/users/user01
mkdir /var/ftp/users/user02
# oder Weiterleitungen des chroot
cd /var/ftp/users
ln -s /var/ftp/users/user01 user03
# Sicherheitseinstellungen
cd /var/ftp
chown root * -R
chgrp ftp * -R
chmod -R 770 *

Nächster Schritt der Vorbereitung – aktivieren der Verschlüsselung (generieren des Zertifikats):

openssl req -x509 -nodes -days 365 -newkey rsa:1024  -keyout /etc/vsftpd/vsftpd.pem  -out /etc/vsftpd/vsftpd.pem

Zu guter letzt bearbeiten wir die Konfigurationsdatei mit allen Optionen die wir haben oder nicht haben wollen:

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
nano /etc/vsftpd/vsftpd.conf

Und hier der Inhalt der „vsftpd.conf“:

# Umgang mit anonymen Logins, vorerst offline zur Sicherheit
anonymous_enable=NO
anon_upload_enable=NO
guest_enable=YES


# Konfiguration lokale Benutzer, notwendig für die virtuellen Benutzer
local_enable=YES
write_enable=YES
local_umask=077
virtual_use_local_privs=YES

# Standard-Konfiguration
dirmessage_enable=YES
banner_file=/etc/vsftpd/issue
xferlog_enable=YES
xferlog_std_format=NO
log_ftp_protocol=YES
chown_uploads=YES


#Verbindungseinstellungen
connect_from_port_20=YES
idle_session_timeout=600
data_connection_timeout=120
pasv_min_port=40000

pasv_max_port=40500

listen=YES
#listen_ipv6=YES


# Monitoring

#deny_email_enable=YES

#banned_email_file=/etc/vsftpd/banned_emails

# Dateisystem-Ausbruchsschutz
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list
chroot_local_user=YES

# Login-Modul für virtuelle Benutzer einbinden
pam_service_name=vsftpd.virtual
userlist_enable=YES
tcp_wrappers=YES

# Konfiguration Benutzervariable, Wahl der Art gemeinsam oder privates Home
# keep it simple
user_sub_token=$USER
#local_root=/var/ftp/users/$USER
local_root=/var/ftp/pub
anon_root=/var/ftp/pub
hide_ids=YES

# SSL/TLS-Einstellungen 
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/vsftpd/vsftpd.pem
Und zu guter letzte die üblichen Zeilen (Konfiguration beim Start prüfen, Dienst registrieren, Firewall):

chkconfig vsftpd on
ntsysv
system-config-securitylevel-tui

Ggf. prüft man nach folgender Zeile per iptables und fügt diese hinzu…siehe hierzu dann den iptables-Artikel.

IPTABLES_MODULES=“ip_conntrack_ftp“

Hier geht es zum iptables-Artikel.