File Transfer Protocol

FTP () je v informatice standardní komunikační protokol pro přenos souborů mezi počítači pomocí počítačové sítě, je to stavový protokol. Soubory mohou být stahovány ze serveru na počítač uživatele (download) nebo nahrávány z počítače uživatele na server (upload), pokud daný uživatel má pro nahrávání souborů dostatečná přístupová práva (která jsou zpravidla omezena jen na určitý adresář/adresáře). Protokol FTP je postaven na architektuře klient–server a využívá oddělená řídicí a datová spojení mezi klientem a serverem. Uživatelé se mohou autentizovat, obvykle ve formě uživatelského jména a hesla, ale mohou se připojit i anonymně, pokud je server nakonfigurován tak, aby to umožňoval (což se dříve hodně využívalo pro stahování souborů z tzv. anonymních FTP serverů). 

FTP protokol (jako všechny protokoly vzniklé v 70. letech 20. století) však veškerá data, tedy i uživatelské jméno a heslo, přenáší v nezašifrované podobě, což v současnosti představuje významné bezpečnostní riziko. Proto byl a je postupně stále více nahrazován šifrovanými způsoby přenosu, jako je protokol SSH (který v sobě mimo jiné zahrnuje SFTP, příp. SCP; ev. lze FTP skrze SSH tunelovat). Pokud uživatel používá webový prohlížeč, počátkem roku 2023 cca 82 procent (a tento podíl stále vzrůstá) WWW serverů místo nešifrovaného HTTP protokolu používá jeho šifrovanou verzi (HTTPS, tedy HTTP over TLS). 

První klientské aplikace FTP byly programy pro příkazový řádek vyvinuté ještě před tím, než operační systémy měly grafické uživatelské rozhraní, a dodnes se dodávají s většinou operačních systémů. Od té doby bylo vyvinuto mnoho specializovaných FTP klientů (používajících jak textové, tak grafické uživatelské rozhraní), FTP bylo rovněž začleněno do mnoha dalších aplikací, jako jsou např. editory HTML nebo správci souborů (např. Total Commander).

Po vzniku služby WWW a jejím následném masovém rozšíření mezi běžné uživatele klient FTP býval běžně integrován také do webových prohlížečů, kde pro FTP servery se používalo URL schéma „ftp://“, (místo „http://“, resp. „https://“ pro HTML stránky), např. na adrese ftp://ftp.hp.com bylo možno stahovat ovladače tiskáren této firmy. V průběhu roku 2021 ale dva významní vývojáři webových prohlížečů tuto možnost odstranili. Poprvé byla podpora protokolu FTP označena jako zastaralá (depreciated) a vypnuta v prohlížeči Google Chrome verze 88 v lednu 2021, v dubnu 2021 následoval Firefox verze 88.0 (stále ještě ale bylo možné nastavit ve skryté konfiguraci). V červenci 2021 Firefox verze 90 programový kód pro FTP zcela odstranil, a v říjnu 2021 ho následoval Google, který FTP zcela odstranil v prohlížeči Google Chrome verze 95.

Historie 
Původní specifikace pro File Transfer Protocol byla sepsána Abhayem Bhushanem a publikována jako RFC 114 dne 16. dubna 1971. Na počátku 70. let byla sada protokolů TCP/IP teprve ve vývoji, proto FTP v původní verzi využíval jeho předchůdce NCP. Tato specifikace byla nahrazena novou, již využívající TCP/IP v RFC 765, (červen 1980) a RFC 959. Pozdější RFC doplňují a mění některé důležité části specifikace. FTP protokol je ve srovnání s jinými protokoly ze 70. let i z pozdější doby neobvyklý tím, že používá dva porty (port 21 pro řízení komunikace a port 20 pro vlastní datové přenosy). To mimo jiné přinášelo značné problémy v případě firewallů. Proto RFC 1579 (únor 1994) umožňuje tzv. pasivní režim, který používá pouze jeden port. RFC 2228 (červen 1997) navrhlo některá bezpečnostní rozšíření a RFC 2428 (září 1998) přidalo podporu IPv6 a definovalo nový typ pasivního režimu.

Charakteristika 
FTP je jeden z nejstarších protokolů, využívá porty TCP/21 a TCP/20. Port 21 slouží k řízení a jsou jím také přenášeny příkazy FTP. Port 20 slouží k vlastnímu přenosu dat, který je 8bitový. Přenos může být binární nebo ascii (textový). Při textovém přenosu dochází ke konverzi konců řádků – CR/LF (DOS, Microsoft Windows) nebo jen LF (unixové systémy), pokud jsou koncové systémy rozdílné. Při binárním přenosu není do dat nijak zasahováno.

