FTP (File Transfer Protocol) je protokol pro přenos souborů. Soubory je možné přenášet nejen ze vzdáleného počítače na lokální (nebo naopak), ale i mezi dvěma vzdálenými počítači - FXP. Oficiální specifikací je RFC959.
FTP pracuje nad TCP/IP a používá dva well-known porty: port 21 pro řídící spojení a port 20 pro spojení datové. FTP server poslouchá na portu 21, kde čeká na navázání řídícího spojení. Řídící spojení je tedy iniciováno klientem (telnet na port 21). Datové spojení se vytváří až po navázání řídícího spojení, a podle toho, kdo datové spojení otvírá, rozeznáváme:
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, používá se jako jméno uživatele obvykle "anonymous" nebo "ftp" a jako heslo se podle konvencí zadává emailová adresa. Takový server pak většinou umožňuje procházet pouze určitou část svého adresářového podstromu, do které se bezpečnostních důvodů FPT server chroot()uje.
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ý a jeho další výhodou je snadná konfigurace podobná www serveru Apache.
Zdrojové soubory nebo RPM balíky lze stáhnout buď z výše uvedené stránky nebo
z českého mirroru
ftp://ftp.its.cz/MIRRORS/ftp.proftpd.org/. Já jsem se rozhodl pro instalaci
z RPM balíku. Poslední verze serveru je 1.2.5rc1, tudíž
potřebujeme soubory proftpd-1.2.5rc1-1.i386.rpm a
proftpd-inetd-1.2.5rc1-1.i386.rpm. Ještě existuje standalone verze, která ovšem
pro nás není potřeba - nečekáme žádné masivní přenosy. Po stažení balíky
naistalujeme:
rpm -i proftpd-*
Dále smažeme soubor /etc/inetd.conf
a vytvoříme soubor /etc/xinet.d/proftpd
s tímto obsahem:
# default: on
# description: The proftpd FTP server serves FTP connections. It uses \
# normal, unencrypted usernames and passwords for authentication.
service ftp
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.proftpd
server_args =
log_on_success += DURATION USERID
log_on_failure += USERID
nice = 20
}
Vytvoříme adresář /var/ftp
pod user/group ftp/ftp, který bude sloužit jako home anonymního ftp
serveru. Pokud již nemáme, přidáme /sbin/nologin
do /etc/shells
.
Vlastní démon se potom nainstaluje do /usr/sbin/proftpd. Je možné jej spouštět z internet super-server démona pokaždé, když přijde požadavek na FTP spojení, nebo jako samostatného démona. Když ProFTPD běží jako samostatný démon a dostane signál SIGHUP, tak znovu přečte svůj konfigurační soubor. ProFTPD nikdy nespouští žádný externí program.
ProFTPD č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. Vzorovou konfiguraci serveru můžete stáhnout z pc2.
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 nobody Group nogroup #koren ftp stromu DefaultRoot korenovy_adresar/ #kam se ukladaji pid soubory ScoreboardPath /var/run/proftpd #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" #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 # Logging #zapis pristupu k souborum/adresarum ExtendedLog /var/spool/syslog/proftpd/access.log WRITE,READ write,read #zapis vsech prihlaseni ExtendedLog /var/spool/syslog/proftpd/auth.log AUTH auth #paranoidni logovani #ExtendedLog /var/spool/syslog/proftpd/paranoid.log ALL default </Global> #zakladni konfigurace anonymniho FTP serveru as jednim upload adresarem <Anonymous korenovy_adresar/pub> #prihlasit se mnohou vsichni <Limit LOGIN> AllowAll </Limit> #maximalni pocet klientu se zpravou MaxClients 5 "Sorry, max %m users -- try again later" #novy uzivatel a skupina User ftp Group ftp #klienti se prihlasuji jako "anonymous" nebo "ftp" UserAlias anonymous ftp #upload adresar ktery umoznuje jen zapisovani souboru <Directory uploads/*> <Limit READ> DenyAll </Limit> <Limit STOR> AllowAll </Limit> </Directory> #a priklad jednoho virtualniho FTP serveru </Anonymous> <VirtualHost ftp.jinde.cz> ServerAdmin ftp_admin@jinde.cz ServerName "Jinde FTP server" MaxLoginAttempts 2 RequireValidShell no TransferLog /var/spool/syslog/proftpd/xferlog.www MaxClients 50 DefaultServer on DefaultRoot jiny_koren/ #nejsme tak zli jako hlavni server :-) TimeoutLogin 240 TimeoutIdle 900 TimeoutNoTransfer 1200 #ale nemame moc radi nektere domeny <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>
Tento program slouží pro efektivní přenos souborů mezi dvěma počítači na síti. Chová se podobně jako rcp, ale poskytuje mnohem více možností. K přenosu souborů rsync používá rsync remote-update protocol, který přenos značně urychluje. Pomocí tohoto protokolu je možné přenášet jen rozdíly mezi soubory (používá se výkonný checksum-search algoritmus). rsync 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 = nobody gid = nobody #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ásledovně:
tridge:mypass susan:herpass
K běží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 souštějící rsync klienta může vypadat například následovně: rsync [OPTIONS] [USER@]HOST::SRC [DEST] (viz. man rsync).