GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak nainstalovat a nakonfigurovat FTP server (vsftpd) s SSL/TLS na Ubuntu 20.04

FTP neboli File Transfer Protocol je velmi starý známý protokol pro přenos souborů mezi klientem a serverem. Je to také nezabezpečený protokol ut, pouze pokud se používá bez TLS. V tomto tutoriálu nakonfigurujeme vsftpd pro TLS, což nám umožňuje bezpečně používat FTP. FTP byl v dnešní době často nahrazován bezpečnějšími protokoly, jako je SFTP nebo SCP.

Pokud však potřebujete používat FTP se svým serverem, vsftpd (Very Secure FTP Daemon) je perfektní volbou.

V tomto tutoriálu se naučíme, jak nainstalovat a nakonfigurovat FTP server pomocí vsftpd na serveru založeném na Ubuntu 20.04. Dozvíme se také, jak zabezpečit připojení pomocí protokolu SSL/TLS.

Předpoklady

  • Server Ubuntu 20.04 s uživatelem bez oprávnění root s oprávněními sudo.

Krok 1 – Instalace vsftpd

Prvním krokem je instalace vsftpd.

$ sudo apt update
$ sudo apt install vsftpd

Dále musíme zálohovat původní konfigurační soubor, abychom mohli začít s novou konfigurací.

$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

Krok 2 – Konfigurace brány firewall

V tomto kroku nakonfigurujeme UFW firewall tak, aby umožňoval přístup k FTP portům.

Nejprve zkontrolujme stav brány firewall.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Jak vidíme, zatím jsou povoleny pouze porty SSH. Otevřeme porty 20 (příkazový port FTP), 21 (datový port FTP), 990 pro použití TLS a porty 35000-40000 pro rozsah pasivních portů, které můžeme v budoucnu potřebovat.

$ sudo ufw allow 20:21/tcp
$ sudo ufw allow 990/tcp
$ sudo ufw allow 35000:40000/tcp
$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
990/tcp                    ALLOW       Anywhere
20:21/tcp                  ALLOW       Anywhere
35000:40000/tcp            ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
20:21/tcp (v6)             ALLOW       Anywhere (v6)
990/tcp (v6)               ALLOW       Anywhere (v6)
35000:40000/tcp (v6)       ALLOW       Anywhere (v6)

Krok 3 – Konfigurace vsftpd

Nyní projdeme některá důležitá nastavení, aby vsftpd fungoval.

Začněte otevřením konfiguračního souboru.

$ sudo nano /etc/vsftpd.conf

1. FTP přístup

V tomto tutoriálu povolíme FTP přístup pouze místním uživatelům a zakážeme jakýkoli anonymní přístup. Chcete-li to provést, ujistěte se, že existují následující řádky a jsou následující.

anonymous_enable=NO
local_enable=YES

2. Povolení nahrávání souborů

Jediným nejdůležitějším účelem FTP je zde možnost zapisovat na server. Chcete-li povolit nahrávání souborů odstraněním #, odkomentujte následující řádek před ním.

write_enable=YES

3. Chroot Jail

FTP funguje nejlépe, když je uživatel omezen na určitý adresář. vsftpd toho dosahuje pomocí chrootových vězení. Když je pro místní uživatele povolen chroot, jsou ve výchozím nastavení omezeni na své domovské adresáře. Chcete-li toho dosáhnout, odkomentujte následující řádek.

chroot_local_user=YES

Aby se předešlo jakékoli zranitelnosti zabezpečení, chroot, když je povolený, nebude fungovat, pokud do adresáře, na který jsou uživatelé omezeni, lze zapisovat.

Abychom toto omezení obešli, máme dva způsoby, jak povolit nahrávání souborů, když je povolen chroot.

  1. Metoda 1 - Tato metoda funguje s použitím jiného adresáře pro odesílání FTP. Pro tento tutoriál vytvoříme ftp adresář v domově uživatele, který bude sloužit jako chroot a druhý zapisovatelný adresář upload pro nahrání souborů. Chcete-li toho dosáhnout, přidejte následující řádky na konec souboru.

    user_sub_token=$USER
    local_root=/home/$USER/ftp
    
  2. Metoda 2 - Druhá metoda je jednoduše udělit zapisovatelný přístup k domovskému adresáři jako celku. Chcete-li toho dosáhnout, přidejte následující řádek.

    allow_writeable_chroot=YES
    

4. Pasivní FTP

vsftpd může použít jakýkoli port pro pasivní FTP připojení. Můžeme zadat rozsah pro minimální a maximální číslo portu, které může vsftpd použít. Toto jsou porty, které jsme dříve nakonfigurovali v našem firewallu UFW.

Chcete-li povolit pasivní připojení FTP, přidejte následující řádky.