Protokol je interaktivní a umožňuje řízení přístupu (přihlašování login/heslo), specifikaci formátu přenášeného souboru (znakově – binárně), výpis vzdáleného adresáře atd. V současné době už není považován za bezpečný a z tohoto důvodu pro něj byla definována některá rozšíření ().

V protokolu je použit model klient–server. FTP server poskytuje data pro ostatní počítače. Klient se k serveru připojí a může provádět různé operace (výpis adresáře, změna adresáře, přenos dat atd.). Operace jsou řízeny sadou příkazů, které jsou definovány v rámci FTP protokolu, proto kdokoliv může vytvořit klienta pro jakékoliv prostředí nebo operační systém. Existuje mnoho programů pro FTP servery i klienty a mnoho je jich volně dostupných.

Přehled 
FTP běžně pracuje na dvou portech, 21 a 20 a běží výhradně přes TCP (Transmission control protocol).
FTP server naslouchá na portu 21 na příchozí spojení z FTP klienta. Na tomto portu běží příkazy, které zachytává server. Na portu 20 se přenáší pouze data, nikoliv příkazy. Jakmile se začnou stahovat data, na příkazovém portu se nic nepřenáší. Při stahování velkých souborů přes připojení s firewallem může tento kvůli dlouhodobé nečinnosti zablokovat komunikaci na portu 21.

Jak se připojit na FTP server 
První co musíte udělat je stáhnout si FTP klienta. Mnoho operačních systémů má již integrovaný nějaký tento program. Pro spuštění FTP klienta ve Windows otevřete příkazovou řádku (klikněte na tlačítko Start, potom na Spustit, do okénka napište CMD a potvrďte stiskem klávesy Enter). Napište FTP a odešlete. Nyní se můžete příkazem open název serveru připojit k ftp server. např.:

 open ftp.freebsd.org

Nyní jste připojeni na server ftp.freebsd.org. Tento server podporuje anonymní připojení, takže jméno uživatele může být třeba „ftp“ nebo „anonymous“ a heslo emailová adresa (nebo může být prázdné, někdy je vyžadován alespoň znak „@“). Jestliže server nepodporuje anonymní přihlašování, musíte jako jméno a heslo zadat údaje získané od administrátora serveru nebo pověřené osoby. Např.:

 user ftp

další informace můžete zobrazit napsáním příkazu „help“. Naprostá většina anonymních serverů umožňuje pouze čtení dat, takže umožní jen stažení souborů do vašeho počítače, u některých funguje i nahrávání dat na server.

Někdy je potřeba okamžitě odkázat na ftp server, který je zabezpečený heslem a neposílat přihlašovací údaje zvlášť. (Například u webového prohlížeče) Adresa pak má následující tvar:

ftp://<uživatelské jméno>:<heslo>@<adresa serveru + adresář>

Nejčastější užití FTP 
Nejčastější užití ftp přenosů jsou:

 Sdílení dat (často hudba, videa, vlastní tvorba, …).
 Správa účtů internetových stránek: již téměř vždy nahrazeno bezpečnějšími, šifrovanými způsoby přenosu.

Další užití FTP 
FTP je nejčastěji používáno lidmi, kteří chtějí mít přístup na systém souborů na jiném počítači. To je nejčastěji realizováno přes programy na používání FTP, u kterých si nemusíme pamatovat strukturu příkazů a pracují velice podobně jako běžný průzkumník (např. oblíbený Total Commander také podporuje FTP).

Výhody a nevýhody 
 hesla a soubory jsou ve standardním protokolu zasílána jako běžný text (nejsou šifrovaná)
 snižuje bezpečnost (ohrožuje jméno, heslo, ale i přenášená data)
 existují rozšíření FTP protokolu, která tento nedostatek odstraňují
 používají se 2 TCP spojení (první TCP spojení je řídící, druhé datové pro vlastní přenos dat)
 je-li použit firewall, protokol vyžaduje jeho speciální podporu (aktivní FTP přenos)
 podpora aktivního přenosu nefunguje u šifrovaného řídícího spojení
 pasivní přenos tento nedostatek odstraňuje
 FTP server má delší odezvy
 nemožnost sloučit přenos více (malých) souborů do jednoho zvyšuje časovou režii i zátěž serveru
 serverová část je jednodušší, než běžný HTTP server (neplatí pro odlehčené HTTP servery)
 na rozdíl od HTTP má protokol širší možnosti (nastavení práv, mazání, upload, rekurzivita, FXP, …)
 v některých sítích je povolen pouze protokol HTTP
 FTP je v současné době méně používáno

