Sloj | Protokol |
---|---|
Aplikacijski | DNS, DHCP, TLS/SSL, TFTP, FTP, HTTP, IMAP, IRC, NNTP, POP3, SIP, SMTP, SNMP, SSH, Telnet, BitTorrent, RTP, rlogin, … |
Transportni | TCP, UDP, DCCP, SCTP, IL, RUDP, |
Mrežni | IP (IPv4, IPv6), ICMP, IGMP, ARP, RARP, … |
Podatkovni | Ethernet, Wi-Fi, Token ring, PPP, SLIP, FDDI, ATM, DTM, Frame Relay, SMDS, … |
File Transfer Protocol (FTP) je standardni mrežni protokol koji se koristi za premještanje datoteka s jednog hosta na drugi putem mreže temeljene na TCP-u, kao što je Internet.
FTP je sagrađen na korisničko-serverskoj arhitekturi te koristi odvojeno nadzornu i podatkovnu vezu između korisničkog računala i servera.[1] FTP korisnici se mogu ovjeriti koristeći čisti tekst kao protokol prijave, obično u obliku korisničkog imena i zaporke, ali se mogu spojiti i anonimno ako je server konfiguriran kako bi to dopustio. Za siguran prijenos koji skriva (šifrira) korisničko ime i zaporku, te šifrira sadržaj, FTP se često osigurava sa SSL/TLS („FTPS“). Ponekad se za zamjenu koristi također SSH File Transfer Protocol (SFTP), ali je tehnološki drugačiji. FTP veza se uspostavlja na zahtjev korisničkog računala prema serverskom računalu. Korisničko računalo mora posjedovati program koji implementira FTP protokol (tzv. FTP klijent), a serversko računalo mora posjedovati program koji prihvaća veze na standardnom FTP portu te također razumije komande protokola FTP (tzv. FTP server ili FTP demon). Kada se veza uspostavi, klijentski program šalje korisničke komande serverskom programu, koji ih obavlja i šalje odgovor. Taj odgovor može biti poruka da je naredba uspješno obavljena, datoteka koja je zahtijevana ili poruka o grešci. Prve FTP korisničke aplikacije su bile aplikacije naredbenog retka (command-line aplications) razvijene prije operativnih sustava (OS) i grafičkog korisničkog sučelja (GUI) te se također dostavljaju s većinom Windows, Unix- i Linux operativnih sustava. Puno FTP klijenata i automatiziranih usluga se od tada razvilo za računala, servere, prijenosne uređaje i hardver te je FTP ugrađen u stotinu proizvodnih aplikacija, kao što su uređivači web stranica.
Izvorni tehnički opis za FTP je napisao Abhay Bhushan i objavljen je kao RFC 114 16.4.1971. godine te poslije zamijenjen RFC 765 (lipanj 1980.g.) pa je zamijenjen s današnjim tehničkim opisom RFC 959 (listopad 1997.g.). Nekoliko standarda dopuna je predloženo RFC 959, npr. RFC 2228 (lipanj 1997.g.) predlaže sigurnosno proširenje i RFC 2428 (rujan 1998.g.) dodaje podršku za IPv6 i definira novi tip pasivnog načina rada.
Protokol je prvi put tehnički opisan u lipnju 1980. godine te je korigiran u RFC 959, što je ovdje sažeto.[2]
FTP može prometovati u aktivnom i pasivnom načinu rada, što određuje kako je podatkovna veza uspostavljena.[3] U aktivnom načinu rada, korisnik stvara FTP nadzornu vezu. U okolnostima kada je korisničko računalo iza vatrozida i nije u mogućnosti prihvatiti dolazeću TCP vezu, može se koristiti pasivni način rada. U ovom načinu rada korisničko računalo koristi nadzornu vezu kako bi poslao PASV naredbu serveru te potom primio IP adresu servera i broj porta servera, koju potom korisničko računalo koristi da bi otvorilo podatkovnu vezu proizvoljnog korisničkog porta s IP adresom servera i njegovim brojem porta koji je primio. Oba načina su unaprijeđena u rujnu 1998. godine kako bi podržavala IPv6. S vremenom su se daljnje promjene u pasivnom načinu rada uvodile, unapređujući ga u prošireni pasivni način rada.[4]
Server odgovara preko nadzorne veze s troznamenkastim kodom stanja u ASCII-u s neobveznom tekstualnom porukom. Na primjer „200“ (ili „200 OK“) što znači da je zadnja naredba bila uspješna. Brojevi predstavljaju kod odgovora, a proizvoljni tekst predstavlja čitljivo objašnjenje ili zahtjev (pri. <trebam račun za spremanje datoteke>). Trenutno prebacivanje podataka preko podatkovne veze se može prekinuti koristeći poruku za prekid preko nadzorne veze. U trenutku prebacivanja podataka kroz mrežu mogu se koristiti četiri prikaza podataka:
Za tekstualne datoteke, različiti nadzori oblika i izbori strukture zapisa su osigurani. Ove mogućnosti su dizajnirane da bi se olakšalo rad s datotekama koje koriste Telnet i ASA. Prijenos podataka se može napraviti u bilo kojem od tri moda:
FTP prijava koristi obično shemu korisničkog imena i zaporke za odobravanje pristupa. Korisničko ime se šalje serveru koristeći naredbu USER, a zaporka se šalje koristeći naredbu PASS. Ako su korisničke informacije prihvaćene od strane servera, server šalje pozdrav korisniku te razmjena podataka (sesija) započinje.
Host koji omogućava FTP uslugu može omogućiti anonimni FTP pristup. Korisnici se obično prijavljuju na uslugu 'anonimnim' (mala slova te osjetljiv na veličinu slova na nekim FTP serverima) računom kada ih se zatraži korisničko ime. Iako od korisnika se najčešće traži slanje e-mail adresa umjesto lozinki, te se ne obavlja nikakva provjera isporučenih podataka.
FTP obično prebacuje podatke ponovnim spajanjem servera na korisničko računalo, nakon što je naredba PORT poslana s korisničkog računala.[5] Ovo je sporno i za NAT i za vatrozid, koji ne dozvoljavaju spajanje s Interneta na unutrašnje hostove. Za NAT, dodatna komplikacija je ta da prikaz IP adrese i broja porta u naredbi PORT se odnosi na unutarnju IP adresu i broj porta hosta, a ne na javnu IP adresu i port NAT-a. Postoje dva pristupa ovom problemu. Jedna je da FTP korisničko računalo i FTP server koriste naredbu PASV, koja omogućava da se podatkovna veza uspostavi s korisničkog računala na serversko. Ovaj način naširoko koriste moderni FTP klijenti. Drugi pristup je da se NAT obavijesti o vrijednostima naredbe PORT, koristeći pristupnik aplikacijskog nivoa (application-level gateway) za ovu svrhu.
FTP se smatra za izvanpojasnu kontrolu, kao suprotnost unutarpojasnoj kontroli koju koristi HTTP.[6]
Većina uobičajenih web preglednika mogu dohvatiti datoteke koje su smještene na FTP serverima, makar mogu ne podržavati proširenja protokola kao FTPS.[7] Kada se FTP – prije nego HTTP – URL unese, sadržaj kojem se može pristupiti je prikazan sličan Web sadržaju. Potpuni FTP klijent se može pokrenuti unutar web preglednika u obliku dodatka.
FTP URL sintaksa je opisana u RFC1738, i ima oblik: ftp://[<user>[:<password>]@]<host>[:<port>]/<url-path> (dijelovi u zagradama su neobavezni).
Na primjer:
ftp://javni.ftp-server.primjer.com/mojamapa/mojadatoteka.txt[neaktivna poveznica]
ili:
ftp://user001:secretpassword@privatni.ftp-server.primjer.com/mojamapa/mojadatoteka.txt[neaktivna poveznica]
Više detalja o navođenju korisničkog imena i zaporke se može naći u dokumentaciji preglednika, kao što su Firefox i Interenet Explorer.[8] Po zadanim postavkama, većina web peglednika koriste pasivni (PASV) način, koji lakše premosti krajnje korisničke vatrozide.
FTP nije napravljen da bi bio siguran protokol – posebno po današnjim standardima – i posjeduje mnoge tajne slabosti. U svibnju 1999. autori RFC 2577 su popisali ranjivost na sljedeće probleme:[9]
FTP nije u mogućnosti šifrirati svoj promet; cijeli prijenos je u tekstualnom obliku, i korisnička imena, zaporke, naredbe i podatci se mogu lako pročitati hvatanjem podataka na mreži (sniffing). Ovaj problem je zajednički s mnogim Internet protokolima (kao što su SMTP, Telnet, POP i IMAP) koji su bili stvoreni prije stvaranja mahanizama za šifriranje kao što su TSL ili SSL. Uobičajeno rješenje za ovaj problem je korištenje „sigurnu“ TLS zaštićenu varijantu nezaštićenih protokola (primjer FTPS za FTP, TelnetS za Telnet, itd.) ili drugi, sigurniji protokol koji može obaviti posao. kao što su SFTP/SCP alati uključeni u većinu implementacija Secure Shell protokola (SSH).
Postoji nekoliko načina sigurnog prijenosa datoteka koji se zovu „Secure FTP“ na jednoj ili drugoj strani.
Jasan FTPS je proširenje FTP standarda koji omogućuje korisničkim računalima zahtjev da FTP sesija bude šifrirana. To se čini slanjem naredbe „AUTH TLS“. Serversko računalo ima izbor odobravanja ili odbijanja veze koja ne zahtijeva TLS. Ovo proširenje protokola je definiranom u predloženom standardu: RFC 4217. Jasan FTPS je zastario standard za FTP koji zahtijeva korištenje SSL ili TLS veze. Drugi portovi su se koristili od običnog FTP-a.
SFTP, „SSH File Transfer Protocol“ nije srodan FTP-u osim što također prenosi datoteke i ima sličan skup korisničkih naredbi. SFTP, ili sigurni FTP, je program koji koristi Secure Shell (SSH) za prebacivanje datoteka. Za razliku od standardnog FTP-a, šifrira naredbe i podatke, sprečavajući da se zaporke i osjetljive informacije otvoreno šalju na mreži. Po svojoj funkcionalnosti je srodan FTP-u, ali pošto koristi drugačiji protokol, standardni FTP klijenti se ne mogu korisitit za komuniciranje sa SFTP serverom, niti se itko može spojiti na FTP server s klijentom koji podržava samo SFTP.
FTP preko SSH (ne SFTP) se odnosi na postupak tuneliranja klasične FTP sesije preko SSH veze.[10] Pošto FTP koristi više TCP veza (neuobičajeno za TCP/IP protokol koji se još koristi), posebno je teško napraviti tuneliranje preko SSH. S mnogim SSH klijentima, pokušavajući uspostaviti nadzorni kanal (početnu korisnik-server vezu na portu 21) te će on štititi samo taj kanal; kada su podatci prebacivani, FTP softver s bilo koje strane će uspostaviti novu TCP vezu (podatkovni kanali), koji zaobilazi SSH vezu i tako nema zaštitu povjerljivosti ili nepovredivosti, itd. S druge strane, neophodno je da SSH klijentski softver ima određeno znanje o FTP protokolu, da nadgleda i prepisuje poruke nadzornog FTP kanala i autonomno otvara novo prosljeđivanje paketa za FTP podatkovni kanal. Softverski paketi koji podržavaju ovaj način uključuju:
Nekada se misli na FTP preko SSH kao na sigurni FTP, pa se ne bi smjelo pobrkati s ostalim načinima osiguravanja FTP-a, kao što su SSL/TLS (FTPS). Ostali načini prijenosa podataka koji koriste SSH koji nisu u svezi s FTP-om uključuju SFTP i SCP; o svakome od ovih, cijeli razgovor (vjerodajnice i podatci) su uvijek zaštićeni SSH protokolom.
Dolje niže je sažetak kodova u odgovorima koje može vratiti FTP server. Ove kodove je standardizirao RFC 959 od IETF. Kao što je bilo rečeno ranije u ovom članku, kod odgovora je troznamenkasta vrijednost. Prva znamenka označava jedan od tri moguća ishoda - uspjeh, neuspjeh ili upućuje na grešku ili nepotpun odgovor:* 2yz – Success reply
Druga znamenka definira vrstu greške:
Treća znamenka koda u odgovoru se koristi da bi dala dodatne detalje o svakoj od kategoraja definiranih s drugom znamenkom.