Blog 24/7

SFTP

TAB. 1Hasłobez tłumaczenia
Po angielskuSFTP
Którą formą pisaćbez tłumaczenia Skrót, nazwa własna albo nazwa standardu — nie tłumaczymy w ogóle.
Inne formyszyfrowany transfer plików · bezpieczny transfer plików przez SSH
KategoriaStrony WWW, WordPress i hosting

SFTP (SSH File Transfer Protocol) to protokół przesyłania plików działający wewnątrz połączenia SSH. Specyfikacja IETF opisuje go jako standardowy protokół przesyłania plików dla protokołu SSH2, uruchamiany jako podsystem o nazwie sftp [1]. Protokół zakłada, że działa w bezpiecznym kanale, a serwer uwierzytelnił już użytkownika [1]. Dzięki temu login, hasło i zawartość plików są szyfrowane, czego nie zapewnia klasyczny FTP.

Jak działa

SFTP nie jest odrębną usługą sieciową, tylko częścią SSH. Klient najpierw zestawia połączenie SSH, domyślnie na porcie 22 zarejestrowanym w IANA [2], uwierzytelnia się hasłem albo kluczem, a potem prosi serwer o uruchomienie podsystemu sftp [1]. Wszystkie polecenia, takie jak listowanie katalogu, odczyt, zapis czy zmiana nazwy pliku, płyną potem przez ten sam zaszyfrowany kanał. Wersja protokołu opisana w szkicu IETF z października 2001 roku ma numer 3 [1].

Przebieg sesji pokazuje schemat poniżej.

RYS. 1Sesja SFTP

Po stronie serwera OpenSSH podsystem obsługuje program sftp-server albo wbudowany wariant internal-sftp [6]. Domyślnie żaden podsystem nie jest skonfigurowany, więc administrator musi go włączyć dyrektywą Subsystem [6].

Subsystem sftp internal-sftp

SFTP a inne sposoby przesyłania plików

Nazwy są podobne, ale protokoły różne. Klasyczny FTP według RFC 2577 wysyła hasło tekstem jawnym w poleceniu PASS, a wszystkie dane i informacje sterujące, łącznie z hasłami, przechodzą przez sieć bez szyfrowania [3].

ProtokółSzyfrowanieHasło w sieci
FTPbrak [3]tekstem jawnym [3]
SFTPkanał SSH [1]zaszyfrowane [4]
FTPSTLS [7]zaszyfrowane

FTPS to jeszcze inny wariant: klasyczny FTP zabezpieczony protokołem TLS według RFC 4217 z października 2005 roku [7]. Nie ma związku z SSH i korzysta z innych portów oraz certyfikatów serwera, więc „bezpieczny FTP” w ofercie hostingu warto sprawdzić, zanim skonfiguruje się klienta.

W WordPressie

Podręcznik utwardzania WordPressa zaleca łączenie się z serwerem przez SFTP, jeśli hosting to umożliwia; szyfrowane są wtedy hasło i inne dane przesyłane między komputerem a witryną [4]. Dotyczy to wgrywania motywów, ręcznej edycji plików i przywracania kopii.

WordPress sam też korzysta z przesyłania plików, gdy nie może zapisywać bezpośrednio na dysku. Stała FS_METHOD w pliku wp-config.php wybiera metodę: direct, ssh2, ftpext albo ftpsockets [5]. Metoda ssh2 używa rozszerzenia SSH dla PHP, a ftpext i ftpsockets klasycznego FTP [5]. Dane dostępowe można podać w stałych FTP_USER, FTP_PASS, FTP_PUBKEY i FTP_PRIKEY [5]; wtedy plik konfiguracyjny zawiera kolejny sekret, co wzmacnia potrzebę utwardzania pliku wp-config.php (wp-config hardening).

Na hostingu współdzielonym konto SFTP ma zwykle dostęp do wszystkich plików strony, w tym do konfiguracji z hasłem do bazy. Przejęte dane uwierzytelniające SFTP dają więc atakującemu to samo, co pełny dostęp do serwera plików: możliwość wgrania webshell albo tylnej furtki (backdoor) z pominięciem panelu WordPressa.

Zagrożenia i skutki

SFTP chroni transmisję, ale nie konto. Główne ryzyka to:

  • Odgadnięte hasło. Serwer OpenSSH domyślnie dopuszcza logowanie hasłem [6], więc otwarty port 22 jest celem ataków siłowych (brute force). Automatyczną blokadę adresów po nieudanych próbach zapewnia na przykład fail2ban.
  • Wyciek danych dostępowych z komputera, na którym zapisano je w kliencie SFTP.
  • Zbyt szerokie uprawnienia. Konto, które widzi cały serwer, zamienia jedną kradzież hasła w przejęcie wszystkich stron na koncie.
  • Brak weryfikacji klucza hosta. RFC 4253 dopuszcza przyjęcie klucza serwera bez sprawdzenia, ale zaznacza, że protokół staje się wtedy niebezpieczny wobec aktywnych ataków [2], czyli ataku man-in-the-middle (MITM). Komunikat klienta o zmianie klucza hosta należy więc wyjaśnić, zanim połączenie zostanie zaakceptowane.

