vsftp mit chroot für sehr eingeschränktes FTP

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:

  1. Firewall-Regeln, die den Dienst auf das Subnetz des Partners einschränken
  2. 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)

  3. 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.

  4. 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
    
  5. 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