FTP (File Transfer Protocol)

Petr Volný, severin(at)mail(dot)muni(dot)cz

Obsah

Úvod

FTP je platformě nezávislý síťový protokol, umožňující výměnu dat v prostředí TCP počítačových sítí. První FTP standard bylo RFC 114 (duben 1971) a ftp se považuje, spolu s telnetem, za první formální TCP/IP aplikaci. Jeho aktualni specifikaci nalezneme v RFC 959 a další rozšíření v RFC 2228. FTP je postaven na server-klient modelu a pouziva tzv. out-of-band řízení, což znamená, že používá oddělené spojení pro posílaní řídících informací a separátní spojení pro data. Zatímco řídící kanál je držen po celou dobu FTP session, datové spojení se otvírá a zavírá spolu s každým jednotlivým přenosem dat. Pro FTP jsou vyhrazeny na pevno porty 20 a 21 na data respektive na řídící spoj.


Typy spojení

Aktivní mód - Spojení iniciuje klient tak, že otevře dynamický port a pošle serveru jeho číslo portu pomocí příkazu PORT a čeká na spojení od FTP serveru. IP adresa a port v příkazu PORT jsou zakódovány následovně: "h1,h2,h3,h4,p1,p2" kde h1 až h4 jsou desítkově vyjádřené jednotlivé osmibitové složky IP adresy a port získáme vypočtením formule port = p1 * 256 + p2. Tedy např 192.168.0.15:23812 bude zakódováno jako "192,168,0,15,93,4". Port jsme tedy získali výpočtem 93 * 256 + 4 = 23812.

Pasivní mód - Při pasivním módu navazuje spojení server. Pošle FTP klientu IP adresu na kterou se má připojit a také číslo portu na kterém server naslouchá a čeká na spojení s FTP klientem. Při pasivním módu posílá na začátku klient příkaz PASV na který server odpovídá IP adresou a portem (viz. výše) zakódovanou dle stejného schématu jako u příkazu PORT.


Návratové hodnoty

1xx: Positive Preliminary reply. The action requested is being initiated but there will be another reply before it begins.
2xx: Positive Completion reply. The action requested has been completed. The client may now issue a new command.
3xx: Positive Intermediate reply. The command was successful, but a further command is required before the server can act upon the request.
4xx: Transient Negative Completion reply. The command was not successful, but the client is free to try the command again as the failure is only temporary.
5xx: Permanent Negative Completion reply. The command was not successful and the client should not attempt to repeat it again.
x0x: The failure was due to a syntax error.
x1x: This response is a reply to a request for information.
x2x: This response is a reply relating to connection information.
x3x: This response is a reply relating to accounting and authorization.
x4x: Unspecified as yet.
x5x: These responses indicate the status of the Server file system vis-a-vis the requested transfer or other file system action.


Anonymní FTP přístup

Normálně probíhá autentizace uživatelů vůči FTP serveru pomocí jména a hesla. Existuje ale i možnost zpřístupnit část adresářového stromu i anonymním uživatelům. Při přihlášení stačí většinou uvést jako jméno "anonymous" (podle nastavení serveru) a místo hesla se po uživateli většinou požaduje jeho emailová adresa. Anonymnímu uživateli je většinou poskytnuta k manipulaci pouze část adresářového stromu za pomocí chrootvání.


Bezpešnost FTP

Původní návrh FTP protokolu s žádným zabezpečením komunikace nijak nepočítal, takže řídící signály i data jdou přes síť nijak nezabezpečené. Vyvinuly se však metody jak propojit FTP s již existujícími bezpečnostními mechanizmy.

FTP přes SSH - zde se využívá tunelování normální FTP komunikace přes SSH session. Toto řešení není ale díky vlastnostem TCP a FTP příliš triviální.

SFTP - je navržen jako součást protokolu SSH a je obdobou scp.