Historia

FTP powstał długo przed powszechnym szyfrowaniem w sieci. Już RFC 2577 z maja 1999 roku, poświęcony bezpieczeństwu FTP, wskazywał, że standardowy FTP przesyła hasła tekstem jawnym [3]. Odpowiedzią były dwa kierunki. Pierwszy to FTPS, opisany w RFC 4217 z października 2005 roku, który dodaje do FTP protokół TLS [7]. Drugi to przesyłanie plików wewnątrz SSH.

Szkic SSH File Transfer Protocol w wersji 3 pochodzi z października 2001 roku [1]. Przewidywał on działanie na dowolnym niezawodnym strumieniu danych, ale jako podstawowe zastosowanie wskazywał pracę w roli podsystemu protokołu połączeń SSH [1]. Architekturę transportu SSH opisuje RFC 4253 ze stycznia 2006 roku [2]. Podręcznik WordPressa zaleca SFTP wprost, jeśli dostawca hostingu go udostępnia [4].

Dobre praktyki

Klucze zamiast haseł. Logowanie kluczem SSH eliminuje odgadywanie hasła; po jego wdrożeniu logowanie hasłem można wyłączyć w sshd_config [6].

Zamknięcie w katalogu. Sekurak zwraca uwagę, że użytkowników z dostępem SFTP można ograniczyć do katalogu domowego i odebrać im możliwość uruchamiania innych poleceń, konfigurując środowisko chroot [8]. W OpenSSH służy do tego ChrootDirectory; wszystkie składniki ścieżki muszą należeć do roota i nie mogą być zapisywalne dla grupy ani innych [6]. Wariant internal-sftp nie potrzebuje w takim katalogu żadnych plików pomocniczych [6].

Match User wdrozenie
    ChrootDirectory /srv/sftp/example.com
    ForceCommand internal-sftp

Właściciel plików ustawiony przez SFTP ma znaczenie dla WordPressa. Podręcznik utwardzania zaleca, aby katalog główny, wp-admin, wp-includes i katalog wtyczek były zapisywalne tylko przez konto użytkownika, a wp-content także przez serwer WWW [4]. Pliki wgrane przez konto SFTP należą do tego konta, więc serwer WWW, a razem z nim ewentualny złośliwy skrypt, nie może ich nadpisać.

Całość realizuje zasada najmniejszych uprawnień: osobne konto dla każdej osoby i każdej strony, z dostępem tylko do potrzebnych katalogów i z uprawnieniami plików ustawionymi tak, by serwer WWW nie mógł nadpisywać kodu.

TAB. 2

Przypisy

8
  1. [1] SSH File Transfer Protocol (draft-ietf-secsh-filexfer-02) · IETF
  2. [2] RFC 4253: The Secure Shell (SSH) Transport Layer Protocol · IETF
  3. [3] RFC 2577: FTP Security Considerations · IETF
  4. [4] Hardening WordPress — Advanced Administration Handbook · WordPress.org
  5. [5] Editing wp-config.php — Advanced Administration Handbook · WordPress.org
  6. [6] sshd_config(5) · OpenBSD / OpenSSH
  7. [7] RFC 4217: Securing FTP with TLS · IETF
  8. [8] Kilka pomysłów na bezpieczny serwer linuksowy · Sekurak
TAB. 3

Hasła w tym artykule

12
TAB. 4

Linkują tutaj

24

Wszystkie kategorie → · Hasło w słowniku →

Blog 24/7
05.11CISA i FBI wzywają do zabezpieczenia sterowników chłodzenia po atakach w Europietherecord.media05.11Midnight Blizzard atakowała iPhone'y i Androidy przez zainfekowane strony w Europie i USAsecurityweek.com05.11APT29 kradła dane z iPhone'ów i Androidów przez przejęte i podrobione stronytherecord.media05.11Grupa APT29 przejęła skrypt Plerdy i atakowała niezałatane iPhone'y i Androidythehackernews.com05.11Microsoft wykrył 7,3 mld wiadomości phishingowych w III kwartale 2026microsoft.com05.11DigiCert ujawnia wyciek danych klientów i skanów dokumentów tożsamościbleepingcomputer.com05.11CWPdoor podmienia serwer cwpsrv w Control Web Panel i otwiera tylne wejście do Linuksableepingcomputer.com05.11Brytyjskie NCSC ostrzega, że narzędzia AI zwiększyły liczbę wykrywanych luk zero-daythehackernews.com05.11Skaner RootEvidence sprawdza starą lukę w Cisco IOS i dodaje nagłówki Opt-Outisc.sans.edu05.11Włamanie do portalu grantowego Norad, zagrożone dane 20 614 użytkownikówhelpnetsecurity.com