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.
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.
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.
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í.
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 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.
#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>
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 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.