Datové archívy - FTP a rsync

Radek Svoboda <xsvobo27 (a) fi.muni.cz>

Obsah

FTP - File Transfer Protocol

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:

FTP - přenos dat

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í:

FTP - softwarové vybavení

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.

FTP - server proftpd

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>

FTP - bezpečnost

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

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

rsync - algoritmus

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:

  1. Stroj beta rozdělí soubor B do nepřekrývajících se bloků velikosti S bytů (s možnou výjimkou posledního).
  2. Pro každý z těchto bloků spočítá 2 kontrolní součty: slabý tzv. 'rolling' (32bitů) a silný MD4(128b).
  3. beta pošle tyto kontrolní součty na stroj alpha.
  4. alpha prohledá soubor A, aby nalezl všechny bloky délky S (na libovolném místě, nejen násobky S), které mají stejné kontrolní součty jako nějaký z bloků B. Toto může být provedeno jedním průchodem a velmi rychle díky speciálním vlastnostem kontrolního součtu 'rolling'.
  5. alpha pošle na stroj beta instrukce jak sestavit kopii A. Každá instrukce je buď odkazem na blok z B nebo příslušná data, která se v B nevyskytují.

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.

rsync - klient

rsync - server

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

Literatura