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:
- Firewall-Regeln, die den Dienst auf das Subnetz des Partners einschränken
- FTP-Zugriff auf die entsprechenden User einschränken. Dazu wird die
vsftp.confum 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.confwird 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❌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/shellsauf. 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