Tento článek popisuje, jak nainstalovat a nakonfigurovat FTP server na Ubuntu 20.04, který používáte ke sdílení souborů mezi vašimi zařízeními.
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 několik open-source FTP serverů. Nejznámější a nejrozšířenější jsou PureFTPd, ProFTPD a vsftpd. Budeme instalovat vsftpd (Very Secure Ftp Daemon), stabilní, bezpečný a rychlý FTP server. Ukážeme vám také, jak nakonfigurovat server tak, aby omezoval uživatele na jejich domovský adresář a šifroval celý přenos pomocí SSL/TLS.
Ačkoli je FTP velmi oblíbený protokol, pro bezpečnější a rychlejší přenosy dat byste měli používat SC nebo SFTP.
Instalace vsftpd na Ubuntu 20.04 #
Balíček vsftpd je dostupný v repozitářích Ubuntu. Chcete-li jej nainstalovat, spusťte následující příkazy:
sudo apt update
sudo apt install vsftpd
Služba ftp se automaticky spustí po dokončení procesu instalace. Chcete-li to ověřit, vytiskněte stav služby:
sudo systemctl status vsftpd
Výstup by měl ukazovat, ž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 Tue 2021-03-02 15:17:22 UTC; 3s ago
...
Konfigurace vsftpd #
Konfigurace serveru vsftpd je uložena v /etc/vsftpd.conf
soubor.
Většina nastavení serveru je dobře zdokumentována uvnitř souboru. Všechny dostupné možnosti naleznete na stránce dokumentace 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 povolí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í #
Vyhledejte a zrušte komentář write_enable
direktiva umožňující změny souborového systému, jako je nahrávání a odstraňování souborů:
write_enable=YES
3. Chroot vězení #
Chcete-li místním FTP uživatelům zabránit v přístupu k souborům mimo jejich domovské adresáře, zrušte komentář u řádku začínajícího chroot_local_user
:
chroot_local_user=YES
Ve výchozím nastavení, z bezpečnostních důvodů, když je povolen chroot, vsftpd odmítne nahrát soubory, pokud je do adresáře, ve kterém jsou uživatelé uzamčeni, zapisovatelný.
Chcete-li povolit nahrávání, když je povolen chroot, použijte jedno z níže uvedených řešení:
-
Metoda 1. - Doporučená možnost je ponechat zapnutou funkci chroot a nakonfigurovat adresáře FTP. V tomto příkladu vytvoříme
/etc/vsftpd.confftp
adresář uvnitř uživatelského domova, který bude sloužit jako chroot a zapisovatelnýuploads
adresář pro nahrávání souborů:user_sub_token=$USER local_root=/home/$USER/ftp
-
Metoda 2 - Další možností je povolit
/etc/vsftpd.confallow_writeable_chroot
směrnice:allow_writeable_chroot=YES
Tuto možnost použijte pouze v případě, že musíte svému uživateli udělit přístup k zápisu do jeho domovského adresáře.
4. Pasivní připojení FTP #
Ve výchozím nastavení používá vsftpd aktivní režim. Chcete-li použít pasivní režim, nastavte minimální a maximální rozsah portů:
/etc/vsftpd.confpasv_min_port=30000
pasv_max_port=31000
Pro pasivní FTP připojení můžete použít jakýkoli port. Když je povolen pasivní režim, FTP klient otevře připojení k serveru na náhodném portu ve vámi zvoleném rozsahu.
5. Omezení přihlášení uživatele #
Vsftpd můžete nakonfigurovat tak, aby povolil přihlášení pouze určitým uživatelům. Chcete-li tak učinit, 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 #
Chcete-li š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 rychle vygenerovat bezplatný certifikát Let's EncryptSSL.
Vygenerujeme 2048bitový soukromý klíč a certifikát SSL s vlastním podpisem, který bude platný po dobu deseti let:
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
Soukromý klíč i certifikát budou uloženy ve stejném souboru.
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/tcp
sudo ufw allow 30000:31000/tcp
Abyste se vyhnuli uzamčení, ujistěte se, že port 22
je otevřeno:
sudo ufw allow OpenSSH
Znovu načtěte pravidla UFW vypnutím a opětovným povolením UFW:
sudo ufw disable
sudo 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 testování FTP serveru vytvoříme nového uživatele.
- Pokud uživatel, kterému chcete udělit přístup FTP, již existuje, přeskočte 1. krok.
- Pokud nastavíte
allow_writeable_chroot=YES
v 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/upload
sudo chmod 550 /home/newftpuser/ftp
sudo chmod 750 /home/newftpuser/ftp/upload
sudo chown -R newftpuser: /home/newftpuser/ftp
Jak bylo uvedeno v předchozí části, uživatel bude moci nahrávat své soubory do
ftp/upload
adresář.
V tomto okamžiku je váš FTP server plně funkční. Měli byste být schopni se připojit k serveru pomocí libovolného FTP klienta, který lze nakonfigurovat pro použití šifrování TLS, jako je FileZilla.
Zakázání přístupu k prostředí #
Ve výchozím nastavení bude mít uživatel při vytváření uživatele, pokud není výslovně uveden, přístup k serveru pomocí SSH. Chcete-li zakázat přístup k shellu, vytvořte nový shell, který vytiskne zprávu sdělující uživateli, že jeho účet je omezen pouze na FTP přístup.
Spuštěním následujících příkazů vytvořte /bin/ftponly
soubor a udělejte jej spustitelným:
echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a /bin/ftponly
sudo 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
Stejný příkaz můžete použít ke změně shellu všech uživatelů, kterým chcete udělit pouze FTP přístup.