FTPS - využívá při komunikaci šifrovaného SSL spojení a je zpětně kompatibilní s původním FTP. Server je na začátku požádán o ustavení šifrovaného spoejní, které je potom pro běžnou FTP komunikaci použito.


FTP servery

FTP serverů existuje již celá řada, zmiňme proto jen ty nejzajimavější.

WU-FTPD - Jeden ze starších a dříve velmi používaných FTP serverů, který je ale postupem času nahrazován bezpečnějšími a co se týče konfigurace bohatšími variantami.

VSFTPD - Většinou je popisován jako malý, rychlý a bezpečný server, který je jednoduché nakonfigurovat. Podporuje SSL i virtuální uživatele. Konfigurační soubor se nachází většinou v /etc/vsftpd.conf

proFTPD - Se vyznačuje rozsáhlejší konfigurovatelností a s přístupem podobným webovému serveru apache. Právě pro proFTPD si část konfigurace ukážeme.

Konfigurace proFTPD

Konfigurační soubor se nalézt v /etc/conf/proftpd.conf
#Jmeno serveru
ServerName	"Lojza" 

#Spouštění serveru (inetd nebo standalone).
ServerType	standalone

#TCP port na kterém bude server naslouchat, pokud běží jako standalone
#Port	21

#Maska přístupových práv, zadaná oktalově. Mohou být zadány dvě masky,
# jedna pro soubory a druhá pro adresáře.
Umask	022

#Maximální počet potomků spuštěných rodičovským procesem v standalone 
#režimu. Každý proces reprezentuje jedno ftp spojení, tato direktiva 
#tedy zároveň určuje maximální počet spojení.
#Vhodné použití může být dobrou prevencí proti DoS útoku (denial-of-service attack).
#Protože se pro každé spojení spouští nový proces, může opakovaný spojení
#na ftp port způsobit zahlcení systému.
  MaxInstances                    30

#Uživatel pod kterým proftpd poběží. Pokud se přihlásí běžný uživatel,
# proces se spustí s jeho uid/gid.
User	nobody
Group	nogroup

#Konfigurace platná pouze pro specifikovaný adresář.
<Directory /*>
#Povolí přepisování souborů
AllowOverwrite	on
</Directory>

#Konfigurace anonymního ftp serveru.
#Parametrem je adresář, do kterého se provede chdir a posléze i chroot.

<Anonymous ~ftp>

#Uživatel a skupina, pod kterým poběží anonymní ftp.
User	ftp
Group	ftp

#Povol login i bez platného shellu pro uživatele ftp.
RequireValidShel	off

#Pro jaká přihlašévací jména bude klient přihlášen jako anonymní
UserAlias	anonymous ftp

#Omezení FTP příkazů (CWD, MKD, RNFR, DELE, RMD, RETR, STOR, LOGGIN)
#a příkazových skupin (READ, WRITE, DIRS, ALL).

  <Limit WRITE>

#Možno použít Deny, Allow,  DenyAll, AllowAll, AllowGroup ...
      DenyAll

  </Limit>
</Anonymous>

Zdroj: referát Pavla šafáře


FTP klienti

FTP klientů je spousta a najdeme je skoro na každém systému a dnes jsou zabudované skoro i v každém web browseru nebo file manažeru. Pro přehled a porovnání doporučuji stránky wikipedie.


rsync

Rsync je původně unixová utilita pro synchronizaci adresáčů a souborů na různých místech. Opět je použita server-klient architektura, kdy si různí klienti jsou schopni synchronizovat data s na serveru běžícím démonem. rsync používá pro synchronizaci dat velmi (co se týče objemu přenesených dat) úspornou metodu. Ta spočívá v tom že je soubor rozdělen na více částí a pro každou je spočtena kontrolní suma. Přenášejí se pak pouze ty části souboru, kde se kontrolní suma na serveru a na klientu liší. Rsync je šířen jako opensource pod GNU GPL a nyní se nachází ve verzi 3.0.5.


Literatura