Přenos souborů, datové archívy (FTP, RSync)

Pavel Šafář, xsafar1@fi.muni.cz


Obsah


FTP

FTP neboli File Transfer Protocol je definován v RFC959. Jedná se o protokol aplikační vrstvy, který je určen pro přenos souborů. Je nezávislý na platformě a hardwaru. Pracuje na principu klient-server a běží na portech 20 a 21. Kde port 20 se využívá pro přenos dat a port 21 ke posílaní FTP příkazů. Server naslouchá na portu 21 na spojení od klienta. V závislosti na typu spojeni, klient (aktivní typ) nebo server (pasivní typ) očekává datové spojení.

Jedná se o stavový protokol. Klient naváže řídící spojení (port 21) a to je udržováno po celou dobu trvání relace. Server si o klientovy pamatuje různé informace - režim přenosu či v jakém adresáři se klient nachází. Pro datová přenosy se vždy jednorázově vytvoří datové spojení (proto je posílání více souborů pomalejší - pokaždé se musí ustanovit spojení), které je po ukončení přenosu okamžitě uzavřeno.

Typy spojení

Aktivní - datové spojení je navazováno serverem, klient naslouchá.
Pasivní - datové spojeni otevírá klient na adresu a port serveru, ten naslouchá

FTP Servery

WU-FTPD
Dříve hodně používaný, dnes nahrazen servery se snazší konfiguraci a bohatšími funkcemi. Vznikl na Washingtonské univerzitě. Aktuální verze WU-FTPD je 2.6.2.

TrollFTPD
Vývoj zastaven u verze troll-ftpd-1.28. Jedná se o velmi malý server. Nespouští žádné externí programy, snadná konfigurace anonymního FTP, podpora virtuálních FTP serverů.

VSFTPD
Velmi malý, rychlý a bezpečný FTP server. Poslední verze je VSFTPD 2.0.5. Snadno konfigurovatelný a poskytuje mnoho funkcí včetně virtuálních uživatelů či SSL podporu.

proFTPD
Je považován za stabilní a bezpečný. Je velmi konfigurovatelný a jeho konfigurace se podobá konfiguraci HTTP serveru Apache. Aktuální verze proftpd-1.3.0.
Je dobře dokumentován a většina konfigurací se velmi podobá vzorovým konfiguracím. Možnost běhu jako samostatný proces nebo být spouštěn z ined démona. Jednoduché nakonfigurování anonymního FTP. Podpora virtuálních FTP serverů. Je velmi modulární, podpora SSL, LDAP či SQL.

proFTPD

Konfiguraci obvykle nalezneme v /etc/proftpd.conf. Jednoduchá konfigurace standalone serveru může vypadat následovně.

#Řetězec, který se vypíše uživateli připojujícímu se k serveru
  ServerName                      "ProFTPD Default Installation" 

#Způsob jakým bude server spuštěn (inetd nebo standalone).
  ServerType      standalone

  DefaultServer                   on

#TCP port na kterém bude server naslouchat, pokud běží jako standalone
  Port                            21

#Maska přístupových práv, zadaná oktalově. Mohou být zadány dvě masky,
# jedna pro soubory a druhá pro adresáře.
  Umask                           022

#Maximální počet potomků spuštěných rodičovským procesem v standalone 
#režimu. Každý proces reprezentuje jedno ftp spojení, tato direktiva 
#tedy zároveň určuje maximální počet spojení.
#Vhodné použití může být dobrou prevencí proti DoS útoku (denial-of-service attack).
#Protože se pro každé spojení spouští nový proces, může opakovaný spojení
#na ftp port způsobit zahlcení systému.
  MaxInstances                    30

#Uživatel pod kterým proftpd poběží. Pokud se přihlásí běžný uživatel,
# proces se spustí s jeho uid/gid.
  User                            nobody
  Group                           nogroup

