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