FTP (File Transmission Protocol) je protokol typu klient/server určený pro přenos souborů mezi vzdáleným serverem a lokální stanicí. Je velmi jednoduchý a proto také velmi používaný. Tento protokol je definovaný v RFC 959. Má přiděleny 2 well-known porty: 20 (datový) a 21 (řídící). Nasledující schéma znázorňuje způsob komunikace mezi serverem a klientem:
------------- |/---------\| || User || -------- ||Interface|<--->| User | |\----^----/| -------- ---------- | | | |/------\| FTP Commands |/----V----\| ||Server|<---------------->| User || || PI || FTP Replies || PI || |\--^---/| |\----^----/| | | | | | | -------- |/--V---\| Data |/----V----\| -------- | File |<--->|Server|<---------------->| User |<--->| File | |System| || DTP || Connection || DTP || |System| -------- |\------/| |\---------/| -------- ---------- -------------PI zde znamená protocol interpreter a DTPdata transfer process.
Server poslouchá na řídícím
portu (obvykle 21), kde čeká na příchozí spojení od klienta (z nějakého vyššího
portu). Pro komunikaci klienta se serverem se používají krátké příkazy
maximálně čtyřpísmenné většinou doplněné parametrem. Server na ně odpovídá
trojciferným číslem určujícím kód odpovědi doplněným dalším popisem.
Přihlášení klienta zajišťují příkazy USER a PASS,
kterými se klient identifikuje vůči serveru.
Použité přihlašovací jméno určuje, ke kterým souborům získá klient práva.
Zvláštní postavení má přihlašovací jméno anonymous, pro které FTP démon pracuje
obvykle v chrootovaném prostředí a místo hesla požaduje emailovou adresu.Pro
přenos dat se na serveru otevře datový port (řídící-1), stejně tak na klientském
počítači.
Samotný přenost dat je realizován TCP spojením nad datovými porty příjemce a
odesílatele. Po zkončení přenosu jsou datové porty uzavřeny.
Další důležité příkazy jsou:
Funkčnost běžícího FTP serveru lze snadno ověřit npříklad telnetem na port 21. Server by měl vypsat úvodní pozdrav a čekat na další příkazy. Nalogujeme se příkazy USER login, PASS password a server by měl odpovědět kladným kódem a ohlásit User login logged in. Nyní můžeme použít například příkaz stat, který nám vypíše info o připojení a nastavení přenosu. Spojení se ukončuje příkazem QUIT.
Sekce <Global> slouží k nastavení "defaultních hodnot".
Toto nastavení lze později změnit v jednotlivých sekcích.
V sekci <Anonymous> se definuje základní konfigurace anonymního FTP
serveru. Implicitně server pracuje v chrootovaném prostředí. Jako login
použijeme "anonymous", jako heslo emailovou adresu.
V sekci <Directory> se definují přístupová práva pro uvedený adresář.
Sekce <Limit> se používá pro stanovení omezení, kdo a jaké příkazy se
mohou používat.
Sekce <VirtualHost> slouží k vytvoření a knfiguraci virtuálního FTP
serveru.
FTP Klienti
Pro komunikaci se serverem potřebujeme klientský program. Z těch
nejpoužívanějších:
FTP Servery
Naopak pro zřízení FTP serveru potřebujeme nějakého FTP démona.
ProFTPD
Základní vlastnosti:
Instalace
Instalace probíhá obvyklým
./configure
make
make install
Základní instalace však zahrnuje jen zlomek možností, které ProFTPD obshauje.
Pokud potřebujeme některý z volitelných modulů pouřijeme
./configure --with-modules=mod_name1:mod_name2
Konfigurace
ProFTPD čte své nastavení standartně z /etc/proftpd.conf. Tento soubor je velmi
podobný konfiguračnímu souboru www serveru Apache. Dělí do
několika sekcí.
ServerName "My ProFTPD server" ServerType standalone Port 21 #standartni umaska, tak aby nove adresare nebyly zapisovatelne pro group a others Umask 022 TimeoutLogin 120 TimeoutIdle 600 TimeoutNoTransfer 900 TimeoutStalled 3600 #maximalni pocet potomku (funguje jen ve stadnalone modu) MaxInstances 30 User nobody Group nogroup #koren ftp stromu DefaultRoot korenovy_adresar/ ScoreboardPath /var/run/proftpd TransferLog /var/spool/syslog/proftpd/xferlog.legacy 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" #ve sech adresarich je mozne prepisovat soubory <Directory /*> AllowOverwrite on </Directory> #neni-li receno jinak, je vsude zakazano zapisovani <Limit WRITE> dENYall </Limit> <Global> DisplayLogin welcome.msg DisplayFirstChdir readme ExtendedLog /var/spool/syslog/proftpd/access.log WRITE,READ write,read ExtendedLog /var/spool/syslog/proftpd/auth.log AUTH auth #ExtendedLog /var/spool/syslog/proftpd/paranoid.log ALL default </Global> #zakladni konfigurace anonymniho FTP serveru as jednim upload adresarem <Anonymous korenovy_adresar/pub> <Limit LOGIN> AllowAll </Limit> MaxClients 5 "Sorry, max %m users -- try again later" User ftp Group ftp UserAlias anonymous ftp <Directory uploads/*> <Limit READ> DenyAll </Limit> <Limit STOR> AllowAll </Limit> </Directory> </Anonymous> #a priklad jednoho virtualniho FTP serveru <VirtualHost ftp.virtual.cz> ServerAdmin ftp_admin@virtual.cz ServerName "Jinde FTP server" MaxLoginAttempts 2 RequireValidShell no TransferLog /var/spool/syslog/proftpd/xferlog.www MaxClients 50 DefaultServer on DefaultRoot jiny_koren/ TimeoutLogin 240 TimeoutIdle 900 TimeoutNoTransfer 1200 <Limit ALL> Order Allow,Deny Allow .evil.net, .evil2.net Allow .dangerous.net Deny ALL </Limit> #private adresar jen pro hodne kamarady :-) <Directory jiny_koren/private> <Limit ALL> AllowUser kamarad1 AllowUser kamarad2 DenyAll </Limit> </Directory> </VirtualHost>
Příkazem rsync lze spustit jak démona (volba --daemon), tak klientský program. Opět můžeme zvolit mezi spuštěním ze super-serveru inetd nebo jako stand-alone démonem. V prvním případě je nutno přidat do souboru /etc/services přidat záznam
rsync 873/tcp
K běžícímu rsync serveru se lze připojit pomocí příkazu rsync (tentokrát bez volby --daemon). Obecný příkaz pro kopírování souborů ze vzdáleného počítače může vypadat následově
rsync [OPTIONS] [USER@]HOST::SRC [DEST]Pro kopírování souborů se zachováním linků, práv a vlastníků lze použít příkaz:
rsync -avz foo:src/bar/ /tmpVolba -v (--verbose) nám vypíše více informací, -z (--compress) zajistí, že bude použita komprese a -a (--archive) dovolí zachovat přístupová práva atd.
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
Více viz rsync.samba.org