#Blok konfigurace vztažený pouze k danému adresáři. 
  <Directory /*>
#Povolí přepisování souborů
    AllowOverwrite                on
  </Directory>

#Konfigurace anonymního ftp serveru.
#Parametrem je adresář, do kterého se provede chdir a posléze i chroot.

  <Anonymous ~ftp>
#Uživatel a skupina, pod kterým poběží anonymní ftp.
    User                          ftp
    Group                         ftp

#Povol login i bez platného shellu pro uživatele ftp.
    RequireValidShel		off

#Anonymní uživatelé se mohou přihlásit buď jako ftp nebo anonymous.
    UserAlias                     anonymous ftp

#Maximální počet anonymních spojení.
    MaxClients                    10

#Jméno souboru, jehož obsah se uživateli vypíše po přihlášení.
#Pokud je zadáno relativně, soubor se hledá v adresáři, kam je uživatel 
#přepnut po přihlášení.
#Je možno jej zadat i absolutně.
    DisplayLogin                  welcome.msg

#Jméno souboru, jehož obsah se vypíše po přepnutí do adresáře.
    DisplayFirstChdir             .message

#Omezení FTP příkazů (CWD, MKD, RNFR, DELE, RMD, RETR, STOR, LOGGIN)
#a příkazových skupin (READ, WRITE, DIRS, ALL).

    <Limit WRITE>

#Možno použít Deny, Allow,  DenyAll, AllowAll, AllowGroup ...
      DenyAll

    </Limit>
  </Anonymous>

Uživatelský, anonymní přístup

Autentizace uživatele probíhá podle jména a hesla. ProFtpd poskytuje možnost použít jak klasické /etc/passwd, tak /etc/shadow, či vlastní soubor s hesly. Po přihlášení je uživatel přepnut do svého domovského adresáře. Anonymní ftp přístup umožňuje přihlásit se jako anonymní uživatel (obvykle ftp či anonymous), místo hesla je uživatel požádán o zadání své email adresy. Ftp server potom provede volání jádra chdir do určeného adresáře a zde provede chroot. Tímto se zajistí, že anonymní uživatel nemůže mimo přesně vymezený podstrom.

Virtuální hosting

Pomocí tzv. Virtual hosting můžeme nakonfigurovat několik různých FTP serverů. Jelikož FTP protokol neposkytuje hlavičku host, jak je tomu v HTTP, musí jednotlivé FTP servery běžet na různých portech.
Minimální konfigurace virtuálního FTP může vypadat takto:

<VirtualHost 10.0.0.1>
ServerName "My virtual FTP server"
</VirtualHost>

Logování

ProFTPD poskytuje několik možností logovacích mechanismů.
syslog - v základním nastavení ProFTPD loguje pomoci syslogu. Kam a jak se loguje je nastaveno v konfiguračním souboru syslogu /etc/syslog.conf
logovací soubory - jsou 3 základní druhy logů, které může ProFTPD generovat: TransferLog, SystemLog a ExtendedLog.


RSync

Program rsync slouží k synchronizaci souborů či adresářů s použitím co možná největší úspory přenesených dat. Aktuálně je ve verzi 2.6.9 a je standardní součástí skoro každé distribuce. Jedná se o architekturu klient - server. Kde jeden či více démonu běží na serveru a klienti si se serverem synchronizují data. K úspoře přenesených dat dochází tím, že se kopírují pouze rozdíly v souborech. Pro přenos souborů se používá ssh či rsh.
Mezi hlavní vlastnosti patří: synchronizace adresářových struktur, zachovávání symbolických linku, práv či vlastníka a podpora anonymního rsync (není potřeba jméno a heslo).
Hlavní způsoby použití:

RSync server

Používá se stejný binární soubor pro spouštění démona (serveru) i pro spouštění klienta. Soubor s konfigurací je obvykle /etc/rsyncd.conf. Obsahuje parametry moduly. Parametr se zapisuje tvarem 'jmeno = hodnota' a modul začíná svým jménem např. [ftp] a končí tak, kde začíná modul nový. Na začátku souboru se dají definovat parametry, které budou platit globálně.
Příklad rsyncd.conf:

 #uživatel a skupina pod kterou běží
 uid = nobody
 gid = nobody

 #nechroot()uje se
 use chroot = no
 
 #maximální počet otevřených spojení
 max connections = 4
 
 #způsob logování
 syslog facility = local5

 #kam s pid souborem
 pid file = /etc/rsyncd.pid

 #moduly
 [ftp]
        path = /var/ftp/pub
        comment = whole ftp area (approx 6.1 GB)

 [sambaftp]
        path = /var/ftp/pub/samba
        comment = Samba ftp area (approx 300 MB)

 [rsyncftp]
        path = /var/ftp/pub/rsync
        comment = rsync ftp area (approx 6 MB)
        
 [sambawww]
        path = /public_html/samba
        comment = Samba WWW pages (approx 240 MB)

 [cvs]
        path = /data/cvs
        comment = CVS repository (requires authentication)
        auth users = tridge, susan
        secrets file = /etc/rsyncd.secrets

kde soubor /etc/rsyncd.secrets vypadá následovně:

 tridge:mypass
 susan:herpass
      

Přístupová práva k souboru s hesly musí byt nastavena tak, aby byl zakázán přístup pro ostatní, jinak nebude fungovat, např chmod 640 /etc/rsyncd.secrets

RSync klient

Pomocí rsync klienta se provádí připojení a přenos souborů. Může se jednat jak o download, tak o upload, záleží na nastavení serveru. Spouštění přes příkazovou řádku má následující syntaxi:

rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC [DEST]
rsync [OPTION]... SRC [SRC]... DEST
rsync [OPTION]... [USER@]HOST::SRC [DEST]
rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
    

Podrobný popis voleb je popsán v man stránkách, viz. man rsync
Příklad použití:

rsync \
 rsync://ftp.linux.cz/pub/linux/redhat-cz/7.1/iso/redhat-7.1cz-disk1-respin.iso \
 ./redhat-7.1cz-disk1.iso
    

Zdroje

http://www.fi.muni.cz/kas/p090
http://www.wikipedia.org
http://www.abclinuxu.cz
http://www.root.cz