FTP

**File Transfer Protocol** (**FTP**) er en standardisert applikasjons-protokoll for overføring av filer i et TCP/IP-basert nettverk, og involverer to parter - en 'klient' og en 'server'. Protokollen er definert i standarddokumentet RFC 959 med senere utvidelser og definerer funksjoner, kommandoer og mekanismer for overføring og manipulering av filer mellom klient og tjener. Den angir ikke hvordan brukergrensesnittet skal implementeres, men det har i årenes løp utviklet seg en de facto standard for FTP-klienter med kommandolinje. Hele eller deler av protokollen ble etterhvert innebygget i mange såkalte 'file-managers', nettlesere og spesialprogrammer som FileZilla, et åpen kildekode prosjekt som omfatter både klient og tjener. For nettlesere endret dette seg etter 2020, da FTP-støtten først ble 'utkoblet', senere fjernet fra de de mest populære variantene – som Chrome, Firefox og Safari.

Klient og tjener i FTP-sammenheng er programmer, ikke maskiner. En FTP-server kan like gjerne kjøres på en liten PC som en stor server-maskin. For eksempel har programpakken MTCP for MS-DOS en enkel server-implementasjon i tillegg til en FTP-klient. Likeledes kan FTP-servere også kjøres på laptops og IoT-enheter helt ned til frimerke-størrelse.

En FTP-server er et bakgrunnsprogram som lytter etter forespørsler fra nettverket, etablerer forbindelse og sørger for autentisering (innlogging). Forbindelsen opprettholdes til klienten logger seg av eller til manglende aktivitet trigger automatisk utlogging, typisk 15 minutter. Mange servere støtter såkalt anonym innlogging, som betyr at hvem som helst får tilgang, typisk til et begrenset antall funksjoner - som å liste og hente filer. Anonym FTP var viktig for distribusjon av programvare, oppdateringer, dokumenter og annen åpen informasjon før HTTP overtok oppgaven for brukere flest. 

FTP-klienten er ofte et brukerprogram med grafisk brukergrensesnitt eller kommandolinje der brukeren kan hente, sende og manipulere filer på serveren. FTP-klienter finnes for de fleste plattformer, men er ikke nødvendigvis installert – ofte av sikkerthetsmessige årsaker. Protokollen er åpen, uten kryptering og dermed enkel å 'avlytte' med lett tilgjengelige verktøy som tcpdump og Wireshark. FTPS eller 'FTP Secure', som sikrer både autentisering og dataoverføring via TLS/SSL, løser denne utfordringen, men er lite implementert – blant annet fordi det i dag finnes bedre og sikrere alternativer for de fleste anvendelser (mer om sikkerhet nedenfor).

## Historie
FTP er Internettets eldste verktøy og første applikasjons-protokoll med opprinnelse tilbake til 1970 (RFC 114). I tillegg til å muliggjøre overføring av filer og data mellom digitale systemer i sann tid, ble FTP fundament for de første Internett-baserte e-post implementasjonene.

I parallell med utviklingen av først ARPAnettet og deretter Internettet er FTP-standarden blitt revidert og utvidet en rekke ganger, senest i 2007 (RFC 3659). Med RFC 765 i 1980 fikk FTP den form og de protokoll-mekanismer den har i dag. Ytterligere funksjonelle og sikkerhetsrelaterte utvidelser kom i 1985, 1997, 1999 og til slutt i 2007. De mange utvidelsene til tross er FTP i dag med få unntak bakover-kompatibel med standarden fra 1980 (RFC 765).

Utvidelsene har gitt FTP tilstrekkelig funksjonalitet til å implementere fullfunksjons nettverksbaserte filsystemer (engelsk 'remote file systems'). Et eksempel på en slik implementasjon er CurlFtpFS, som via FTP kobler serverens filsystem inn i det lokale filsystemet på en Linux maskin – etter samme modell som for eksempel NFS. Likeledes har en rekke utviklingsverktøy bygget inn FTP i sin egen filbehandling slik at filer på andre maskiner kan manipuleres og redigeres som om de var lokale, for eksempel BBedit.

