Instalace a nastavení Vsftpd

Ftp server nainstalujeme z repozitářů obvyklým způsobem:

sudo apt-get install vsftpd

Po instalaci je potřeba provést několik úprav v nastavení. Nejprve editujeme soubor /etc/vsftpd.conf:

sudo nano /etc/vsftpd.conf

V tomto souboru odkomentujeme nebo doplníme některá nastavení. Zakáže přihlašování anonymních uživatelů k ftp:

anonymous_enable=NO

Povolení zapisování souborů:

write_enable=YES

Standardně je maska vytvářených souborů adresářů 077. To znamená, že soubory a adresáře ukládané na ftp mají oprávnění 700 (rwx------). Vlastník (přihlášený uživatel) má právo čtení, zápisu a spuštění souboru nebo vstup do adresáře. Ostatní uživatelé a skupina nemají k těmto souborům a adresářům přístup. Vhodnější je maska 022 (oprávnění 755 = rwxr-xr-x), kdy má vlastník plná práva a zároveň ostatní mohou soubory číst, spouštět a mají přístup do adresářů. Poslední možnost, která se často využívá, ale není z hlediska bezpečnosti příliš vhodná, je maska 000. Tato maska dává veškerá oprávnění s nakládání se soubory všem uživatelům.

local_umask=022

nebo

local_umask=000

Nastavení logování:

xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES

Úprava přihlašovacího banneru. Je vhodné tuto volbu zapnout z důvodu různých skenovacích programů. Ftp server se neohlásí svojí defaultní hláškou.

ftpd_banner=Welcome to blah FTP service.

Uzamkneme uživatele v jejich domovském adresáři. V opačném případě mohou i do nadřazených adresářů (resp. po celém filesystemu).

chroot_local_user=YES

Pokud přece jen chceme některým uživatelům umožnit opuštění jejich adresáře, pak můžeme aktivovat následující volby. V souboru vsftpd.chroot_list uvedeme na jednotlivých řádcích jména uživatelů, pro které neplatí omezení na jejich domovský adresář (viz. chroot_local_user=YES).

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

Následující volby mají za cíl definovat uživatele, kteří se mohou přihlásit k ftp účtu. Pokud by nebylo toto nastavení zapnuto, pak se mohou zalogovat všichni uživatelé v systému (vyjma uvedených v souboru /etc/vsftpd/ftpusers), kteří mají platný domovský adresář a funkční shell.

userlist_deny=NO
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list

Příklad souboru vsftpd.user_list:

# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
backup
jindra
pavel
cobian

Dále je vhodné omezit maximální počet klientů. Ve výchozím nastavení není tento počet nikterak omezen.

max_clients=25

To stejné platí i o omezení počtu klientů z jedné IP. Při tomto nastavení je třeba uvažovat i o možnosti, že k serveru přistupují uživatelé přes NAT. Uživatelé za NATem mají stejnou IP adresu, proto je nevhodné v takovém případě nastavit hodnotu na číslo 1.

max_per_ip=5

Používat a zobrazovat lokální čas, nikoliv světový.

use_localtime=YES

Můžeme omezit počet pokusů o přihlášení v rámci jednoho spojení. Výchozí hodnota jsou 3.

max_login_fails=1

Vhodné je i prodloužit odpověď při špatném zadání hesla. Standardní hodnota je 1 sekunda. Z hlediska odrazení brutálního útoku jméno a heslo je vhodnější tuto dobu prodloužit.

delay_failed_login=10

Vhodný program, který blokuje IP adresy, ze kterých se podniká na server útok je fail2ban. Funguje s řadou serverů a pro veřejně přístupné servery ho lze jen doporučit. Pokud pro ftp server chce uživatele, kteří se pouze přihlašují k této službě, pak je vhodné jim zablokovat přihlášení ke konzoli. To lze udělat následujícím způsobem: Vytvoříme soubor /bin/ftponly:

sudo echo '#!/bin/bash ' > /bin/ftponly
sudo echo ' echo "This account is only allowed FTP access."' >> /bin/ftponly
sudo chmod a+x /bin/ftponly

Obsah souboru není až tak podstatný, jedná se o skript, který se spustí místo přihlašovacího shellu a předá nám informaci, že nemáme oprávnění se přihlásit ke konzoli.

#!/bin/sh
#
# ftponly shell
#
trap "/bin/echo Sorry; exit 0" 1 2 3 4 5 6 7 10 15
#
IFS=""
Admin=Supervisor
System=Ubuntu
#
/bin/echo
/bin/echo "********************************************************************"
/bin/echo "    You are NOT allowed interactive access to $System."
/bin/echo
/bin/echo "     User accounts are restricted to ftp and web access."
/bin/echo
/bin/echo "  Direct questions concerning this policy to $Admin."
/bin/echo "********************************************************************"
/bin/echo
#
# C'ya
exit 0

Následně přidejte do souboru /etc/shells odkaz na nový shell:

sudo echo '/bin/ftponly' >> /etc/shells

Nového uživatele pro ftp vytvoříme následujícím způsobem:

sudo useradd -m -s /bin/ftponly pavel
sudo passwd pavel

Pokud budeme chtít si situaci zjednodušit, aby se nově vytvořeným uživatelům prostřednictvím příkazu useradd tento „shell“ přiřazoval jako výchozí, pak je třeba upravit soubor /etc/default/useradd Nahradíme výchozí shell SHELL=/bin/sh za SHELL=/bin/ftponly To samé můžeme udělat i pro příkaz adduser. Jeho konfigurace se skrývá v souboru /etc/adduser.conf, tam nahradíme DSHELL=/bin/bash za DSHELL=/bin/ftponly. Nového uživatele pak můžeme přidat následujícím způsobem:

sudo useradd -m pavel
sudo passwd pavel

Na závěr si ponechávám ještě jednoduchý skript, který jsem nalezl na webu. Přidá do souboru /etc/ftpusers všechny uživatele. Uživatelé uvedení v tomto souboru se nemohou přihlásit k ftp. 

sudo cat /etc/passwd|cut -f 1 -d: > /etc/ftpusers