Für verschiedene Dienste bekommen wir stündlich, beziehungsweise täglich Daten von unseren Partnern. Diese Systeme verwenden FTP für den Transfer, weshalb wir einen eigenen FTP-Server (vsftp) betreiben müssen. Der Zugriff wird mehrstufig abgesichert:

  • Firewall-Regeln, die den Dienst auf das Subnetz des Partners einschränken
  • FTP-Zugriff auf die entsprechenden User einschränken. Dazu wird die vsftp.conf um folgende Einträge ergänzt:
userlist_deny=NO
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list

Das entsprechende /etc/vsftpd.user_list File enthält nur die Benutzernamen der erlaubten FTP-Accounts (einer pro Zeile)

  • chroot Umgebung für diese User aktivieren. In vsftp.conf wird folgende Zeile hinzugefügt. chroot_local_user=YES

Das alleine reicht aber noch nicht aus, zudem muss in /etc/passwd das Heimatverzeichnis der Benutzer angepasst werden:

ftpupload:x:1001:1001::/mnt/ftpbase/./ftpupload:/usr/sbin/nologin

Das Umschreiben von /mnt/ftpbase/ftpupload auf /mnt/ftpbase/./ftpupload hat zur Folge, dass der User nicht aus dem Verzeichnis /mnt/ftpbase ausbrechen kann.

  • Andere Zugänge für diese User deaktivieren. Im passwd Ausschnitt oben sieht man außerdem, dass als Shell /usr/sbin/nologin angegeben wird. Dadurch wird der Zugang via SSH für den account gesperrt. Hier gibt es nur einen Stolperstein: Ubuntu führt nologin nicht in der Datei /etc/shells auf. Dadurch funktioniert der Zugriff auch via FTP nicht und vsftp meldet, dass das Passwort falsch ist 🙁

    root@sidi:~# cat /etc/shells
    # /etc/shells: valid login shells
    /bin/sh
    /bin/dash
    /bin/bash
    /bin/rbash
    /usr/bin/screen
    /usr/sbin/nologin
    
  • und schließlich läuft auch noch fail2ban mit folgendem Eintrag:

    [vsftpd]
    enabled  = true
    port     = ftp,ftp-data,ftps,ftps-data
    filter   = vsftpd
    logpath  = /var/log/vsftpd.log
    maxretry = 6