FTP (File Transfer Protocol) je standardní síťový protokol používaný k přenosu souborů do a ze vzdálené sítě.
Pro Linux je k dispozici mnoho open-source FTP serverů. Nejoblíbenější a nejrozšířenější jsou PureFTPd, ProFTPD a vsftpd. V tomto tutoriálu nainstalujeme vsftpd (Very Secure Ftp Daemon). Je to stabilní, bezpečný a rychlý FTP server. Ukážeme vám také, jak nakonfigurovat vsftpd tak, aby omezil uživatele na jejich domovský adresář a zašifroval celý přenos pomocí SSL/TLS.
Přestože je tento návod napsán pro Ubuntu 18.04, stejné pokyny platí pro Ubuntu 16.04 a jakoukoli distribuci založenou na Debianu, včetně Debianu, Linux Mint a Elementary OS.
Pro bezpečnější a rychlejší přenosy dat použijte SC nebo SFTP.
Předpoklady #
Než budete pokračovat v tomto tutoriálu, ujistěte se, že jste přihlášeni jako uživatel s právy sudo.
Instalace vsftpd na Ubuntu 18.04 #
Balíček vsftpd je dostupný v repozitářích Ubuntu. Chcete-li jej nainstalovat, jednoduše spusťte následující příkazy:
sudo apt updatesudo apt install vsftpd
Služba vsftpd se automaticky spustí po dokončení procesu instalace. Ověřte to vytištěním stavu služby:
sudo systemctl status vsftpd Výstup bude vypadat podobně jako níže, což ukazuje, že služba vsftpd je aktivní a běží:
* vsftpd.service - vsftpd FTP server
Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2018-10-15 03:38:52 PDT; 10min ago
Main PID: 2616 (vsftpd)
Tasks: 1 (limit: 2319)
CGroup: /system.slice/vsftpd.service
`-2616 /usr/sbin/vsftpd /etc/vsftpd.conf
Konfigurace vsftpd #
Server vsftpd lze konfigurovat úpravou /etc/vsftpd.conf soubor. Většina nastavení je dobře zdokumentována v konfiguračním souboru. Pro všechny dostupné možnosti navštivte oficiální stránku vsftpd.
V následujících částech projdeme některá důležitá nastavení potřebná ke konfiguraci zabezpečené instalace vsftpd.
Začněte otevřením konfiguračního souboru vsftpd:
sudo nano /etc/vsftpd.conf 1. FTP přístup #
Přístup k FTP serveru umožníme pouze místním uživatelům, vyhledejte anonymous_enable a local_enable direktivy a ověřte, že se vaše konfigurace shoduje s řádky níže:
anonymous_enable=NO
local_enable=YES
2. Povolení nahrávání #
Odkomentujte write_enable nastavení umožňující změny v souborovém systému, jako je nahrávání a mazání souborů.
write_enable=YES
3. Chroot Jail #
Chcete-li uživatelům FTP zabránit v přístupu k souborům mimo jejich domovské adresáře, odkomentujte chroot nastavení.
chroot_local_user=YES
Ve výchozím nastavení, aby se zabránilo bezpečnostní zranitelnosti, když je povolen chroot, vsftpd odmítne nahrát soubory, pokud do adresáře, ve kterém jsou uživatelé uzamčeni, lze zapisovat.
Použijte jednu z níže uvedených metod k povolení nahrávání, když je povolen chroot.
-
Metoda 1. - Doporučený způsob, jak povolit nahrávání, je ponechat zapnutý chroot a nakonfigurovat adresáře FTP. V tomto tutoriálu vytvoříme
/etc/vsftpd.confftpadresář uvnitř uživatelského domova, který bude sloužit jako chroot a zapisovatelnýuploadsadresář pro nahrávání souborů.user_sub_token=$USER local_root=/home/$USER/ftp -
Metoda 2 - Další možností je přidat následující direktivu do konfiguračního souboru vsftpd. Tuto možnost použijte, pokud musíte svému uživateli udělit přístup k zápisu do jeho domovského adresáře.
/etc/vsftpd.confallow_writeable_chroot=YES
4. Pasivní připojení FTP #
vsftpd může použít jakýkoli port pro pasivní FTP připojení. Určíme minimální a maximální rozsah portů a později rozsah otevřeme v našem firewallu.
Přidejte do konfiguračního souboru následující řádky:
/etc/vsftpd.confpasv_min_port=30000
pasv_max_port=31000
5. Omezení přihlášení uživatele #
Chcete-li umožnit přihlášení k serveru FTP pouze některým uživatelům, přidejte na konec souboru následující řádky:
/etc/vsftpd.confuserlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
Když je tato možnost povolena, musíte explicitně určit, kteří uživatelé se mohou přihlásit přidáním uživatelských jmen do /etc/vsftpd.user_list soubor (jeden uživatel na řádek).
6. Zabezpečení přenosů pomocí SSL/TLS #
Abyste mohli šifrovat přenosy FTP pomocí SSL/TLS, musíte mít certifikát SSL a nakonfigurovat server FTP, aby jej používal.
Můžete použít existující certifikát SSL podepsaný důvěryhodnou certifikační autoritou nebo vytvořit certifikát s vlastním podpisem.
Pokud máte doménu nebo subdoménu směřující na IP adresu FTP serveru, můžete si snadno vygenerovat bezplatný certifikát Let's EncryptSSL.
Vygenerujeme certifikát SSL s vlastním podpisem pomocí openssl příkaz.
Následující příkaz vytvoří 2048bitový soukromý klíč a certifikát s vlastním podpisem platný po dobu 10 let. Soukromý klíč i certifikát budou uloženy ve stejném souboru:
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem Po vytvoření certifikátu SSL otevřete konfigurační soubor vsftpd:
sudo nano /etc/vsftpd.conf
Najděte rsa_cert_file a rsa_private_key_file direktivy, změňte jejich hodnoty na pam cestu k souboru a nastavte ssl_enable direktivu YES :
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
Pokud není uvedeno jinak, FTP server bude používat pouze TLS k vytvoření zabezpečeného připojení.
Restartujte službu vsftpd #
Po dokončení úprav by konfigurační soubor vsftpd (kromě komentářů) měl vypadat nějak takto:
/etc/vsftpd.conflisten=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
user_sub_token=$USER
local_root=/home/$USER/ftp
pasv_min_port=30000
pasv_max_port=31000
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
Uložte soubor a restartujte službu vsftpd, aby se změny projevily:
sudo systemctl restart vsftpd Otevření brány firewall #
Pokud používáte firewall UFW, budete muset povolit provoz FTP.
Chcete-li otevřít port 21 (příkazový port FTP), port 20 (datový port FTP) a 30000-31000 (Rozsah pasivních portů), spusťte následující příkazy:
sudo ufw allow 20:21/tcpsudo ufw allow 30000:31000/tcp
Chcete-li se vyhnout uzamčení, otevřete port 22 :
sudo ufw allow OpenSSH Znovu načtěte pravidla UFW vypnutím a opětovným povolením UFW:
sudo ufw disablesudo ufw enable
Pro ověření změn spusťte:
sudo ufw status Status: active
To Action From
-- ------ ----
20:21/tcp ALLOW Anywhere
30000:31000/tcp ALLOW Anywhere
OpenSSH ALLOW Anywhere
20:21/tcp (v6) ALLOW Anywhere (v6)
30000:31000/tcp (v6) ALLOW Anywhere (v6)
OpenSSH (v6) ALLOW Anywhere (v6)
Vytváření FTP uživatele #
Pro otestování našeho FTP serveru vytvoříme nového uživatele.
- Pokud již máte uživatele, kterému chcete udělit přístup FTP, přeskočte 1. krok.
- Pokud nastavíte
allow_writeable_chroot=YESve vašem konfiguračním souboru přeskočte 3. krok.
-
Vytvořte nového uživatele s názvem
newftpuser:sudo adduser newftpuser -
Přidejte uživatele do seznamu povolených uživatelů FTP:
echo "newftpuser" | sudo tee -a /etc/vsftpd.user_list -
Vytvořte strom adresářů FTP a nastavte správná oprávnění:
sudo mkdir -p /home/newftpuser/ftp/uploadsudo chmod 550 /home/newftpuser/ftpsudo chmod 750 /home/newftpuser/ftp/uploadsudo chown -R newftpuser: /home/newftpuser/ftpJak bylo uvedeno v předchozí části, uživatel bude moci nahrávat své soubory do
ftp/uploadadresář.
V tuto chvíli je váš FTP server plně funkční a měli byste být schopni se k němu připojit pomocí libovolného FTP klienta, který může být nakonfigurován pro použití TLS šifrování, jako je FileZilla.
Zakázání přístupu k prostředí #
Ve výchozím nastavení při vytváření uživatele, pokud není výslovně uvedeno, bude mít uživatel SSH přístup k serveru.
Chcete-li zakázat přístup k shellu, vytvoříme nový shell, který jednoduše vytiskne zprávu sdělující uživateli, že jeho účet je omezen pouze na FTP přístup.
Vytvořte /bin/ftponly shell a udělejte jej spustitelným:
echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a /bin/ftponlysudo chmod a+x /bin/ftponly
Přidejte nový shell do seznamu platných shellů v /etc/shells soubor:
echo "/bin/ftponly" | sudo tee -a /etc/shells
Změňte uživatelské prostředí na /bin/ftponly :
sudo usermod newftpuser -s /bin/ftponly Použijte stejný příkaz ke změně shellu všech uživatelů, kterým chcete udělit pouze FTP přístup.