FTP (File Transfer Protocol), definován v RFC959 (1985), je protokolem aplikační vrstvy určeným pro přenos souborů. Mimo jiné umožňuje vytvářet a mazat adresáře, úpravu přístupových práv. Komunikace je založena převážně na modelu klient-server; je možné pomocí klienta iniciovat datové spojení mezi FTP servery.
Schopnosti základního protokolu rozšířilo několik "navazujících" RFC dokumentů, například:
Protokol FTP využívá jako transportní vrstvu pouze TCP. Používají se dvě TCP spojení - řídící a datové. FTP server naslouchá na portu 21 na příchozí spojení od klienta. Spojení na tomto portu je řídícím spojením. Protokol definuje dva módy navazovaní datového spojení:
Programové vybavení podporující protokol FTP je k dispozici pro většinu operačních systémů.
Na klientských stanicích je vždy k dispozici konzolový FTP klient. Z množství klientů pro GUI jmenujme alespoň programy gFTP či FileZilla.
Příklady nejčastěji používaných FTP serverů pro platformu Linux:
Většina serverů poskytuje služby jako: anonymní přístup, chroot() do adresáře, umask pro vytvářené soubory.
Syntaxe konfiguračních nastavení se podobá konfiguraci HTTP serveru Apache. Konfigurace je typicky uložena v /etc/proftpd.conf. Obsahuje několik sekcí:
Pozn.: žádnou z direktiv nelze zvýšit systémová práva.
Příklad konfigurace anonymního severu:
ServerName "Our FTP Server" # Server běží jako samostatný; další možností je spouštění přes inetd ServerType standalone Port 21 # Uživatel a skupina pod kterými server běží User nobody Group nogroup # Kořenový adresář stromu pro FTP server DefaultRoot /pub/ftp # K celému serveru zakážeme přístup z určitých domén, ostatním povolíme <Limit LOGIN> Order deny,allow Deny from .evil.net, .otherevil.net Allow from all </Limit> # Max počet potomků - ochrana pře DoS útokem MaxInstances 30 DisplayLogin welcome.msg # Anonumní FTP server s adresářem pro zápis <Anonymous /ftp/anonymous > # Povolíme přihlášení všem z výše povolených domén. <Limit LOGIN> AllowAll </Limit> # Maximální počet současně připojených klientů MaxClients 5 "Sorry, max %m users -- try again later" User ftp Group ftp # Uživatelský alias UserAlias anonymous ftp # Skryjeme soubory uživatele 'root' HideUser root # Defaultní maska přístupových práv pro nahrané soubory Umask 022 # Nastavení timeoutu pro připojení TimeoutLogin 120 TimeoutIdle 600 # Zakázaný zápis v celém stromě <Limit WRITE> DenyAll </Limit> # Pouze do adresáře 'uploads' povolíme zápis, ale zakážeme čtení <Directory uploads/*> <Limit READ> DenyAll </Limit> <Limit STOR> AllowAll </Limit> </Directory> </Anonymous>
V základní FTP protokolu nejsou řídící instrukce ani soubory nijak šifrovány. Existuje několik metod jak přenos souborů přes síť ochránit:
Rsync je program (klient i server) a protokol sloužící pro synchronizaci adresářů a souborů - příkladem může být zrcadlení obsahu repositářů distribucí. Využívá algoritmus minimalizující množství přenášených dat po síti a počet spojení.
Máme dva stroje alpha and beta. Na stroji alpha je soubor A a na beta soubor B. Soubory A a B by mají být synchronizovány. Mezi alpha a beta je pomalá linka. rsync algoritmus postupuje takto:
Výsledkem je, že beta obsahuje přesnou kopii souboru A. Sítí jsou přeneseny pouze potřebná data a pár "služebních" informací (instrukce a kontrolní součty). Potřebu pouze dvou spojení oceníme zvláště na linkách s velkou latencí. Podrobnější informace o protokolu a popis tvorby kontrolní součtů naleznete v článku The rsync algorithm.
rsyncd, rsync server, používá defaultně TCP port 873. Může být spouštěn pomocí inetd nebo jako samostatně běžící proces. Příklad konfiguračního souboru /etc/rsyncd.conf:
# Uživatel a skupina pod kterou server běží uid = nobody gid = nobody # Chroot()uje se use chroot = yes # Maximální počet otevřených spojení max connections = 4 #moduly [ftp] path = /pub/ftp/ comment = FTP archiv read only = yes [html] comment = HTML root path = /pub/html pid file = /var/run/rsync.html.pid read only = no list = no hosts allow = alfa.nekde.net beta.jinde.net dont compress = *.zip