1. Wprowadzenie do transferu plików i FTP
Przenoszenie plików między komputerami wymaga uzgodnionych poleceń i sposobu przesyłania danych. Protokół Transferu Plików (FTP) definiuje taki zestaw reguł, używany między innymi przy publikowaniu stron, udostępnianiu zbiorów danych i pobieraniu oprogramowania.
FTP jest działającym w modelu . Definiuje polecenia USER, PASS, LIST, RETR i STOR, za pomocą których aplikacja kliencka komunikuje się z serwerem, aby uwierzytelniać sesję, wysyłać i odbierać pliki oraz przeglądać katalogi. Pierwsze mechanizmy transferu plików opisano na początku lat 70. XX wieku, przed powstaniem World Wide Web. Projekt FTP rozdziela kanał sterujący i kanały danych.
2. Podstawowa architektura: dwa połączenia
FTP wykorzystuje oddzielne połączenie sterujące i połączenia danych. Kanał sterujący przenosi polecenia oraz odpowiedzi, a kanał danych służy do plików i list katalogów. Sposób zestawienia połączenia danych zależy od wybranego trybu.
Połączenie sterujące
Połączenie sterujące jest pierwszym kanałem sesji FTP i zwykle pozostaje aktywne do jej zakończenia. Może jednak zostać zamknięte po błędzie albo przekroczeniu limitu czasu. Jedna sesja sterująca może koordynować wiele kolejnych transferów danych. Serwer może wysłać powitanie 220, odpowiedź 331 oznacza oczekiwanie na hasło, a 230 pomyślne uwierzytelnienie.
- Cel: Kanał służy do zarządzania sesją. Klient wysyła polecenia, takie jak logowanie, LIST i RETR, a serwer odsyła odpowiedzi, w tym kody informujące o stanie operacji. Odpowiedzi 150 i 226 opisują odpowiednio przygotowanie oraz zakończenie transferu danych, więc kanał sterujący pozostaje potrzebny także podczas przesyłania pliku.
- Numer portu: Serwer zwykle nasłuchuje połączeń sterujących na porcie . Konfiguracja może udostępnić usługę na innym porcie, jeśli klient zna ten parametr.
- Trwałość: Połączenie jest nawiązywane przed logowaniem i zwykle pozostaje otwarte do polecenia QUIT lub innego zakończenia sesji, na przykład przez błąd albo limit czasu.
- Typ danych: Kanał przenosi polecenia tekstowe i odpowiedzi serwera. Zawartość plików jest przesyłana kanałem danych.
Połączenie danych
Połączenie danych jest tymczasowym kanałem ustanawianym do przesyłania zawartości plików i list katalogów. Jego utworzenie jest związane z poleceniami operacji, na przykład LIST, RETR lub STOR, oraz z trybem aktywnym albo pasywnym. Polecenie TYPE może ustalić reprezentację ASCII lub binarną przed transferem.
- Cel: Ten kanał jest używany wyłącznie do przesyłania rzeczywistej zawartości. Może to być plik pobierany z serwera do klienta () lub plik wysyłany z klienta na serwer (). Listy katalogów żądane za pomocą polecenia 'LIST' są również wysyłane przez połączenie danych.
- Numer portu: Numery portów połączenia danych zależą od trybu transferu. W klasycznym trybie aktywnym serwer zwykle używa portu jako portu źródłowego.
- Tymczasowość: Połączenie danych jest tworzone na żądanie dla każdego transferu. W zależności od trybu klient albo serwer otwiera kanał i inicjuje TCP. Po przesłaniu pliku lub listy połączenie jest zamykane, a kolejny transfer wymaga nowego połączenia.
- Typ danych: Połączenie przenosi zawartość plików w uzgodnionym trybie transmisji, na przykład ASCII lub binarnym, oraz listy katalogów. Polecenia i odpowiedzi pozostają na kanale sterującym, który przekazuje kody przygotowania i zakończenia transferu. Przykładowe kody odpowiedzi pomagają klientowi zsynchronizować stan operacji.
Rozdzielenie kanałów oddziela zarządzanie sesją od przesyłania zawartości. Kanał sterujący może przenosić polecenia i odpowiedzi związane z transferem, w tym obsługę przerwania, gdy kanał danych przesyła plik. Połączenie sterujące nie jest więc wyłączane tylko dlatego, że transfer danych został zakończony.
3. Klient i serwer
FTP działa dzięki współpracy aplikacji klienckiej i serwera.
Klient FTP
to aplikacja uruchamiana na lokalnej maszynie użytkownika. Zapewnia interfejs graficzny lub wiersza poleceń do łączenia ze zdalnym serwerem, przeglądania katalogów i inicjowania transferów. Przykłady to FileZilla, WinSCP i CuteFTP. Klient inicjuje połączenie sterujące, wysyła polecenia i wybiera tryb danych. W trybie aktywnym serwer inicjuje drugi kanał.
Serwer FTP (Demon)
, często określany jako demon FTP (FTPd), to program działający na zdalnej maszynie. Nasłuchuje żądań klientów na porcie sterującym, zwykle , oraz zarządza uprawnieniami do plików. Po połączeniu obsługuje uwierzytelnianie, interpretuje polecenia, zarządza systemem plików oraz zestawia i zamyka połączenia danych.
4. Przebieg sesji FTP
Typowa sesja składa się z poleceń klienta i trzycyfrowych kodów odpowiedzi serwera. Odpowiedź powitalna poprzedza logowanie, a odpowiedzi 150 i 226 sygnalizują przebieg transferu. Kolejne kroki pokazują współpracę obu połączeń.
- Połączenie i logowanie: Użytkownik podaje adres serwera (np. 'ftp.przyklad.pl'), nazwę użytkownika i hasło. Klient otwiera połączenie TCP z lokalnego portu do portu serwera, ustanawiając połączenie sterujące. Serwer może najpierw wysłać powitanie 220. Następnie klient wysyła USER i PASS, a odpowiedzi 331 i 230 opisują oczekiwanie na hasło oraz pomyślne logowanie.
- Nawigacja: Po zalogowaniu użytkownik może przeglądać system plików serwera. Klient wysyła polecenie LIST, aby otrzymać listę plików i katalogów. Wynik trafia na połączenie danych, a odpowiedź sterująca opisuje jego status.
- Inicjowanie pobierania:Użytkownik wybiera plik 'raport.pdf'. Klient wysyła przez połączenie sterujące polecenie 'RETR raport.pdf', w którym RETR oznacza pobranie.
- Otwieranie połączenia danych: Tryb transferu określa sposób otwarcia tymczasowego połączenia danych. W trybie aktywnym klient przekazuje adres poleceniem PORT, a serwer łączy się z klientem. W trybie pasywnym klient wysyła PASV i łączy się z portem serwera. Szczegóły opisano w następnej sekcji.
- Transfer danych:Po nawiązaniu połączenia danych serwer wysyła zawartość pliku 'raport.pdf' tym kanałem. Kanał sterujący nadal przenosi odpowiedzi związane z transferem, w tym komunikat o jego rozpoczęciu i zakończeniu.
- Zamykanie połączenia danych: Po zakończeniu transferu połączenie danych jest zamykane, a sterujące pozostaje otwarte na następne polecenie.
- Kończenie sesji: Gdy użytkownik zakończy pracę, klient wysyła przez połączenie sterujące polecenie QUIT. Serwer odsyła potwierdzenie i zamyka sesję.
5. Wybór trybu aktywnego lub pasywnego
Sposób ustanowienia tymczasowego połączenia danych wpływa na łączność przez zapory i urządzenia NAT. FTP definiuje tryb aktywny oraz pasywny. Różnią się one stroną inicjującą połączenie danych.
Aktywny tryb FTP
W trybie aktywnym klient informuje serwer, dokąd ma przesłać dane, a serwer inicjuje połączenie danych.
- Klient łączy się z portu () do portu poleceń serwera .
- Gdy zażądano transferu pliku, klient zaczyna nasłuchiwać na nowym porcie, w przykładzie ().
- Klient wysyła polecenie PORT z adresem i portem przez kanał sterujący. Informuje serwer, gdzie oczekuje połączenia danych, na przykład na porcie . W klasycznym formacie IPv4 adres i port są kodowane jako sześć pól oddzielonych przecinkami.
- Serwer inicjuje połączenie danych do wskazanego portu klienta. W klasycznej konfiguracji używa portu źródłowego . Wartość PORT koduje adres IPv4 i port klienta w sześciu polach, więc urządzenia NAT mogą wymagać specjalnej obsługi.
Możliwe ograniczenia: Komputer klienta może znajdować się za urządzeniem i zaporą. Reguły zapory mogą zablokować połączenie przychodzące od serwera, a prywatny adres z polecenia PORT może być nieosiągalny spoza sieci. Gdy adres klienta jest routowalny, a zapora dopuszcza ruch, aktywny tryb może działać zgodnie z założeniami.
Pasywny tryb FTP (PASV)
Tryb pasywny przenosi inicjowanie połączenia danych na klienta. Może to ułatwić działanie w sieciach, w których klient nie przyjmuje połączeń przychodzących.
- Klient łączy się z portu () do portu poleceń serwera .
- Gdy zażądano transferu pliku, klient wysyła polecenie PASV przez kanał sterujący, prosząc serwer o przygotowanie portu danych.
- Serwer wybiera dostępny port (), zaczyna na nim nasłuchiwać i odsyła adres oraz numer portu w odpowiedzi 227, na przykład '227 Entering Passive Mode (192,168,1,10,192,5)'. Administrator konfiguruje zakres portów pasywnych oraz adres, który serwer przekazuje klientom. Klient nawiązuje połączenie z tym portem.
- Klient inicjuje połączenie danych z własnego portu, w przykładzie (), na adres i port wskazany przez serwer.
Skutek dla filtracji: Klient inicjuje połączenie danych, więc reguły zezwalające na ruch wychodzący mogą ułatwić transfer, a NAT może utworzyć mapowanie dla ruchu powrotnego. Serwer nadal wymaga otwarcia portu oraz skonfigurowanego zakresu portów pasywnych.
6. Bezpieczeństwo i alternatywy
Oryginalna specyfikacja FTP nie zapewnia szyfrowania ani kryptograficznego uwierzytelniania. Nazwa użytkownika i hasło są częścią wymiany poleceń, a zawartość pliku trafia na kanał danych. Połączenie wymaga dodatkowych mechanizmów, jeśli przesyłane dane mają być chronione.
- Transmisja jawnym tekstem: W standardowym FTP nazwa użytkownika, hasło, polecenia i zawartość plików są przesyłane bez szyfrowania. Osoba mogąca obserwować ruch między klientem a serwerem może odczytać te dane i zmodyfikować transfer bez wykrycia przez sam protokół.
- Brak integralności danych: Standardowy FTP nie definiuje mechanizmu kryptograficznej weryfikacji, czy plik zmienił się podczas transferu. Sam protokół nie powiadomi więc klienta ani serwera o takiej modyfikacji. Integralność można sprawdzać dodatkowym mechanizmem kryptograficznym.
Bezpieczne rozwiązania FTP
Do ochrony transferu stosuje się między innymi następujące rozwiązania:
- FTPS (FTP przez SSL/TLS): Jest to FTP rozszerzone o TLS i starszy Secure Sockets Layer (SSL). TLS może chronić połączenie sterujące oraz połączenia danych, w zależności od wynegocjowanej konfiguracji. Walidacja certyfikatu pozwala uwierzytelnić serwer, a szyfrowanie i integralność zależą od poprawnego handshake. FTPS opisuje RFC 4217. Klient i serwer muszą uzgodnić ochronę dla kanału sterującego oraz danych. W przeciwnym razie dane mogą pozostać jawne mimo samego użycia nazwy FTPS. Ochrona kanału sterującego sama nie zabezpiecza niechronionego kanału danych.
- SFTP (SSH File Transfer Protocol): SFTP nie jest odmianą FTP. To odrębny protokół działający w ramach SSH, zwykle przez jedno połączenie SSH i jeden kanał dla komunikatów protokołu. Nie używa poleceń FTP takich jak USER i RETR. Wymiana pakietów i uwierzytelnianie wynikają z protokołu opartego na SSH, poza zestawem poleceń FTP. Zapewnia mechanizmy ochrony dostarczane przez SSH, w tym poufność i integralność, zgodnie z konfiguracją SSH.
FTP pozostaje przykładem protokołu rozdzielającego sterowanie i dane. Przy przesyłaniu informacji wrażliwych należy użyć ochrony kryptograficznej, na przykład TLS lub SSH, oraz odpowiednio skonfigurować klienta i serwer.