Vsftpd je zkratka Very Secure FTP Daemon:je to jeden z nejpoužívanějších ftp serverů na Linuxu a dalších unixových operačních systémech. Je to open source a je vydán pod licencí GPL a podporuje virtuální uživatele a SSL pro
šifrování dat. V tomto tutoriálu uvidíme, jak jej nainstalovat a nakonfigurovat v systému Linux.
V tomto tutoriálu se to naučíte :
- Jak nainstalovat vsftpd na Debian 10
- Jak nakonfigurovat vsftpd
- Jak nastavit anonymní použití
- Jak nastavit přihlášení s místními uživateli
- Jak nastavit virtuální uživatele
- Jak nastavit ufw, aby povolil příchozí provoz
Jak nastavit vsftpd na Debianu
Použité softwarové požadavky a konvence
Kategorie | Požadavky, konvence nebo použitá verze softwaru |
---|---|
Systém | Debian 10 (Buster) |
Software | vsftpd, openssl, libpam-pwdfile |
Jiné | Kořenová oprávnění k instalaci a konfiguraci vsftpd |
Konvence | # – vyžaduje, aby dané linuxové příkazy byly spouštěny s právy root buď přímo jako uživatel root, nebo pomocí sudo command$ – vyžaduje, aby dané linuxové příkazy byly spouštěny jako běžný neprivilegovaný uživatel |
Instalace
Vsftpd je k dispozici v oficiálních repozitářích Debianu, takže k jeho instalaci můžeme použít našeho oblíbeného správce balíčků; je to jen otázka synchronizace repozitářů a instalace balíčku. Obě věci lze provést
spuštěním následujících příkazů:
$ sudo apt-get update && sudo apt-get install vsftpd
Několik sekund a balíček se nainstaluje do našeho systému Debian. Instalační skripty obsažené v balíčku se také postarají o spuštění vsftpd služba automaticky, ale musíme pamatovat na restartování nebo opětovné načtení služby pokaždé, když změníme konfigurační soubor. Aby bylo možné používat virtuální uživatele Funkce poskytovaná vsftpd, musíme také nainstalovat další balíček:
$ sudo apt-get install libpam-pwdfile
Jeho použití uvidíme ve vyhrazené části tohoto tutoriálu.
Jakmile jsou potřebné balíčky nainstalovány, můžeme pokračovat dále a nakonfigurovat vsftpd:uvidíme, jak to udělat v další části tohoto tutoriálu.
Nastavení Vsftpd
Konfigurační soubor vsftpd je /etc/vsftpd.conf
. Pokud jej otevřeme, můžeme vidět různé direktivy, které jsou v něm již obsaženy. Podívejme se, co je pro nejběžnější případy nejrelevantnější.
Povolit anonymní přihlášení
Neověřený přístup k serveru jako anonymní uživatelé je ve výchozím nastavení zakázán. Abychom to povolili, musíme použít anonymous_enable
direktivu, která je v konfiguračním souboru umístěna na řádku 25
. Jediné, co musíme udělat, je nastavit jej na YES
:
musí změnit pokyn na:
anonymous_enable=YES
Další direktivou, kterou možná budeme chtít změnit, je ta, která nám umožňuje nastavit adresář, ve kterém se vsftpd pokusí procházet po anonymním přístupu. Direktiva, která nám umožňuje toto nastavení ovládat, je anon_root
. Řekněme, že chceme, aby měl anonymní uživatel přístup k /srv/ftp
adresář ve výchozím nastavení bychom napsali:
anon_root=/srv/ftp
Všechna anonymní přihlášení jsou interně mapována na navrženého uživatele, kterým je ve výchozím nastavení ftp
. Ke změně tohoto mapování musíme použít ftp_username
a nastavte jej na jméno uživatele, na kterého chceme anonymní uživatele namapovat.
Ve výchozím nastavení nebude mít anonymní uživatel ze zjevných bezpečnostních důvodů povoleno nic psát na server. Pokud chcete toto chování změnit (nedoporučuje se), existuje několik možností, které je třeba změnit. Nejprve obecné write_enable
direktiva musí být nastavena na YES
. Tato směrnice je okomentována na řádku 31
konfiguračního souboru, takže vše, co musíte udělat, je odstranit komentář.
# Uncomment this to enable any form of FTP write command. write_enable=YES
Jakmile je tato direktiva povolena, vše, co musíme udělat, je pracovat na dalších dvou možnostech:anon_upload_enable
a anon_mkdir_write_enable
. Když je první nastavení nastaveno na YES
anonymní uživatel bude moci nahrát soubory, ale pouze v případě, že uživatel, na kterého je mapován (jak jsme řekli, standardně ftp), má oprávnění k zápisu do cílového adresáře. K aktivaci této možnosti stačí odstranit komentář z řádku 40
konfiguračního souboru:
# Uncomment this to allow the anonymous FTP user to upload files. This only # has an effect if the above global write enable is activated. Also, you will # obviously need to create a directory writable by the FTP user. anon_upload_enable=YES
anon_mkdir_write_enable
místo toho, když je nastavena na YES
umožňuje anonymním uživatelům vytvářet nové adresáře na serveru za stejných podmínek, jaké jsme viděli výše (podkladový uživatel na serveru musí mít oprávnění k zápisu do nadřazeného adresáře). Direktiva se nachází na řádku 44
konfiguračního souboru:
# Uncomment this if you want the anonymous FTP user to be able to create # new directories. anon_mkdir_write_enable=YES
Ještě jednou, protože proměnná je již nastavena na YES
, aby to bylo relevantní, vše, co musíme udělat, je odstranit z něj komentář.
Umožnit anonymním uživatelům provádět i jiné druhy operací zápisu, jako je například přejmenování nebo smazání adresář, musíme použít jinou direktivu, která není přítomna v konfiguračním souboru, anon_other_write_enable
a nastavte jej na YES
pokud je výše uvedené chování naším požadovaným chováním:
anon_other_write_enable=YES
Ověřená přihlášení
Chcete-li uživatelům místního systému umožnit přístup k ftp serveru pomocí jejich systémového hesla, local_enable
direktiva musí být nastavena na YES
:toto je výchozí nastavení v systému Debian. Direktivu naleznete na řádku 28
démona
konfiguračního souboru:
# Uncomment this to allow local users to log in. local_enable=YES
Ve výchozím nastavení, když se místní uživatel úspěšně autentizuje, bude mít svůj vlastní domovský adresář jako root. Je však možné určit alternativní počáteční bod pomocí local_root
směrnice. Tato direktiva není v konfiguračním souboru přítomna, takže ji musíme přidat, pokud ji chceme použít. Chcete-li nastavit /srv/ftp
adresář jako místní kořen, například bychom napsali:
local_root=/srv/ftp
Místní uživatelé Chroot
Jako bezpečnostní opatření je možné chrootovat každý ověřený uživatel ve svém vlastním domovském adresáři. K provedení tohoto úkolu musíme použít chroot_local_user
směrnice:
chroot_local_user=YES
Když je tato funkce povolena, je možné určit seznam výjimek (seznam uživatelů, kteří by neměli být chrootováni) pomocí následujících direktiv:
chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list
První direktiva je potřebná k aktivaci funkce, druhá k určení umístění souboru obsahujícího seznam výjimek . Pokud soubor ještě neexistuje, musí být vytvořen, jinak se přihlášení nezdaří.
Z bezpečnostních důvodů, když je uživatel chrootován, neměl by mít možnost zapisovat do adresáře nejvyšší úrovně chrootu. Pokud tomu tak je, v nejnovějších verzích vsftpd se uživatel nebude moci přihlásit a server odpoví následující zprávou:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Tento problém lze řešit v zásadě dvěma způsoby. První z nich samozřejmě spočívá v opravě oprávnění , odepření přístupu uživatele pro zápis do adresáře nejvyšší úrovně chrootu a ponechání mu zapisovat pouze do podadresářů.
Druhý způsob, jak problém vyřešit, pokud vás nezajímají možné bezpečnostní důsledky, je obejít toto omezení pomocí následující směrnice:
allow_writeable_chroot=YES
Když už mluvíme o oprávněních, je důležité mít na paměti, že výchozí umask pro místního uživatele je nastaven na 077
. Pokud je toto nastavení považováno za příliš omezující, je možné jej změnit pomocí local_umask
směrnice. Tato směrnice je okomentována na řádku 35
konfiguračního souboru:
# Default umask for local users is 077. You may wish to change this to 022, # if your users expect that (022 is used by most other ftpd's) #local_umask=022
Přihlaste se pomocí virtuálních uživatelů
Jedna příjemná funkce, kterou nabízí vsftpd, je možnost přihlášení pomocí virtuálních uživatelů . Virtuální uživatel je uživatel, který ve skutečnosti neexistuje v systému, ale pouze v kontextu aplikace sftpd. K aktivaci této funkce musíme použít následující direktivu:
guest_enable=YES
Když je funkce aktivní, všechna neanonymní přihlášení (tedy i skuteční/místní uživatelé) jsou mapována na uživatele zadaného pomocí guest_username
direktiva, která je ve výchozím nastavení, jak jsme již viděli, ftp .
Dalším krokem je vytvoření souboru obsahujícího uživatelská jména a hesla virtuálních uživatelů. Pro vygenerování hashovaného hesla můžeme použít openssl
a zadejte následující příkaz:
$ openssl passwd -1 Password: Verifying - Password: $1$pfwh3Jou$DQBiNjw8bBtDqys7ezTpr.
heslo příkaz openssl se používá ke generování hashovaných hesel (md5). Ve výše uvedeném příkladu jsme byli požádáni o zahašování hesla a jeho potvrzení. Nakonec se vygeneruje hashované heslo a zobrazí se na obrazovce.
Uživatelské jméno spolu s heslem je nutné vložit do souboru, řekněme, že je to /etc/virtual_users.pwd
, v následujícím formátu:
username:hashed_password
Za předpokladu, že se náš virtuální uživatel jmenuje „linuxconfig“, bychom napsali:
linuxconfig:$1$pfwh3Jou$DQBiNjw8bBtDqys7ezTpr.
Operace se musí opakovat pro každého virtuálního uživatele, kterého chceme konfigurovat.
Nyní musíme vytvořit pam služba, kterou bude vsftpd používat k ověřování virtuálních uživatelů. Soubor pojmenujeme vsftpd_virtual
a umístěte jej do /etc/pam.d
adresář. Jeho obsah bude následující:
#%PAM-1.0 auth required pam_pwdfile.so pwdfile /etc/vsftpd/virtual_users.pwd account required pam_permit.so
Jak vidíte, v prvním řádku jsme zadali cestu k souboru obsahujícímu uživatelské jméno a hesla virtuálních uživatelů. Vše, co nyní musíme udělat, je instruovat vsftpd, aby používal tuto „službu“ pam. Můžeme to udělat pomocí pam_service_name
směrnice:
pam_service_name=vsftpd_virtual
V tomto okamžiku můžeme uložit konfigurační soubor, restartovat démona a ověřit, že jsme schopni se přihlásit pomocí virtuálního uživatele, kterého jsme právě vytvořili.
Povolení podpory SSL pro šifrování dat
Ve výchozím nastavení je podpora SSL na vsftpd zakázána, takže přenášená data nebudou šifrována. Pro aktivaci podpory SSL musíme použít následující direktivy umístěné na řádcích 149
na 151
konfiguračního souboru:
# This option specifies the location of the RSA certificate to use for SSL # encrypted connections. rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=YES
První direktiva, rsa_cert_file
se používá k označení cesty k certifikátu RSA, který se má použít pro připojení šifrovaná SSL. Druhý, rsa_private_key
, místo toho se používá k určení umístění soukromého klíče RSA. Nakonec ssl_enable
direktiva se používá k povolení použití šifrování SSL.
Příklad používá /etc/ssl/certs/ssl-cert-snakeoil.pem
a /etc/ssl/private/ssl-cert-snakeoil.key
soubory, ale téměř jistě chcete použít vyhrazený.
Určení rozsahu portů pro pasivní režim
Pasivní režim FTP je výchozím nastavením nové instalace vsftpd, ale pokud jej chceme explicitně povolit, můžeme použít následující direktivu:
# Set to NO if you want to disallow the PASV method of obtaining a data connection # (passive mode). Default: YES pasv_enable=YES
Když server pracuje v pasivním režimu , odešle klientovi IP adresu a port, na kterém by měl naslouchat pro připojení. Tyto porty jsou ve výchozím nastavení vybírány náhodně, ale protože na našem serveru musíme používat firewall, musíme vědět, na kterých portech bychom měli provoz povolit. Rozsah portů, které se mají použít, lze určit pomocí pasv_min_port
a pasv_max_port
direktivy, například:
# The minimum port to allocate for PASV style data connections. Can be used to # specify a narrow port range to assist firewalling. pasv_min_port=10090 # The maximum port to allocate for PASV style data connections. Can be used to # specify a narrow port range to assist firewalling. Default: 0 (use any port) pasv_max_port=10100
S následující konfigurací bude server používat řadu portů od 10090
na 10100
.
Nastavení brány firewall
Aby náš server vsftpd správně fungoval, musíme povolit provoz přes potřebné porty, některé musíme nastavit příslušná pravidla pro náš firewall. V tomto tutoriálu budu předpokládat použití ufw správce brány firewall (Uncomplicated Firewall).
První port, přes který chceme povolit provoz, je port 21
, což je standardní port používaný protokolem FTP:
$ sudo ufw allow in 21/tcp
Jako druhou věc musíme povolit příchozí provoz přes zadaný rozsah portů, který jsme nastavili v předchozí části. Pro specifikaci rozsahu portů můžeme spustit:
$ sudo ufw allow in 10090:10100/tcp
Závěry
V tomto článku jsme viděli, jak nainstalovat a nakonfigurovat vsftpd na Debian 10 Buster. Viděli jsme, jak nastavit anonymní použití a použití místních uživatelů a jak můžeme využít výhod virtuálních uživatelů funkce poskytovaná službou. Vzhledem k tomu, že FTP neposkytuje šifrování dat, viděli jsme, jak povolit podporu SSL a nakonec, jak nastavit bránu firewall tak, aby umožňovala příchozí provoz přes potřebné porty. Úplný seznam možných direktiv, které lze použít v konfiguračním souboru vsftpd, naleznete na vsftpd.conf manuálová stránka (VSFTPD.CONF(5)). Chcete vědět, jak programově pracovat s FTP serverem? Podívejte se na náš článek Jak se připojit k FTP serveru pomocí pythonu.