Protokół FTP umożliwia przesyłanie plików pomiędzy komputerem pełniącym rolę serwera, a komputerem klienckim.
Połączenie za pomocą protokołu FTP może działać w dwóch trybach:
- aktywnym,
- pasywnym.
W trybie aktywnym FTP używa portu 21 dla poleceń i portu 20 do przesyłu danych. W trybie pasywnym FTP wykorzystuje port 21 dla poleceń oraz port o numerze powyżej 1024 do transmisji danych. W sieciach chronionych zaporą sieciową (ang. firewall) komunikacja z serwerami FTP wymaga zwolnienia odpowiednich portów na zaporze sieciowej lub routerze.
Serwer FTP może pozwalać na dostęp do zasobów bez podawania hasła uwierzytelniającego (dostęp anonimowy), lub poprzez podanie loginu i hasła uwierzytelniającego.
Dla systemu Linux dostępnych jest wiele wersji oprogramowania pełniącego rolę serwera FTP. Jednym z nich jest ProFTPD. Zaletą ProFTPD jest jego prosta konfiguracja. Standardowo wspiera szyfrowanie połączeń z wykorzystaniem SSL/TLS.
Instalację serwera ProFTPD wykonuje się poprzez wydanie polecenia:
apt-get install proftpd-basic
W trakcie instalacji musimy wybrać sposób racy naszego serwera. Mamy do dyspozycji pracę w trybie standalone lub jako usługę uruchamianą przez inetd.
Nasz przykładowy serwer FTP będzie pracował w trybie standalone. Po instalacji serwera FTP należy wykonać jego konfigurację. Pliki konfiguracyjne ProFTPD znajdują się w katalogu:
/etc/proftpd/
Dobrym zwyczajem jest umieszczanie własnej konfiguracji serwera w katalogu
/etc/proftpd/conf.d/
ułatwi to zarządzanie naszym serwerem w przyszłości. Aktualizacja serwera FTP może spowodować nadpisanie plików konfiguracyjnych w katalogu głównym, natomiast pliki z katalogu conf.d pozostaną niezmienione. Należy sprawdzić, czy nasze pliki zostaną dołączone do podstawowej konfiguracji serwera. W pliku /etc/proftpd/proftpd.conf powinien się znajdować wpis jak na rysunku poniżej. Jeżeli taki wpis nie występuje należy go dodać i zapisać zmiany w pliku konfiguracyjnym.
W tym momencie możemy przejść do konfiguracji naszego serwera FTP. Przechodzimy do katalogu /etc/proftpd/conf.d/ i wydajemy polecenie:
nano custom.conf
w pliku wpisujemy podstawową konfigurację przedstawioną poniżej:
Jak widać w konfiguracji wyłączyliśmy dostęp do shella (użytkownik FTP nie musi mieć dostępu do powłoki), IPv6 zostało wyłączone, główny katalog serwera FTP został ustawiony na katalog domowy użytkownika ftpuser, a logowanie do FTP ograniczono do użytkowników znajdujących się w grupie ftpuser. Po zapisaniu konfiguracji wykonujemy restart usługi ProFTPD za pomocą polecenia:
/etc/init.d/proftpd restart
lub
service proftpd restart
W tym momencie mamy już działający serwer FTP, chociaż nie utworzyliśmy jeszcze użytkownika, który może mieć dostęp do zasobów.
Uwaga: Podczas restartu może pojawić się informacja dotycząca problemów z modułem mod_tls_memcache. Możemy zignorować ostrzeżenie, lub wyłączyć moduł w pliku konfiguracyjnym serwera:
Jak widać na rysunku powyżej w pliku /etc/proftpd/modules.conf znajduje się wpis:
LoadModules mod_tls_memcache.c
Jeżeli dodamy komentarz przed powyższym wpisem, to ostrzeżenie nie będzie się pojawiało.
Ostatnim niezbędnym elementem jest utworzenie konta użytkownika ftp. Nasz użytkownik nie będzie miał dostępu do shella, a jego katalog domowy umieścimy w /home :
adduser ftpuser --shell /bin/false --home /home/public
Dodając użytkownika ftpuser tworzymy jednocześnie grupę o tej samej nazwie. Od tej pory możemy zalogować się na serwerze FTP z wykorzystaniem loginu i hasła podanego podczas tworzenia użytkownika ftpuser. Sprawdźmy działanie serwera ProFTPD z pozycji naszego Debiana. W tym celu uruchamiamy z konsoli polecenie:
ftp 127.0.0.1
System powinien poprosić o login i hasło, a po prawidłowej autoryzacji mamy dostęp do zasobów serwera FTP. Na rysunku poniżej pokazano sposób logowania do serwera FTP.
Jak widać użytkownik ftpuser został poprawnie zweryfikowany i ma dostęp do serwera FTP. Sprawdzimy, czy inni użytkownicy systemu mają również dostęp do serwera FTP. W moim testowym systemie jest konto wojtek. Poniżej pokazano wynik próby logowania się użytkownika wojtek do serwera FTP.
Jak widać system zwrócił błąd 530 – Login incorrect. Jeżeli chcemy, żeby nasi użytkownicy mieli dostęp do zasobów FTP musimy dodać ich do grupy ftpuser. Wykonujemy to poleceniem:
usermod -G ftpuser -a wojtek
Po wykonaniu powyższego polecenia użytkownik wojtek będzie miał dostęp do zasobów FTP. Należy pamiętać o fladze -a, bez niej nie dodamy grupy ftpuser do grup użytkownika, ale zamienimy listę grup użytkownika na tą jedną podaną (ftpuser).
Jak widać, po dodaniu użytkownika wojtek do grupy ftpuser można zalogować się do zasobów FTP.
Kolejnym elementem będzie skonfigurowanie dostępu dla użytkowników nieposiadających konta na naszym serwerze. Dostęp anonimowy umożliwi pobieranie udostępnionych plików, nie będzie natomiast możliwości przesyłania własnych plików na serwer. Konfigurację dostępu anonimowego zapiszemy w pliku /etc/proftpd/conf.d/anonim.conf. W tym celu uruchomimy edytor Nano:
nano /etc/proftpd/conf.d/anonim.conf
W pliku umieścimy konfigurację pokazaną na rysunku poniżej:
Jak widać sekcja dostępu anonimowego zawiera informację o użytkowniku, którego nazwa została określona jako ftp. Alias dla użytkownika anonimowego ustalono na anonymous, czyli dostęp anonimowy będzie możliwy z wykorzystaniem nazwy użytkownika (loginu) ftp lub anonymous. Dla użytkowników anonimowych przewidziano maksymalnie 5 jednoczesnych połączeń. Dodatkowo został nałożony limit na zapis danych (DenyAll). Po zapisaniu pliku konfguracyjnego wykonujemy restart usługi ProFTPD. Dodajemy w systemie użytkownika ftp należącego do grupy ftpuser:
adduser ftp ftpuser
Od tej pory możliwy jest ograniczony (tylko do odczytu) dostęp anonimowy do zasobów FTP na naszym serwerze. Dysponujemy pełnowartościowym serwerem FTP.
Wadą powyższej konfiguracji jest brak szyfrowanej transmisji (możliwe do podsłuchania loginy i hasła użytkowników). W celu ochrony naszego serwera FTP zastosujemy szyfrowane połączenie z wykorzystaniem SSL/TLS.
Pierwszym elementem jest wygenerowanie samopodpisanego certyfikatu dla serwera. Wykonujemy to poleceniem:
make-ssl-cert generate-default-snakeoil --force-overwrite
Jeżeli powyższe polecenie nie może być wykonane (brak polecenia make-ssl-cert) należy je najpierw zainstalować wydając polecenie:
apt-get install ssl-cert
Po wygenerowaniu certyfikatu powinny zostać utworzone dwa pliki:
/etc/ssl/certs/ssl-cert-snakeoil.pem
/etc/ssl/private/ssl-cert-snakeoil.key
Jeżeli pliki zostały wygenerowane możemy przejść do konfiguracji serwera ProFTPD. W katalogu /etc/proftpd/conf.d tworzymy nowy plik konfiguracyjny:
nano /etc/proftpd/conf.d/tls.conf
W pliku wpisujemy niezbędne informacje dotyczące konfiguracji dostępu poprzez TLS.
W pliku podajemy informację o lokalizacji certyfikatów SSL, lokalizacji pliku .log oraz wersji protokołu TLS. Po zapisaniu pliku konfiguracyjnego wykonujemy restart serwera FTP. Od tej pory serwer FTP umożliwia wykonywanie połączeń z wykorzystaniem szyfrowania SSL/TLS. Test połączenia możemy wykonać z wykorzystaniem klienta FTP obsługującego szyfrowanie np. FileZilla. Poniżej pokazano połączenie klienta do serwera FTP.
Na uwagę zasługują linie statusu, które pokazują, że klient FileZilla połączył się z serwerem FTP z wykorzystaniem TLS.
Zadanie:
Przetestuj działanie serwera FTP wykorzystując różne konta (dostęp anonimowy, ftpuser oraz konto innego użytkownika systemu Linux).