## Protokoll
Som applikasjonsprotokoll er FTP basert på TCP for pålitelig overføring av kommandoer og data. Protokollen definerer en kommandokanal der klient og tjener utveksler enkle tekst-baserte kommandoer og like enkle responser. For eksempel vil kommandoen 'RETR fil1.dat' be serveren om å sende angitte fil hvis den finnes og er tilgjengelig. Svaret fra serveren vil være '200 OK' hvis alt er i orden, eventuelt en annen kode som indikerer hvilken feil som oppsto. Deretter starter overføringen, som foregår via en egen datakanal. Kommandokanalen – i realiteten en enkel Telnet-forbindelse – er åpen så lenge innloggingen varer, mens datakanaler åpnes og lukkes for hver transaksjon. TCP-port 21 for kommando og 20 for data er standard, men både klient og server kan velge andre porter. FTP-protokollen definerer også kommandoer for manipulering av filer, konvertering av data og filnavn, og håndtering av ulike tegnsett. En del av disse er i praksis utgått på dato, men fortsatt med i spesifikasjonen. 

I nyere tid har FTP fått flere modi. Opprinnelig ble datakanalen som etableres for hver transaksjon, åpnet og lukket av serveren. Dette kalles 'aktiv modus'. Med introduksjonen av brannmurer som stenger for 'tilfeldige' forbindelser utenfra, og NAT-protokollen, som muliggjør mange nettklienter på samme Internett-adresse, er dette ikke lenger mulig. Derfor ble 'passiv modus' introdusert, der rollene er byttet og klienten har ansvaret for datakanalen. Den praktiske forskjellen er imidlertid minimal og siden NAT og brannmurer er så utbredte, er passiv modus i dag standard for de fleste FTP klient-implementasjoner.

## Sikkerhet
Behovet for å tenke sikkerhet var fraværende da FTP ble til på 1970-tallet og utvidet på 1980-tallet. Dette problemet er felles for alle de tidlige tjeneste-protokollene i Internettet, som Telnet, SMTP, SNMP, POP og IMAP. Alle data, også brukernavn og passord ved innlogging, blir sendt i klartekst og kan 'sniffes' på nettet med enkle verktøy. I kompatibilitetens navn gjelder dette fortsatt hvis de opprinnelige mekanismene brukes. RFC 2228 spesifiserer FTPS, utvidelser som via TLS/SSL standarden sikrer både autentisering og overføring, og legger til mulighet for autorisering, som tidligere ikke var tilgjengelig i FTP. 

FTPS og RFC 2228 introduserer to varianter av kryptert FTP, 'implisitt FTPS' og 'eksplisitt FTPS'. Førstnevnte lytter på en annen port enn standard FTP og setter opp sikkerhetsmekanismene automatisk, mens sistnevnte, den eksplisitte varianten, utvider den vanlige serveren med nye kommandoer. Implisitt FTPS ble senere, i RFC 3659, fjernet. I dag er kun eksplisitt FTPS, noen ganger kalt FTPES, i praktisk bruk. Navnelikheten til tross, FTPS er ikke det samme som SFTP. 

## Referanser


## Eksterne lenker
* RFC 959 – File Transfer Protocol
* RFC 1579 – Firewall Friendly FTP
* RFC 2228 – FTP Security Extensions
* RFC 2428 – FTP Extensions for IPv6 and NATs
* RFC 2640 – Internationalization of the File Transfer Protocol
* RFC 3659 – Extensions to FTP
* RFC 4217 – Securing FTP with TLS

;Servere
* VsFTPd (Unix)
* ProFTPd (Unix/Linux)
* CurlFtpFS (Unix/Linux)
* Pure-FTPd (Unix)
* FileZilla Server (Windows)
* FTP Server Test (Online, verktøy for testing av FTP servere))

;Klient til Windows
*Filezilla
*SmartFTP

;Klient til Linux
*KBear
*gFTP 
*GNU Midnight Commander
*Konqueror – kun anonym FTP

;Klient til Macintosh
*Cyberduck
*ForkLift
*Transmit
*Fetch

;Web-baserte FTP-klienter
Det finnes flere web-baserte FTP-klienter. phpWebFTP er blant dem. Det er en installasjon av den på thorrune.net, mens den offisielle hjemmesiden er her, på v-wijk.net

;Alternativer til FTP
*SCP er en påbygning på SSH for sikker overføring av filer. Funksjonaliteten er modellert etter Unix/Linux cp (copy) kommando og kan overføre enkeltfiler eller hierarkier.
*SFTP – FTP-lignende med SSH som underliggende protokoll.
*rsync – Program og mekanisme for filoverføring og synkronisering av filer mellom systemer. Benytter SSH for krypterte overføringer.