File Transfer Protocol (FTP) je standardním protokolem používaným pro přenos souborů. Slouží pro přenos souborů mezi serverem a klientem (a to v obou směrech). FTP je protokolem urceným čistě pro přenos souborů, v tom se odlišuje například od Network File System (NFS), což je protokol, který umožňuje po síti přimountovat vzdálený disk a pracovat s ním jako s lokálním diskem. Protokol FTP byl vytvořen v roce 1971 na M.I.T a je definován v několika RFC dokumentech. Poslední definice je RFC 959 z roku 1985, která je platná dodnes. Doplňující RFC 1579 (Firewall-Friendly FTP) a 2228 (FTP Security Extensions).
ObsahPoužitý protokol je stavový. Klient naváže se serverem řídicí spojení, které je udržováno po celou dobu trvání sezení. Server klienta registruje a pamatuje si o něm řadu informací - ve kterém adresáři se momentálně nachází, jaký režim přenosu má nastaven a podobně. Řídicí spojení je jednoúčelové a slouží výlučně k výměně příkazů a odpovědí mezi oběma stranami. Veškeré informace, které jím procházejí, jsou textové, jak je v Internetu zvykem. Pro datové přenosy se navazují nová (datová) spojení. Jsou jednorázová. Okamžitě po přenesení souboru nebo výpisu adresáře se datové spojení uzavře. Konec seance (vyvolaný ve většině FTP klientů příkazem quit) vlastně znamená ukončení řídicího spojení a tím pádem zapomenutí veškerých stavových informací na straně serveru. Při příštím přihlášení začíná klient znovu s čistým stolem.
Používané porty:Základní model FTP (standardní klient-server komunikace):
------------- |/---------\| || User || -------- ||Interface|<--->| User | |\----^----/| -------- ---------- | | | |/------\| FTP Commands |/----V----\| ||Server|<---------------->| User || || PI || FTP Replies || PI || |\--^---/| |\----^----/| | | | | | | -------- |/--V---\| Data |/----V----\| -------- | File |<--->|Server|<---------------->| User |<--->| File | |System| || DTP || Connection || DTP || |System| -------- |\------/| |\---------/| -------- ---------- ------------- Server-FTP USER-FTP
FXP (File eXchange Protocol) dovoluje kopírovat soubory z jednoho FTP serveru na druhý. Tento způsob přenosu však není podporován všemi FTP servery.
Model pro server-server komunikaci:
Control ------------ Control ---------->| User-FTP |<----------- | | User-PI | | | | "C" | | V ------------ V -------------- -------------- | Server-FTP | Data Connection | Server-FTP | | "A" |<---------------------->| "B" | -------------- Port (A) Port (B) --------------
Je dobré si uvědomovat, že příkazy FTP (které procházejí řídicím spojením) nejsou totožné s příkazy FTP klienta. Například příkaz pro výpis seznamu souborů v aktuálním adresáři vyvolá FTP příkaz LIST, avšak v průměrném klientovi se zadává uživatelským příkazem dir. Klientský program totiž obsahuje jakýsi vlastní interpret uživatelských příkazů.
Díky tomu si každý klient může definovat svou vlastní sadu příkazů, kterými bude komunikovat s uživatelem. Ty pak převádí na standardizované interní příkazy FTP.
Zde jsou uvedeny některé příkazy, které může klient užít při komunikaci se serverem:
QUIT - ukončí spojení
CWD - změní aktuální adresář
PORT - specifikace datového portu
TYPE - způsob reprezentace dat
RETR/STOR - přenos dat
ABOR - přerušení předchozího FTP příkazu
DELE - smazání souboru na serveru
MKD - vytvoření adresáře
PWD - výpis aktuálního adresáře
LIST - výpis obsahu adresáře
SITE - spuštění dalších služeb (týkajících se FTP serveru)
STAT - výpis stavových informací
HELP - nápověda
Rozlišujeme dva typy způsobu navázání spojení - aktivní a pasivní.
V obou variantách se nejdříve klient připojí na FTP server na port 21, tím se ustanoví řídící spojení. Nyní je však třeba ještě navázat datové spojení, toto spojení lze vytvořit dvěma způsoby:
Po navázání spojení čeká FTP server na zadání uživatelského jména a hesla (pomocí příkazů USER a PASS). Přistupujeme-li na anonymní FTP server, takový server pak většinou umožňuje procházet pouze určitou část svého adresářového stromu, do které se z bezpečnostních důvodů FTP server chroot()uje. Tento strom zpravidla obsahuje adresáře /bin, /etc a /lib. Soubory ke stažení se většinou nalézají v adresáři /pub. Důvodem, proč zde existují tyto adresáře, je to, že FTP démon spouští pro různé příkazy různé externí programy, které ovšem musí být přístupné a proto musí být umístěny někde v chrootovaném stromu. Do adresáře /bin lze umístit také další programy, které pak může uživatel spouštět pomocí přikazu SITE ze svého FTP klienta. (např.: FTP RedHatu mívají příkaz RPM, který dovoluje uživatelům dotazovat se na RPM balíčky umístěné na daném serveru.) Některé FTP servery pracují mírně odlišně. Například dovolují vytvářet uživatelské účty nezávislé na ostatních systémových účtech - tedy účty určené čistě pro FTP. Jiné servery (např.: ProFTPD a NcFTPd) zase mají vestavěné příkazy pro výpis obsahu adresáře a nepotřebují tedy specialní chrootovanou stromovou strukturu. Pokročilejší FTP servery (např.: ProFTPd) podporují provozováních takzvaných virtuálních FTP serverů, což nám dovoluje mít na jednom počítači zřízeno několik různých FTP serverů.
ObsahUživatelské FTP bylo původně zamýšleno jako služba pro řádné uživatele. Mělo jim dát možnost přenášet například datové soubory z počítače, na kterém byly vytvořeny, na jiný počítač, kde dojde k jejich dalšímu zpracování. Proto je přístup ke službě FTP chráněn uživatelským jménem a heslem. V případě Unixu se heslo bere ze standardní systémové databáze /etc/passwd a je tudíž totožné s běžným přístupovým heslem. Postupem času se přišlo na to, že některé informace by mohly být vystaveny zcela veřejně a zpřístupněny komukoli. Objevilo se anonymní FTP.
Anonymní FTP server nabízí kromě standardních "plnohodnotných" uživatelů (chráněných heslem) navíc ještě uživatele anonymního, umožňujícího přístup k veřejné části archivu. Zažilo se používat pro něj jméno anonymous nebo ftp. Některé systémy pro tohoto uživatele nepožadují žádné heslo, u ostatních může být v podstatě libovolné. Opět dle konvence slouží jako heslo elektronická adresa přihlásivšího se uživatele. Z anonymního FTP se stal standardní nástroj pro distribuci volně šiřitelných informací v Internetu.
Několik rad při zprovozňování anonymního ftp:
Doporučuje se, aby byl anonymní FTP server umístěn v samostatné diskové oblasti (nebo na samostatném disku).
Umístění FTP serveru v samostatné oblasti přináší dvě důležité výhody:
Pakliže používáme FTP server, který spouští pro vykonávání FTP příkazů externí programy, měli bychom dbát na to, aby žádný spustitelný program (kopie programu ls, tar, gzip, apod.), který musí být uložen v adresáři ftp-chroot: /bin nebyl vlastněný ani zapisovatelný pro anonymního uživatele.
ObsahFTP a bezpečnost jsou dva pojmy, které nejdou moc dohromady. FTP protokol není bezpečný a neměl by se používat na nic jiného než na anonymní přístup. Bohužel realita je jiná a FTP se stále v hojné míře používá k autorizovaným přístupům.
Proč je FTP nebezpečné? Je to dáno dobou, ve které protokol vznikl. V roce 1971 byla síť Internet (tehdy ARPANET) relativně bezpečná, byla to akademická/vojenská síť, kde si všichni uživatelé navzájem mohli důvěřovat, proto se při návrhu FTP protokolu hledělo spíše k efektivnosti než k bezpečnosti. Na druhou stranu má FTP unikátní vlastnosti, které u nových protokolů nenajdeme.
Bezpečnostní problémy lze rozdělit do následujících kategorii, viz. níže:
ProFTPD je jeden z nejrozšířenějších FTP serverů. Byl vyvíjen jako patch pro WU-FTP, ze kterého se nakonec stal samostatný produkt. Oproti WU-FTPD je bezpečnější (alespoň co se týče počtu security-patchů) a jeho další výhodou je snadná konfigurace podobná www serveru Apache.
Základní vlastnosti:
ProFTPD lze provozovat ve dvou režimech a to buď jako samostatný server nebo jako proces spouštěný z internet super-server démona pokaždé, když přijde požadavek na FTP spojení. My si zde ukážeme instalaci pro variantu samostatného serveru. Verze pro samostatný server je distribuována v balíčku s názvem např.: proftpd-1.2.9-7.i386.rpm pro ProFTPD verze 1.2.9-7. Po stažení balík nainstalujeme:
rpm -i proftpd-1.2.9-7.i386.rpm
Kromě FTP démona se nainstalují i tyto programy:
Vlastní démon se potom nainstaluje do /usr/sbin/proftpd. Pakliže ProFTPD běží jako samostatný démon a dostane signál SIGHUP, načte znovu svůj konfigurační soubor. ProFTPD nikdy nespouští žádný externí program.
ObsahProFTPD čte svou konfiguraci ze souboru /etc/proftpd.conf, který je svou strukturou podobný configuračnímu souboru www serveru Apache. Kromě této "globální" konfigurace je také možné specifikovat, jak se má server chovat v jednotlivých adresářích pomocí souboru .ftpaccess v daném adresáři. V souboru /etc/proftpd.conf se konfigurace nastavuje pomocí direktiv. Nejprve se nastavují základní vlastnosti serveru a potom můžeme pomocí různých sekcí nastavovat chování serveru ve speciálních případech.
V sekci <Global> lze dodefinovat některé základní vlastnosti celého FTP serveru. Jestliže direktivy uvedené v této sekci přepíšeme v jiné sekci, např. <Anonymous>, na jiné parametry, tak tyto nové parametry budou mít v dané sekci přednost před těmi globálními.
V sekci <Anonymous> se definuje základní konfigurace anonymního FTP serveru. Implicitně se server chroot()uje do uvedeného adresáře, jako login požaduje uvedené uživatelské jméno a jako heslo e-mailovou adresu.
Sekce <Directory> slouží pro definování specifických vlastností uvedeného adresáře. Lze nastavovat čtení, zapisování do adresáře, přístupová práva k souborům, atd.
Sekce <Limit> se používá pro stanovení omezení kdo a jaké příkazy, nebo skupiny příkazů se mohou používat.
A poslední sekcí je <VirtualHost> pomocí které lze vytvořit a nakonfigurovat virtuální FTP server.
Příklad konfiguračního souboru:#jmeno serveru ServerName "My ProFTPD server" #typ serveru (inetd/standalone) ServerType standalone #defaultni FTP port Port 21 #standartni umaska, tak aby nove adresare nebyly zapisovatelne pro group a others Umask 022 #nasteveni timeoutu TimeoutLogin 120 TimeoutIdle 600 TimeoutNoTransfer 900 TimeoutStalled 3600 #maximalni pocet potomku (funguje jen ve stadnalone modu) MaxInstances 30 #uzivatel a skupina, pod kterymi server bezi User ftp Group ftp #logovaci soubor TransferLog /var/spool/syslog/proftpd/xferlog.legacy #format zapisu logu LogFormat default "%h %l %u %t \"%r\" %s %b" LogFormat auth "%v [%P] %h %t \"%r\" %s" LogFormat write "%h %l %u %t \"%r\" %s %b" <Global> DisplayLogin welcome.msg DisplayFirstChdir readme # Logging #zapis pristupu k souborum/adresarum ExtendedLog /var/spool/syslog/proftpd/access.log read, write #zapis vsech prihlaseni ExtendedLog /var/spool/syslog/proftpd/auth.log AUTH auth #paranoidni logovani #ExtendedLog /var/spool/syslog/proftpd/paranoid.log ALL default </Global> #max. pocet klientu MaxClients 20 #max. pocet pokusu o prihlazeni MaxLoginAttempts 2 #povoleni klasifikace podle trid Classes on Class erigona limit 1 Class erigona ip 10.0.0.1/24 Class local limit 2 Class local ip 10.0.20.2/16 #povoleni prihlasovani pro bezne uzivatele, kteří mají v systemu ucet #pozn.: po te, co se na ftp prihlasi uzivatel, ktery ma v systemu ucet, #bezi demon pod jeho uid/gid a uz se nemuze prepnout zpet, na predchozi uid/gid <Limit LOGIN> AllowALL </Limit> #server po prihlaseni anonymniho uzivatele prenese koren sveho systemu souboru do adresare /var/ftp #tim se anonymnimu uzivateli zabrani v pristupu k souborum mimo vymezenou oblast <Anonymous /var/ftp> User ftp Group ftp UserAlias anonymous ftp RequireValidShell off AnonRequirePassword off Umask 027 <Limit WRITE> DenyAll </Limit> <Directory upload> <Limit STOR CWD> AllowAll </Limit> <Limit READ RMD DELE MKD> DenyAll </Limit> </Directory> </Anonymous>
Další užitečné volby, např.:
<Limit LOGIN> Order allow, deny Allow from *.fi.muni.cz Deny from all </Limit>
UseReverseDNS off
<Directory /*> AllowOverwrite on </Directory>
rsync je nástroj pro synchronizaci větších archívů mezi počítači v síti. Je časově výhodnější i spolehlivější než ostatní nástroje jako je perlový skript mirror (nemluvě o přenosu pomocí protokolu rcp). Všechny rozsáhlejší ftp servery pracují také s protokolem rsync. Program rsync je v balíčku rsync. Pomocí rsync lze také opravovat větší soubory, typicky iso obrazy kompaktních disků, u kterých nesouhlasí kontrolní součet (jen je použit algoritmus MD4 místo MD5), protože se místo celých 650 MB přenesou jenom nezbytně nutné části souboru, v průměru o dva řády menší velikosti. Tohoto chování nelze dosáhnout ani funkcí reget protokolu ftp, protože se přenáší část souboru od nějaké vzdálenosti od počátku a chybný přenos vždy detekovat nelze.
Obsahrsync používá stejný binární soubor pro spouštění démona (rsync serveru) i pro spouštění klienta přistupujícího k serveru. Spuštění serveru se provádí příkazem rsync --daemon a můžeme jej spouštět jako samostatného démona nebo z internet super-server démona. V druhém případě je potřeba do /etc/services přidat např. rsync 873/tcp. Ke konfiguraci slouží soubor /etc/rsyncd.conf.
Soubor se skládá z modulů a parametrů. Modul začíná svým jménem zapsaným jako [module_name] a končí tam, kde začíná nový modul. Prametry se zapisují ve tvaru 'name = value'. Před definicemi modulů se uvádí některé parametry, které nastavují globální chování rsync serveru.
Příklad konfiguračního souboru:
#uzivatel a skupina pod kterou bezi uid = rsync gid = rsync #nechroot()uje se use chroot = no #maximalni pocet otevrenych spojeni max connections = 4 #zpusob logovani syslog facility = local5 #kam s pid souborem pid file = /etc/rsyncd.pid #a 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.secretskde soubor /etc/rsyncd.secrets vypadá následovne:
tridge:mypass susan:herpassObsah
K bežícímu rsync serveru lze potom přistupovat rsync klientem a provádět přenos souborů, obecně
kterýmkoliv směrem, případný upload záleží na nastavení serveru. Jedná se o
neinteraktivní přenos. Příkaz spouštějící rsync
klienta muže vypadat například následovně:
rsync
[OPTIONS] [USER@]HOST::SRC [DEST]
Příklad použití:
rsync -avHS --delete \ rsync://ftp.linux.cz/pub/linux/redhat/linux/7.1/en/iso/i386 \ /muj/adresar/iso rsync \ rsync://ftp.linux.cz/pub/linux/redhat-cz/7.1/iso/redhat-7.1cz-disk1-respin.iso \ ./redhat-7.1cz-disk1.iso
Použité přepínače:
Odkazy: