Bezpieczny FTP?
Protokół FTP powstał w roku 1971 jako mechanizm umożliwiający wymianę plików. Pierwotnie stosowany był w sieci ARPANET. Ponieważ miały do niej dostęp tylko wybrane jednostki – nikt nie wysilał się nad zabezpieczeniem przekazywanych danych. W chwili obecnej protokoły które przesyłają hasła w postaci jawnej (czyli nie zaszyfrowanej w żaden sposób) są – przynajmniej dla mnie – wyjątkowo mało użyteczne. Niestety, poza FTP nie znalazłem żadnej wystarczająco mało skomplikowanej metody na przesyłanie plików do zdalnych sieci. Jest coś takiego, jak SFTP, ale połączenie go z chrootem nie jest takie zupełnie trywialne(*). Poza tym każdy użytkownik, korzystający z SFTP musi mieć konto systemowe na serwerze, co nie zawsze jest pożądane/wygodne/możliwe.
Szczęśliwie istnieje „bezpieczna” odmiana FTPa: FTPS, która dodaje wsparcie dla TLS/SSL. W dodatku skonfigurowanie czegoś takiego nie jest zbytnio skomplikowane. W najprostszym przypadku (vsftpd działający na CentOSie) wystarczy wygenerować certyfikat typu self-signed:
[kbechler@flame ~]$ openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem
Generating a 2048 bit RSA private key
.................................................................................................+++
....................................+++
unable to write 'random state'
writing new private key to 'vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [PL]:
Locality Name (eg, city) []:
Organization Name (eg, company) []:
Organizational Unit Name (eg, section) []:
Given name []:
Surname []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:
[kbechler@flame ~]$ sudo mv ./vsftpd.pem /etc/vsftpd
Dopisać poniższe trzy linijki do pliku konfiguracyjnego serwera (/etc/vsftpd/vsftpd.conf):
ssl_enable=YES
rsa_cert_file=/etc/vsftpd/vsftpd.pem
force_local_data_ssl=NO
i zrestartować usługę:
[kbechler@flame ~]$ sudo /etc/init.d/vsftpd restart
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
Potrzebujemy jeszcze klienta, który wspiera FTPS. Na szczęście ładnie poproszony Total Commander coś takiego potrafi :-)
Niestety, taka konfiguracja nieco nas ogranicza. Serwer vsftpd nie pozwala na logowanie użytkowników bez użycia SSLa, co powoduje, że nie da się do naszego serwera podłączyć używając np. klienta FTP wbudowanego w Windows. Można to zmienić dodając parametr „force_local_logins_ssl=NO” do konfiguracji serwera, ale… ponieważ ludzie są z natury leniwi, to nie będzie im się chciało niczego zmieniać w i dalszym ciągu będą korzystać z połączenia nieszyfrowanego… niestety, na ten problem lekarstwa nie znam :-(
(*) Od wersji 4.8 (ChangeLog) istnieje w OpenSSH parametr ChrootDirectory, który w prosty sposób coś takiego umożliwia.
Comment from kmiotek
Time 27 lutego 2013 at 23:22
WinSCP wyręczył programistów z Redmond :-) w kwestii szyfrowanego połączenia FTP