pasv_min_port=35000
pasv_max_port=40000

5. Omezení uživatelů

Chcete-li povolit přihlášení k serveru FTP pouze určitým uživatelům, přidejte do spodní části následující řádky.

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

Pokud je tato možnost povolena, musíme určit, kteří uživatelé by měli mít povoleno používat FTP, a přidat jejich uživatelská jména do /etc/vsftpd.userlist soubor.

Restartujte vsftpd, abyste povolili konfiguraci.

$ sudo systemctl restart vsftpd

Krok 4 – Konfigurace uživatelského adresáře

Pro účely tohoto tutoriálu vytvoříme nový uživatelský účet pro FTP transakce. Pokud již pro tento účel máte uživatelský účet, můžete přeskočit krok 1. Také pokud jste nastavili allow_writeable_chroot=YES v konfiguračním souboru dříve, můžete přeskočit krok 3.

Krok 1 – Přidání nového uživatele.

$ sudo adduser testuser

Nastavte silné heslo a přeskočte všechny ostatní výzvy.

Krok 2 – Přidejte uživatele do seznamu povolených uživatelů FTP.

$ echo "testuser" | sudo tee -a /etc/vsftpd.userlist

Krok 3 – Vytvoření FTP a adresáře souborů

Tento krok je, pokud chcete jiný adresář jako kořenový adresář FTP a jiný pro nahrávání souborů, abyste obešli omezení vězení chroot.

Vytvořte složku FTP.

$ sudo mkdir /home/testuser/ftp

Nastavte jeho vlastnictví.

$ sudo chown nobody:nogroup /home/testuser/ftp

Odeberte oprávnění k zápisu.

$ sudo chmod a-w /home/testuser/ftp

Než budete pokračovat, ověřte oprávnění.

$ sudo ls -al /home/testuser/ftp
total 8
dr-xr-xr-x 2 nobody   nogroup  4096 Jun  7 13:08 .
drwxr-xr-x 3 testuser testuser 4096 Jun  7 13:08 ..

Nyní vytvoříme skutečný zapisovatelný adresář pro soubory.

$ sudo mkdir /home/testuser/ftp/upload
$ sudo chown testuser:testuser /home/testuser/ftp/upload

Otestujte oprávnění.

$ sudo ls -al /home/testuser/ftp
total 12
dr-xr-xr-x 3 nobody   nogroup  4096 Jun  7 13:10 .
drwxr-xr-x 3 testuser testuser 4096 Jun  7 13:08 ..
drwxr-xr-x 2 testuser testuser 4096 Jun  7 13:10 upload

Nakonec přidáme test.txt soubor použít pro testování.

$ echo "vsftpd test file" | sudo tee /home/testuser/ftp/upload/test.txt

Krok 5 – Test FTP přístupu

Náš FTP server je v tuto chvíli plně funkční. Než budeme pokračovat, můžeme udělat malý test.

Zkusme se přihlásit jako anonymní uživatel.

$ ftp -p 136.244.105.99
Connected to 136.244.105.99.
220 (vsFTPd 3.0.3)
Name (136.244.105.99:default): anonymous
530 Permission denied.
ftp: Login failed.
ftp>

Ukončete připojení.

ftp> bye

Funguje tak, jak má, tj. anonymní uživatelé nejsou povoleni.

Zkusme se připojit jako jakýkoli jiný uživatel sudo. Nemělo by se také připojit.

$ ftp -p 136.244.105.99
Connected to 136.244.105.99.
220 (vsFTPd 3.0.3)
Name (136.244.105.99:default): sudo_user
530 Permission denied.
ftp: Login failed.
ftp>

Ukončete připojení.

ftp> bye

Zkusme se konečně připojit jako testuser který jsme vytvořili pro FTP.

$ ftp -p 136.244.105.99
Connected to 136.244.105.99.
220 (vsFTPd 3.0.3)
Name (136.244.105.99:default): testuser
331 Please specify the password.
Password: your_user's_password
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

Přepněte na upload a použijte get příkaz k přenosu testovacího souboru do našeho místního počítače.

ftp> cd upload
250 Directory successfully changed.
ftp> get test.txt
227 Entering Passive Mode (136,244,105,99,165,42).
150 Opening BINARY mode data connection for test.txt (17 bytes).
226 Transfer complete.
16 bytes received in 0.0101 seconds (164.3719 kB/s)
ftp>

Dále nahrajte soubor s novým názvem pomocí put příkaz k otestování oprávnění k zápisu.

ftp> put test.txt upload.txt
227 Entering Passive Mode (136,244,105,99,163,102).
150 Ok to send data.
226 Transfer complete.
17 bytes sent in 0.000894 seconds (518.7988 kB/s)

Ukončete připojení.

ftp> bye

Krok 6 – Zabezpečení přenosů pomocí SSL/TLS