Bezpečnostní problémy 
Při běžném připojování pomocí protokolu FTP jsou přihlašovací údaje (jméno a heslo) přenášeny v textové podobě a je technicky možné je odchytit. Následně mohou být data zcizena nebo upravena. Často se vyskytují zprávy o tom, jak se hackeři nabourali do serverů a nezřídka jim k tomu stačil tak triviální úkon, jakým je zachycení nešifrovaného FTP hesla. Netřeba zdůrazňovat, že následky těchto útoků mohou mít katastrofální dopad. V dnešní době je dostupný tzv. FTPS, který je zpětně kompatibilní s běžným FTP.

Některé příkazy 
Příkazy řídícího jazyka FTP lze rozdělit do tří skupin:

 Access Control Commands (příkazy řízení přístupu)
 Transfer Parameter Commands (příkazy nastavující parametry přenosu)
 FTP Service Commands (obsluhující příkazy)

Access Control Commands
 USER – zadání uživatelského jména
 PASS – zadání uživatelského hesla
 ACCT – zadání uživatelského účtu (téměř se nepoužívá)
 CWD – změna aktuálního adresáře
 CDUP – změna aktuálního adresáře na nadřazený adresář
 QUIT – ukončení spojení
 
Transfer Parameter Commands
 PORT – specifikuje počítač a port pro datové spojení. Klient pošle tento příkaz a bude na daném portu čekat na datové spojení.
 PASV – žádá server o pasivní mód, tzn. že server bude poslouchat a klient bude iniciovat datové spojení.
 TYPE – určuje typ reprezentace dat, např. text nebo binární

FTP Service Commands
 RETR – slouží k přenosu souboru ze serveru
 GET – přenos jednoho souboru ze serveru (příkaz klientského software ftp)
 MGET – přenos více souborů ze serveru (příkaz klientského software ftp)
 STOR – přenos souboru na server
 PUT – přenos jednoho souboru na server (příkaz klientského software ftp)
 MPUT – přenos více souborů na server (příkaz klientského software ftp)
 RNFR, RNTO – přejmenování souboru
 DELE – smazání souboru
 MKD – vytvoření nového adresáře
 RMD – smazání adresáře (adresář musí být prázdný)
 ABOR – zrušení předchozího příkazu
 PWD – zjištění aktuálního pracovního adresáře
 LIST – získání seznamu souborů. K získání tohoto seznamu se musí otevřít datové spojení. Pokud parametr tohoto příkazu je adresář, získá se výpis tohoto adresáře, pokud je to soubor, získají se informace o tomto souboru a pokud příkaz nemá parametr, je vrácen výpis aktuálního adresáře. Výpis příkazu list však závisí na systému a je určen především pro člověka.
 NLST – podobný příkazu LIST, jen s tím rozdílem, že seznam vrací na každém řádku jen jméno souboru (adresáře) a žádné další informace.
 SYST – slouží k zjištění typu systému, na kterém běží FTP server.

Příkazy řídícího jazyka se přenášejí po řídícím spojení od FTP klienta na server.

Kromě toho existuje i jazyk uživatelský, jehož příkazy se od výše uvedených liší. Mezi běžné příkazy uživatelského jazyka patří GET a PUT pro přenos souborů, případně MGET a MPUT pro totéž s více soubory najednou atd. Příkazy uživatelského jazyka nejsou standardizovány a dnes se již používají málo (jen v řádkových FTP klientech).

Aktivní a pasivní připojení 
Připojení k FTP serveru je možné realizovat v aktivním nebo pasivním režimu. Pasivní režim je bezpečnější, ale ne vždy je technicky realizovatelný.

Aktivní režim

Na portu TCP/20 jsou přenášena data (data connection). V aktivním režimu navazuje připojení pro přenos dat server, klient naslouchá. Problém zpravidla nastává v případě, kdy se klient připojuje z privátní sítě a jeho IP adresa je překládána (NAT).

Pasivní režim

V pasivním režimu navazuje data connection klient, kterému při sestavování připojení poslal server svou IP adresu a TCP port, na kterém naslouchá.

FTP server, port forward (PF) a pasivní připojení

