FTP server a rsync

Josef Kořenek, xkorenek@fi.muni.cz


Obsah


FTP

File transport protocol je stavový protokol pro přenos souborů definovaný v
RFC 959 (revidováno v RFC 2228). Mezi klientem a serverem je ustanoveno řídící spojení (control connection), které slouží k předávání příkazů a odpovědí na ně. Řídící spojení je udržováno po celou dobu připojení klienta k serveru. Pro přenos dat se ustanovuje vždy nové spojení, které se bezprostředně po ukončení přenosu zruší. V kontrolním spojení používá klient příkazy ve tvaru textových řetězců (max. čtyřznakové příkazy s možnými argumenty, nejsou shodné s příkazy ftp klientů) na které server odpovídá kódem odpověďi, což je třímístné číslo a krátkou zprávou příslušnou tomuto kódu.
1xx - požadovaná akce byla zahájena, očekavej další odpověď před dalším příkazem.
2xx - požadovaná akce byla úspěšně ukončena.
3xx - příkaz byl akceptován, ale klient by měl poslat další příkaz.
4xx - příkaz nebyl akceptován, ale chyba je pouze dočasná.
5xx - příkaz nebyl akceptován chyba je trvalejšího rázu.
Vice o příkazech a odpovědích v RFC 959. FTP server standardně běží na portu číslo 21.

WU-FTPD

Washington University FTP daemon byl vyvinut pro wuarchive.wustl.edu a nyní je vyvíjen WU-FTPD development group. Šířen je pod WU-FTPD software licence. Poslední verze je 2.6.1. Podporuje jak anonymní tak i guest FTP a běh více virtualních FTP serverů na jednom stroji.

Konfigurace WU-FTPD

Server se standardně spouští prostřednictvím inet daemona ale může běžet i jako standalone (přepínač -S). Pokud není spuštěn s přepínačem -a ignoruje nastavení v konfiguračních souborech. Ostatní přepínače viz. man ftpd. Konfigurační soubory jsou:
/etc/ftpaccess
/etc/ftpconversions
/etc/ftpusers
/etc/ftphosts
/etc/servers

V souboru ftpusers jsou vyjmenovány (jeden na každém řádku) lokální loginy na které se nelze vzdáleně přihlásit.

V souboru ftphosts se nastavuje z jakých adres maji jednotliví uživatelé povolený nebo zakázaný přístup. Příklad:
deny root *
allow josef 10.0.0.33
allow stuff 10.0.0.0/8

V souboru ftpconversions se nastavují konverze, které se mají provést nad přenášenými soubory. Může to být třeba on-the-fly komprese přenášených souborů, výpočet MD5 charakteristik atd. Typický řádek má takovýto tvar:
%s:%s:%s:%s:%s:%s:%s:%s
 1  2  3  4  5  6  7  8
Jednotlivé řetězce mají tento význam:
1 ořezání předpony
2 ořezání přípony
3 přidání předpony
4 přidání přípony
5 spuštění externího příkazu
6 typy
7 volby
8 popis

Řádek, který umožní přenášet soubory komprimované gzipem může vypadat třeba takto:

: : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP

Nejdůležitějším konfiguračním souborem je ftpaccess. Obsahuje globální nastavení FTP serveru, konfiguraci anonymního a guest FTP, logovaní a vše co se přístupu k serveru týče.
Příklad:


greeting brief
# Při oteviraní nového spojení vypíše pouze hostname. Další možnosti # jsou "terse" a "full". banner /etc/wu-ftpd/banner.msg # Po přihlášení zobrazí obsah souboru "/etc/wu-ftpd/banner.msg" class all real, guest, anonymous * # Definuje novou třídu uživatelů "all", která se skládá ze # všech uživatelů kteří se přihlásí jako real, guest nebo # anonymous. Hvězdička udává, že se mohou hlásit z libovolných # adres (domén). Definovat si sve vlastní třídy je vhodné, protože # se v nich seskupují uživatele a tyto třídy pak mohou být moužity # jako argumenty jiným příkazům. limit all 3 Any /etc/wu-ftpd/ftpmanyusers.msg # Zakáže přihlášení více než 3 uživatelů ze třídy all. Kontrola # se provádí během přihlašování a pokud klient při této kontrole # neuspěje je mu zaslán obsah souboru /etc/wu-ftpd/ftpmanyusers.msg loginfails 3 # Po třetím neuspěšném spojení je ukončeno řídící spojení. noretrieve passwd shadow group # Zakáže stahování souborů s těmito názvy ať jsou umístěny kdekoliv. # Pokud jméno souboru začína / pak se omezení vztahuje pouze na tento # soubor defaultserver deny * defaultserver allow josef michal martin # Zakáže přihlášení všem uživatelům kromě uvedených. Defaultně jsou # všechny loginy povoleny. defaultserver private # Zakazuje anonymní uživatele. Normálně jsou povoleni. chmod yes class=all delete yes real, anonymous overwrite yes real, guest rename no guest, anonymous umask yes real # Nastavuje jaká práva bude mít která třída uživatelů guestuser josef martin # Určuje, kteří uživatelé budou považováni za guest guest-root /home/ftp # Nastavuje kořenový adresář pro guest uživatele v guestuser guest-root /home/michal michal # Nastavuje kořenový adresář pro guest uživatele michala anonymous-root /home/ftp # Nastavuje kořenový adresář pro anonymous učet upload /home/ftp /incoming yes ftp daemon 0400 nodirs # Povolí upload do adresáře /incoming uživatelům, jejichž domovským # adresářem je /home/ftp. Soubory budou patřit ftp.daemon práva těchto # souborů budou 0400. Vytváření nových podadresářů není povoleno. log commands all # Budou se logovat příkazy všech uživatelů. log transfers anonymous, guest inbound # Budou logovány všechny přenosy z tříd anonyous a guest směrem na # server # Nastavení je mnohem více, všechna najdete v man ftpaccess.

