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