Abychom mohli šifrovat přenosy FTP, potřebujeme mít certifikát SSL a nakonfigurovat vsftpd tak, aby jej používal.

Pokud již máte doménu nebo subdoménu směřující na váš FTP server, můžete si vytvořit bezplatný certifikát Let's Encrypt SSL a používat jej.

Pro účely našeho tutoriálu použijeme certifikát SSL s vlastním podpisem. Chcete-li jej vytvořit, použijte openssl příkaz.

Následující příkaz vytvoří 2048bitový soukromý klíč a certifikát platný 1 rok. Certifikát i klíč budou uloženy do stejného souboru.

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem

Můžete buď přeskočit následující výzvy, nebo vyplnit hodnoty podle svých představ.

Nyní, když je náš certifikát vytvořen, je čas znovu otevřít konfigurační soubor vsftpd.

$ sudo nano /etc/vsftpd.conf

Najděte následující řádky a okomentujte je tím, že před ně dáte hash, jak je uvedeno níže.

# rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
# rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

Nyní přidejte následující řádky.

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem

Změňte také hodnotu ssl_enable na YES .

ssl_enable=YES

Pojďme přidat několik dalších nastavení pro zlepšení zabezpečení SSL.

allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH

Většina těchto nastavení je samovysvětlující. Ty zakazují SSL pro anonymní uživatele a vyžadují SSL pro přenos dat i pro přihlášení. Zakázali jsme také nezabezpečené protokoly SSL a budeme se držet TLSv1.0. A nakonec jsme zakázali opětovné použití SSL a vyžadujeme šifrovací sady s vysokým šifrováním.

Restartujte server, aby se nastavení projevila.

$ sudo systemctl restart vsftpd

Nyní nebudete moci používat FTP prostřednictvím příkazového řádku. Budete se muset připojit pomocí klienta, který podporuje TLS.

Krok 7 – Testování TLS pomocí FileZilla

V našem tutoriálu otestujeme schopnost TLS pomocí Filezilla.

Když otevřete Filezilla, klikněte na ikonu Site Manager těsně nad slovem Host v horním řádku.

Otevře se nové okno. Klikněte na Nový web v pravém dolním rohu.

Zobrazí se nová ikona s názvem Nový web . Můžete jej přejmenovat pomocí Přejmenovat tlačítko.

Do pole Host vyplňte IP adresu vašeho serveru. Protože náš port FTP je 21, což je výchozí port pro FTP, můžete port ponechat pole prázdné. U možnosti Šifrování vyberte Vyžadovat explicitní FTP přes TLS z rozbalovací nabídky.

Vyplňte své uživatelské jméno a heslo FTP pomocí těch, které jsme vytvořili výše. Klikněte na tlačítko Připojit pokračujte.

Po úspěšném připojení uvidíte certifikát serveru, který vypadá následovně.

Můžete zaškrtnout možnost Vždy důvěřovat tomuto certifikátu v budoucích relacích. abyste nebyli dotázáni pokaždé, když se přihlašujete. Klikněte na OK pokračovat.

Nyní můžete provádět běžné operace FTP.

Krok 8 – Zakázání přístupu k prostředí

Tento krok je zcela volitelný. Ve výchozím nastavení při vytváření uživatele FTP, pokud není výslovně uvedeno, uživatel bude mít přístup SSH k serveru.

Pro zlepšení zabezpečení byste měli zakázat přístup k shellu pro uživatele FTP. Abychom to zakázali, musíme vytvořit nový shell, který vypíše zprávu, že uživatelský úč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/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 dát FTP přístup.

Závěr

Tímto končí náš tutoriál, kde jsme nainstalovali a nakonfigurovali vsftpd pro instalaci FTP serveru na server založený na Ubuntu 20.04. Také jsme nakonfigurovali naše FTP připojení tak, aby fungovalo pomocí SSL/TLS.

Pokud máte nějaké dotazy, zeptejte se je v komentářích níže.


Ubuntu
  1. Jak nainstalovat FTP server na CentOS 7 s VSFTPD

  2. Jak nainstalovat vsftpd FTP server a zabezpečit jej pomocí TLS na Debian 11

  3. Nainstalujte Vsftpd s SSL/TLS na Ubuntu 20.04

  1. Jak nainstalovat FTP server na Ubuntu s vsftpd

  2. Jak nainstalovat a nakonfigurovat server NFS na Ubuntu 20.04

  3. Jak nainstalovat a nakonfigurovat VNC na Ubuntu 20.04

  1. Jak nastavit FTP server s VSFTPD na Ubuntu 20.04

  2. Jak nainstalovat a nakonfigurovat VNC na Ubuntu 18.04

  3. Jak nastavit FTP server s VSFTPD na Ubuntu 18.04