1. SFTP i protokół transferu plików SSH
Protokół transferu plików SSH, powszechnie znany jako SFTP, służy do przesyłania i zarządzania plikami między klientem a serwerem przez SSH. Jego nazwa często powoduje nieporozumienia. Pomimo zawarcia w niej liter FTP, SFTP nie jest bezpieczną wersją klasycznego Protokołu Transferu Plików. Jest odrębnym protokołem używanym w ramach połączenia Secure Shell (SSH), z własnymi komunikatami żądań i odpowiedzi.
Klasyczny FTP przesyła dane uwierzytelniające i zawartość plików jako czysty tekst, jeśli nie dodano osobnej warstwy ochrony, oraz korzysta z oddzielnych połączeń sterującego i danych. W typowych wdrożeniach SFTP działa w ramach jednego połączenia SSH. Stos SSH ustanawia szyfrowanie i ochronę integralności, natomiast uwierzytelnianie użytkownika SSH weryfikuje użytkownika dla tego połączenia. SFTP udostępnia także operacje systemu plików, takie jak listowanie, zmiana nazw i uprawnień, dlatego nadaje się do interaktywnego oraz automatycznego zarządzania plikami.
Alternatywny bezpieczny protokół, , jest bezpośrednim rozszerzeniem oryginalnego FTP. SFTP jest odrębnym protokołem transferu plików używanym jako podsystem SSH w ramach połączenia SSH-2. Dotychczasowe specyfikacje SFTP publikowano jako dokumenty Internet-Draft IETF. Są one wygasłe i nie mają statusu RFC ani Internet Standard. Implementacje mogą dodatkowo obsługiwać rozszerzenia producenta. Protokoły transportu i połączenia SSH opisują standardy SSH. Wybór zależy od obsługi po stronie serwera i klienta oraz od polityki bezpieczeństwa środowiska.
2. SFTP przez Secure Shell
SFTP korzysta z mechanizmów bezpieczeństwa połączenia SSH. Secure Shell to kryptograficzny protokół sieciowy przeznaczony do obsługi usług w niezabezpieczonej sieci. Po negocjacji i poprawnej weryfikacji zapewnia poufność, uwierzytelnianie użytkownika i hosta oraz ochronę integralności ruchu SFTP:
- Poufność i szyfrowanie
Po uzgodnieniu algorytmów SSH szyfruje ruch między klientem a serwerem. Chroni to dane logowania, zawartość plików i polecenia przed odczytem przez biernego obserwatora. Do masowego transferu danych używa silnych algorytmów , takich jak AES.
- Uwierzytelnianie
SSH uwierzytelnia serwer za pomocą klucza hosta, a użytkownika za pomocą metody zaakceptowanej przez serwer. Weryfikacja klucza hosta chroni przed atakiem man-in-the-middle tylko wtedy, gdy oczekiwany klucz lub odcisk palca zostanie sprawdzony, zamiast bezwarunkowo zaakceptowany. Uwierzytelnianie użytkownika może korzystać z hasła albo, w wielu wdrożeniach bezpieczniej, z .
- Integralność
Transport SSH sprawdza integralność przesyłanych danych i wykrywa ich modyfikację w trakcie transmisji. Zależnie od uzgodnionego szyfru każdy pakiet jest chroniony za pomocą albo trybu szyfrowania uwierzytelnionego, który łączy poufność z integralnością.
SFTP działa jako podsystem w ramach ustanowionego połączenia SSH. Po utworzeniu kanału SSH i uwierzytelnieniu użytkownika protokół SFTP jest uruchamiany w tym kanale. Polecenia i dane SFTP stają się ładunkiem przenoszonym przez SSH, dlatego ich poufność i integralność zależą od uzgodnionej ochrony SSH oraz poprawnej weryfikacji klucza hosta.
3. Architektura SFTP: Jedno Połączenie SSH
Typowe wdrożenie SFTP wykorzystuje jedno połączenie SSH dla całej sesji zarządzania plikami, podczas gdy FTP i FTPS rozdzielają połączenia sterujące i danych.
Jeden Port, Jedno Połączenie
W takim wdrożeniu początkowe połączenie, uwierzytelnianie, polecenia, odpowiedzi i transfery danych korzystają z jednego połączenia TCP. SSH używa domyślnie portu 22, lecz administrator może skonfigurować inny port.
Ta architektura jednoportowa zapewnia kilka kluczowych korzyści:
- Przyjazność dla zapór sieciowych: Zapora może zezwolić na SFTP przez dopuszczenie skonfigurowanego portu SSH, zwykle portu 22. FTP i FTPS wymagają portu sterującego (21) oraz połączeń danych, w tym zakresu portów w trybie pasywnym, co zwiększa złożoność reguł i może powiększać odsłoniętą powierzchnię.
- Zmniejszony narzut: Ustanawianie połączeń TCP wymaga czasu i zasobów. Trwałe połączenie eliminuje wielokrotne otwieranie i zamykanie połączeń danych dla każdego transferu, co może poprawić wydajność przy wielu małych plikach. Rzeczywista przepustowość zależy także od opóźnienia, rozmiaru okna i implementacji.
- Protokół oparty na pakietach: SFTP jest protokołem pakietowym, lecz FTP używa tekstowych poleceń. Polecenia i dane SFTP są wysyłane w pakietach o formacie binarnym, z określonymi długościami i polami. Żądania można przesyłać potokowo, więc wiele z nich może oczekiwać na odpowiedź, zależnie od limitów klienta i serwera.
Klienci i Serwery SFTP
Serwery OpenSSH często udostępniają podsystem SFTP, jeśli został zainstalowany i włączony. OpenSSH jest dostępny w wielu instalacjach Linux, macOS i aktualnego Windows, lecz dostępność nadal zależy od oprogramowania serwera i jego konfiguracji. Popularne aplikacje klienckie SFTP, takie jak FileZilla, WinSCP czy Cyberduck, zapewniają graficzne interfejsy do interakcji z serwerami SFTP.
4. Kluczowe Możliwości SFTP
SFTP zapewnia zestaw operacji zarządzania plikami, przydatnych w zdalnej administracji i automatycznych zadaniach transferu.
- Transfery Plików: Główna funkcja, umożliwiająca bezpieczne wysyłanie i pobieranie plików.
- Listowanie Katalogów: Wyświetlanie zawartości zdalnych katalogów.
- Zarządzanie Katalogami: Tworzenie ('mkdir'), usuwanie ('rmdir') i nawigowanie ('cd') po zdalnych katalogach.
- Usuwanie Plików: Usuwanie zdalnych plików ('rm').
- Zmiana Nazw: Zmiana nazw plików i katalogów na serwerze.
- Modyfikacja Uprawnień i Atrybutów: Zmiana uprawnień do plików (np. za pomocą 'chmod') i modyfikowanie znaczników czasu.
- Wznawianie Transferów: Protokół natywnie wspiera wznawianie przerwanych transferów plików od miejsca awarii.
- Dowiązania Symboliczne: Tworzenie i odczytywanie dowiązań symbolicznych w zdalnym systemie plików.
5. Proces Uwierzytelniania w SFTP
Uwierzytelnianie w SFTP obsługuje protokół SSH. Stosowane są dwie typowe metody:
Uwierzytelnianie Hasłem
Jest to najprostsza metoda. Użytkownik podaje nazwę użytkownika i hasło, które klient SFTP wysyła w ramach wymiany uwierzytelniającej SSH. Po weryfikacji klucza hosta szyfrowanie chroni hasło przed biernym podsłuchem sieciowym, w przeciwieństwie do standardowego FTP. Serwer sprawdza dane względem konta i własnej polityki uwierzytelniania. Logowanie hasłem pozostaje podatne na zgadywanie, dlatego wymaga limitów prób i silnych haseł.
Uwierzytelnianie Kluczem Publicznym
Ta metoda nie przesyła hasła przez sieć. Opiera się na parze kluczy kryptograficznych i podpisie związanym z sesją SSH:
- Generowanie Kluczy: Użytkownik najpierw generuje parę kluczy na swojej lokalnej maszynie. Składa się ona z klucza prywatnego, chronionego przed dostępem osób nieuprawnionych, oraz odpowiadającego mu klucza publicznego, który można umieścić na serwerze.
- Instalacja Klucza Publicznego:Użytkownik kopiuje swój klucz publiczny i umieszcza go w określonym pliku (zazwyczaj '~/.ssh/authorized_keys') na serwerze, w swoim koncie użytkownika. Klucz publiczny jest przeznaczony do udostępniania.
- Żądanie uwierzytelnienia:Gdy klient się łączy, informuje serwer, że chce użyć klucza publicznego. Serwer sprawdza, czy odpowiadający klucz jest dozwolony w pliku 'authorized_keys', i akceptuje najpierw żądanie testowe, a następnie żądanie uwierzytelnienia z podpisem.
- Podpis klienta: Oprogramowanie klienta używa klucza prywatnego użytkownika, który nigdy nie opuszcza maszyny klienta, aby podpisać dane uwierzytelnienia związane z sesją, po czym wysyła podpis na serwer.
- Weryfikacja: Serwer używa klucza publicznego, który już posiada, do weryfikacji podpisu. Ponieważ tylko odpowiadający klucz prywatny mógł stworzyć ważny podpis dla tego klucza publicznego, serwer może potwierdzić tożsamość klienta, nigdy nie widząc hasła.
Uwierzytelnianie kluczem publicznym jest częste przy zautomatyzowanych transferach plików między serwerami. Eliminuje zgadywanie hasła dla tego konta, lecz klucz prywatny nadal wymaga kontroli dostępu, ochrony hasłem, gdy jest to właściwe, oraz procedury unieważniania.
6. Porównanie: SFTP vs. FTPS vs. SCP
| Cecha | SFTP (SSH File Transfer Protocol) | FTPS (FTP przez SSL/TLS) | SCP (Secure Copy Protocol) |
|---|---|---|---|
| Protokół Bazowy | SSH | FTP z warstwą SSL/TLS | SSH |
| Liczba Połączeń | Jedno (domyślny port SSH 22) | Dwa (Sterujące i Danych) | Jedno (domyślny port SSH 22) |
| Przyjazność dla Zapór? | Tak, gdy dozwolony jest jeden port SSH. | Bardziej złożone, ponieważ trzeba dopuścić także porty danych. | Tak, gdy dozwolony jest jeden port SSH. |
| Zarządzanie Plikami | Bogate (listowanie, usuwanie, zmiana nazwy, etc.) | Bogate (dziedziczy z FTP) | Podstawowe (tylko transfer plików) |
| Wznawianie Transferów? | Tak, natywnie wspierane. | Obsługiwane przez FTP REST oraz klienta i serwer. | Nie należy do klasycznego modelu kopiowania. |
| Główny Przypadek Użycia | Interaktywne i zautomatyzowane bezpieczne zarządzanie plikami. | Zabezpieczanie starszych środowisk FTP. | Prosty, skryptowy, nieinteraktywny bezpieczny transfer plików. |