Guest a anonymous účty

K anonymnímu účtu přistupují uživatelé pod jménem "anonymous" nebo "ftp" a jako heslo většinou zasílají e-mailovou adresu. Ve WU-FTPD lze pomocí nastavení passwd-check ve ftpaccess nastavit různé úrovně kontroly této adresy. Ke guest účtu se uživatelé přihlašují jménem a heslem. Jak pro guest tak pro anonymous účty platí, že po přihlášení jsou chrootovani do svého adresáře a ten pak již nemohou opustit. Protože WU-FTPD používá ke sve činnosti externí příkaz "ls" (popřípadě i další) musí mu být v tomto chrootované prostředí tento příkaz dostupný. To znamená, že musíme vytvořit v chrootovaném prostředí podadresář bin/ a od něj nakopírovat "ls". Pokud "ls" využívá nějaké knihovny pak musíme ještě vytvořit podadresář lib/ a do něj tyto knihovny nakopírovat (nebo na ně aspoň vytvořit odkazy). U guest účtů je navíc stejným zpusobem zpřístupnit soubory passwd, group a popřípadě i shadow. Kvuli bezpečnosti by podadresáře měly mít prava 111, soubory passwd a group 444 a ls 111.

Virtualní FTP servery

WU-FTPD umožňuje běh více ftp serverů (virtuálních) na jednom stroji. Každý může mít svou vlastní konfiguraci, ale každý také musí mít svou vlastní IP adresu. K přiřazení jednotlivých IP adres příslušným konfigucím slouží soubor /etc/ftpservers. Jeho format je velmi jednoduchý. Řádek je složen z IP adresy virtuálního ftp serveru a z adresáře ve kterém jsou uloženy jeho výše uvedené konfigurační soubory.
10.0.0.33	/etc/wu-ftpd/10.0.0.33_configuration/
10.0.0.35	/etc/wu-ftpd/10.0.0.35_configuration/

Pokud je v příslušném adresáři vynechán některý z konfiguračních souborů použije se místo něj standardní z adresaře /etc.

Další FTP servery

TrollFTPD

Vyvíjí jej firma
TrollTech aktuální verze je 1.27. Je volně šiřitelný.

ProFTPD

Aktuální verze ProFTPD je 1.2.4. Je šířen pod GNU General Public Licence.

RSYNC

Rsync je alternativou k programu rcp poskytující však mnohem více možností. Používá algoritmus poskytující velmi rychlý způsob sesynchronizování obsahu dvou vzdálených souborů. Rychlosti je dosaženo tím, že se kopírují puze ty části souboru, které se od sebe liší. Aktuální verze je 2.4.6. Rsync je šířen pod GNU General Public License.

Některé hlavní vlastnosti:

Existuje šest hlavních způsobů jak použít rsync:

Příklad:

rsync *.c foo:src/
Tento příkaz zkopíruje všechny soubory vyhovující *.c do adresáře src/ na stroj foo.

Konfigurace rsync daemona

Konfigurace je uložena v souboru /etc/rsyncd.conf jenž má stejný formát jako konfigurační soubor samby.
Příklad konfigurace:
motd file = /etc/motd
max connections = 25
syslog facility = local3

[ftp]
        comment = ftp area
        path = /home/ftp
        read only = yes
        list = yes
        uid = nobody
        gid = nobody
[tmp]
        comment = temporary file area
        path = /tmp
        read only = no
        list = yes
        hosts allow = 10.0.0.0/8 127.0.0.0/8 *.fi.muni.cz
        auth users = tridge, susan
        secrets file = /etc/rsyncd.secrets           

Odkazy