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