Pokud je připojení k FTP serveru realizováno prostřednictvím PF (nejčastěji se jedná o router s NAT a PF), tak router musí mít následující vlastnost – čte datovou část paketů FTP připojení, zjistí na jakém portu server naslouchá pro navázání data connection klientem a tento port začne forwardovat směrem k serveru. Po ukončení relace je ukončen i popsaný PF.

Routery mají zpravidla tuto vlastnost již vestavěnou. V případě systému Linux je nutné na routeru spustit příslušný modul – příkaz je 'modprobe nf_conntrack_ftp'

FTP přes SSH 

FTP přes SSH označuje tunelování FTP skrz spojení navázaného pomocí SSH protokolu. Někdy je též označováno jako Bezpečné FTP (Secure FTP), které by nemělo být zaměňováno za FTPS (tj. FTP s podporou SSL/TLS). Dalšími metodami bezpečného přenosu dat jsou SFTP a SCP, které využívají protokol SSH.

Protože protokol FTP používá dvě spojení, je velmi těžké zajistit, aby bylo tunelováno nejen řídící, ale i datové spojení. Pokud je FTP klient nastaven do pasivního režimu a instruován pro spojení se SOCKS serverem, které může SSH klient zajistit, může být dosaženo tunelování obou spojení.

Druhou možností je, aby SSH klient zasahoval do řídícího spojení podobně, jak je to nutné při průchodu FTP skrz NAT. Tuto funkci poskytuje 3. verze SSH Communications Security's software suite a program FONC distribuovaný pod GPL licencí.

FTP a NAT 

Hodnoty IP adres a portů v příkazu PORT a PASV vrací další možnou výzvu pro NAT zařízení při manipulaci s FTP. NAT zařízení musí změnit tyto hodnoty tak, že budou obsahovat IP adresu NATovaného klienta a port, který si NAT zařízení vybralo pro datové připojení. Tato nová IP adresa a port se bude pravděpodobně lišit délkou, v jejich desetinné reprezentaci od původní IP adresy a portu. To znamená, že změna hodnoty na kontrolu připojení NAT zařízením musí být provedena opatrně, změna TCP sekvence a potvrzovacího pole pro všechny následné pakety.

Na příklad: klient s IP 192.168.0.1, začíná v aktivním režimu přenos na portu 1025, pošle řetězec „PORT 192,168,0,1,4,1“. NAT zařízení zvolí pro datové připojení klienta IP adresu 192.168.15.5 a se zvoleným portem 2000 bude muset nahradit výše zmíněný řetězec řetězcem „PORT 192,168,15,5,7,208“.

Nový řetězec je 23 znaků dlouhý, ale původní řetězec má pouze 20 znaků. Položku s potvrzením příjmu od serveru bude nutné snížit na NAT zařízení o 3 byty, aby klient správně pochopil že PORT příkaz dorazil na server. Pokud NAT zařízení není schopné opravovat sekvence a potvrzovací pole, nebude možné použít NAT pro aktivním režimu FTP. Pasivní režim FTP bude v tomto případě pracovat, protože informace o IP adrese a portu pro datové spojení jsou odeslána serverem, který nemusí být NATován. Pokud se NAT provádí na straně serveru, nastane přesný opak. Aktivní režim bude fungovat, ale pasivní režim fungovat nebude.

Je třeba poznamenat, že mnoho NAT zařízení provádí inspekci řídícího spojení a upravuje PORT příkaz, aniž by o to byly explicitně uživatelem požádány, což může vést k několika problémům. Neexistuje žádná záruka, že použitý protokol je opravdu FTP, nebo může být použito některé rozšíření, kterému NAT zařízení nerozumí. Jedním z příkladů by bylo řídící spojení zabezpečené protokolem SSL – NAT zařízení nebude schopno dekódovat komunikaci a měnit adresy a porty.

Správným řešením je sdělit uživatelům, jaké IP adresy a porty jsou použity pro aktivní režim. Dále je nutné, aby NAT zařízení forwardovaly vybraný rozsah portů k počítačům klientů.

Odkazy

Související články 
 FileZilla – multiplatformní FTP klient a server
 TFTP – FTP se základními funkcemi
 SSH
 SFTP
 SCP
 WebDAV

Reference

Externí odkazy 
 
 
 info o FTP a NAT v CZ
 FTP Server Test (Online)
 FileZilla Server (Windows)
 Pure-FTPd (Unix)
 VsFTPd (Unix)
 ProFTPd (Unix)

Protokoly pro přenos souborů
Aplikační protokoly IP
Příkazy OS/2