Rozšíření serveru vsftpd o podporu zabezpečené komunikace pomocí SSL/TLS.
3.10.2005 07:00 | Petr | přečteno 8551×
Stejné rozhodnutí, které vedlo Martina Průšu k uvedení druhého povídání o FTP serverech (ohlas čtenářů, kteří využívají spíše server vsftpd než server ProFTPD), vedlo i mě k jeho následnému doplnění. I v tomto případě se budu snažit doplnit informace vedoucí k podpoře zabezpečené komunikace pomocí SSL/TLS.
Jak víme, u serveru ProFTPD je problematika šifrování řešena pomocí kompilace modulu, napsaného třetí stranou. Vsftpd server jde jinou cestou. Jeho podpora ssl/tls je přímo v "jádře". Nicméně i tady je potřeba před kompilací provést patřičné úpravy. Na příslušné stránce projektu si stáhneme balík se zdrojovými soubory, rozbalíme a nahlédneme do souboru README.ssl
.
Jak sami pochopíte velice rychle, v souboru uvedeném výše najdete potřebnou informaci o nastavení parametrů nutných pro aktivaci potřebné podpory. Jde prakticky o zásah do souboru builddefs.h
, kde řádek s direktivou #undef VSF_BUILD_SSL
zaměníme za #define VSF_BUILD_SSL
. To je k úpravám před kompilací vše.
(poznámka – v rootu rozbaleného balíku se zdrojovými kódy naleznete script se jménem vsf_findlibs.sh
, který je použit při překladu pro přilinkování patřičných knihoven. Můžete jej vhodně použít k zjištění, zda máte příslušnou knihovnu "libssl.so
" ve vašem systému přítomnu a tím předejít zbytečnému hledání "proč" toto rozšíření nefunguje.) Je-li vše v pořádku pak stačí jednoduché:
# make
Proběhlo-li vše v pořádku a v rootu zdrojových souborů serveru se nam objeví binárka vsftpd, pak byla kompilace úspěšná.
(poznámka – Ti, kteří se přiklonili k instalaci pomocí některého z balíčkovacích systémů (rpm, apt …), tak i ti co využili možnost kompilace, mohou využít příkazu ldd
, který ukáže, zda byly k příslušné binárce přilinkovány nutné knihovny.) V našem případě by pak měl příkaz a jeho výstup vypadat přibližně takto:
# ldd vsftpd
a jeho výstup:
# … # libssl.so. … => cesta ke knihovně # …
a s ním by měl ukázat i výpis dalšíh, použitých knihoven. OK, je-li vše jak má být, můžeme zadat příkaz:
# make install
a začít s potřebnou konfigurací.
Protože se jedná pouze o doplnění informací, nebudu zde opisovat to co už jiní napsali. Zaměřím se jen na konfiguraci ssl/tls. Doplněním několika direktiv zařídíme přesně to o co nám jde. Takže, první direktivou v souboru vsftpd.conf
by měla být:
ssl_enable=YES
asi je zbytečné psát proč je první a k čemu nám slouží. Druhou direktivou kterou doplníme do našeho konfiguračního souboru bude:
allow_anon_ssl=NO
ani tady není co vysvětlovat. Direktiva zakáže všem anonymním požadavkům o spojení použít zabezpečený kanál. Další velice vhodnou direktivou bude:
force_local_logins_ssl=YES
ta nám zařídí, aby každé non-anonymous spojení (a jeho požadavek o login) byli prováděny přes zabezpečený kanál a direktivou:
force_local_data_ssl=YES/NO
rozhodneme, zda-li přenášená data budou rovněž posílána zabezpečeným kanálem či nikoliv.
Stejně důležitá je pak i direktiva umožňující využít buď šifrování pomocí ssl nebo tls. Zasvěcení do tématu ví, že šifrovat pomocí ssl se dnes nedoporučuje, a proto ačkoliv bez vysvětlení (které se hodí spíše do tématu ssl vs. tls) doporučím toto složení direktiv:
ssl_sslv2=NO ssl_sslvš=NO ssl_tlsv1=YES
Poslední direktivu, kterou doplníme do konfiguračního souboru bude cesta k souboru s certifikátem. Využít můžeme opět varianty rsa nebo dsa. Pro každou z nich použijeme tuto direktivu:
dsa_cert_file=cesta k souboru s certifikátem rsa_cert_file=cesta k souboru s certifikátem
Tím jsme využili hlavních možností konfigurace ssl/tls. Nyní stačí pustit server a pomocí klienta umožňujícího šifrované spojení, konfiguraci otestovat.
(poznámka – samozřejmě před spuštěním serveru je ještě potřeba patřičný certifikát vygenerovat.) Certifikát vygenerujeme příkazem:
# openssl x509 -in /Cesta k .../certs/vsftpd.pem -noout -text
V prvním povídání o zabezpečeném FTP jsem neuvedl jednoho klienta, který rovněž využívá možnosti šifrovaného spojení. Jde o klienta gftp. Ukážeme si stručně jak klienta nastavit a otestovat spojení.
Prvním krokem ke správnému spojení je zrušení verifikace certifikátu (Verify SSL Peer viz obrázek č.1). Pokud tak neučiníte, gftp klient zjistí, že certifikát je typu "self-signed" a spojení se serverem se neuskuteční (viz obrázek č.2). Rovněž se vám nepovede se na server připojit, v případě, že mate direktivu force_local_data_ssl
nastavenu na YES
(viz obrázek č.3). Po odstranění zmíněných překážek by jste měli být schopni připojit se k serveru (viz obrázek č.4). A nakonec ještě ukázka z vsftpd.log
souboru o úspěšném spojení (viz obrázek č.5).
(poznámka – Určitě si někteří všimli, že se připojuji pod uživatelem root
. To není popírání veškerých bezpečnostních pravidel, roota jsem použil pouze pro tento testovací příklad. Netřeba tuto věc komenovat, velmi dobře si uvědomuji, že v reálném světě bych s tímto neobstál ani vteřinu.)
Vsftpd je dle mnohých rychlejší a bezpečnější než ostatní servery (ProFTPD či WuFTPD). Toto rozhodnutí nechám stejně jako Martin na každém z vás. Každému sedne něco jiného a každý se setká s jinými zkušenostmi. Nicméně, jakékoliv zkušenosti s nasazením zabezpečených ftp kanálů do praxe napište, stejně jako v případě chyb, které se při použití objeví. Nejsem vševědoucí, ale pokud budu moci jakkoli pomoci, pokusím se.