Datové archívy (FTP, rsync, ...)

Štefan Sakalík, sakalik@fi.muni.cz

Obsah

Úvod do FTP

Na začiatku internetu boli 2 typy služieb: Telnet a FTP. FTP vznikol v 1971, ešte pred TCP/IP (bežal pod NCP = Network Control Program pre ARPANET).
1972: Špecifikácia bola upravená do podoby ktorá sa začínala podobať tej dnešnej.
1980: navrhnutý pre TCP/IP. Vtedy vznikol aj TFTP, odľahčená verzia FTP pre vtedajšie nároky na výpočetnú silu.
1985: táto verzia protokolu slúži ako základ v dnešných implementáciách.
Ftp používa 2 tcp spojenia:

To, že sú tu 2 TCP kanále je dosť neobvyklé.

Módy prenosu dát:

Okrem týchto to môže byť ešte mód EBCDIC (a iné). Pri použití nebinárneho módu na binárne subory môže dôjsť k poškodeniu dát.
Moje pozorovanie: Skúšal som preniesť textový súbor binárne a ASCII. Netcat mi vypísal na terminál tie isté znaky, ale v ASCII móde som dostal 766 bajtov, v bin 747 bajtov.

Módy spojenia

Klient sa pripojí na server.
Aktívny režim:
Klient otvorí port, pošle serveru číslo portu a server sa pripojí na klienta.
Príklad komunikácie:

=== hlavné spojenie ===
> nc ftp.fi.muni.cz 21
220 ProFTPD 1.3.1 Server (Faculty of Informatics) [::ffff:147.251.48.205]
> USER anonymous
331 Anonymous login ok, send your complete email address as your password
> PASS ???
230-Hello, UNKNOWN at dionysos.fi.muni.cz!
> PWD
257 "/" is the current directory

PORT 147,251,48,39,4,0                     # 4*256 + 0 = 1024
200 PORT command successful
LIST -l
150 Opening ASCII mode data connection for file list
226 Transfer complete

=== netcat === nc -vv -l -p 1024 connect to [147.251.48.39] from odysseus.fi.muni.cz [147.251.48.205] 20 drwxr-xr-x 3 ftpadm ftpadm 56 Feb 12 2007 etc drwxr-xr-x 4 ftpadm ftpadm 4096 May 30 2007 http drwxr-xr-x 3 ftpadm ftpadm 0 Apr 13 13:36 mount drwxr-xr-x 23 ftpadm ftpadm 20480 Apr 13 05:08 pub sent 19, rcvd 243
CWD pub 250 CWD command successful PORT 147,251,48,39,4,0 200 PORT command successful RETR README.uploads 150 Opening BINARY mode data connection for README.uploads (747 bytes) 226 Transfer complete
=== netcat (2) === nc -vv -l -p 1024 ...obsah README.uploads...
Pasívny režim:
Rozdiel je v tom že klient neotvára port, ale server. Aktívny mód nefunguje pre klientov za NATom.
=== hlavné spojenie ===
...
PASV
227 Entering Passive Mode (147,251,48,205,164,98).
LIST

=== netcat (PASV) === nc -vv 147.251.48.205 42082 # 164*256+98 = 42082 odysseus.linux.cz [147.251.48.205] 42082 (?) open drwxr-xr-x 3 ftpadm ftpadm 56 Feb 12 2007 etc drwxr-xr-x 4 ftpadm ftpadm 4096 May 30 2007 http drwxr-xr-x 3 ftpadm ftpadm 0 Apr 13 13:49 mount drwxr-xr-x 23 ftpadm ftpadm 20480 Apr 13 05:08 pub sent 0, rcvd 243
Extended passive mode: čísla portov sú normálne.

Príkazy, bezpečnosť

RNFR - premenovať z
RNTO - premenovať na
APPE - append
REST - pokračovať v prerušenom downloade (nepríjemne pri ASCII móde)
TYPE - binary/text/...
USER - meno užívateľa
PASS - heslo.
Autentizácia na úrovni FTP: cez USER a PASS. Existuje anonymný pristup: USER anonymous, PASS .... pri tomto prístupe servre chcú mailovú adresu ale väčšinou tam môžme napísať čo chceme. Anonymným užívateľom obecne nechceme dávať možnosť uploadovať dáta.
FTP je nešifrovaný protokol, preto pridávame daľšiu vrstvu kvôli bezpečnosti: FTPS = FTP over SSL (alebo TLS).
Existujú aj iné varianty prenosu: SFTP = SSH ftp. Nemá nič spoločné s FTP.
FTP over SSH = tunelované FTP cez SSH.

Zrovanie softvéru

Konfigurácia ProFTPD (proftpd.conf)

Je podobná apachu.
	ServerName			"Moj FTP server"
	ServerIdent			on "FTP Server pripraveny."
	ServerType			inetd
	DefaultServer			on
	Port				21
	Umask				022
	MaxInstances			30
	User				nobody
	Group				nobody
	HideUser 			root

	<Limit LOGIN>
		Order allow,deny
		Allow from 192.168.0.,.acme.com
		Deny from all 
	</Limit>

	<Limit READ DIRS>
		IgnoreHidden on
	</Limit>

	<Directory /*>
	  AllowOverwrite                on
	</Directory>

	<Directory /etc>
	  AllowOverwrite                off
	</Directory>

	<Anonymous /home/ftp>
	  User				anonymous
	  Group				ftpanon
	  AnonRequirePassword		off 
	  MaxClients			10
	
	  # Limit WRITE everywhere in the anonymous chroot
	  <Limit WRITE>
		DenyAll
	  </Limit>
	
	</Anonymous>
Zaujímavé konfiguračné direktívy:
User, Group uid/gid pod ktorým bude proces bežať
UseFtpUsers (z wu-ftpd) v /etc/ftpusers sú uživatelia ktorí nemajú povolený prístup
RequireValidShell yesnechceme démonom povoliť ftp
Anonymousanonymný login, s User povieme kedy bude považovat login za anonymný. štandardne sa použije User anonymous
<VirtualHost adresy> IP/DNS adresy virtualných ftp serverov. Užívateľovi sa môže zdať že pod inými ip adresami (na rovnakom stroji) bežia iné ftp servre.
DefaultAddressktorý VirtualHost bude defaultný. Defaultne je to to čo povie na začiatku systém.
<IfModule mod_auth_pam.c> AuthPAM off </IfModule>vypni PAM
DefaultRoot ~ defaultne sa chrootni do uzivateľovho domovského adresára
AuthOrder mod_auth_file.c ako autentizačný modul použi iba mod_auth_file. Keby sme prihodili ďaľšie za mod_auth_file, mali by menšiu prioritu
AuthUserFile /etc/ftpd/passwd name ^ftp home !^/home pre mod_auth_file.c
MaxClientsmaximálny počet uživateľov
ServerLogkam máme logovať

Rsync

Použije sa pri pravidelnom zálohovaní. Máme 1 veľký súbor na klientovi a chceme ho uploadnúť na server. Pravdepodobné je že sa buď nezmenil vôbec, alebo sa zmenili len niektoré jeho malé časti od poslednej synchronizácie. Teda obvykle nechceme kopírovať celý takýto súbor, ale iba zmeny. Pri synchronizácii adresárov (napríklad pravidelné zálohy) nechceme vždy prenášať celý synchronizačný strom, ale iba súbory ktoré sa zmenili (alebo nové súbory). Pre rsync verzie 3 a vyššie je aj optimalizovaný prenos veľkého množstva malých súborov.

Rsync - algoritmus

Máme počítače |A| a |B|, na nich súbory A a B.

Rsync - konfigurácia

rsyncd.conf (pozn. numerické id, symlinky) :
uid = nobody
gid = nobody
use chroot = yes
max connections = 4
syslog facility = local5
pid file = /var/run/rsyncd.pid
secrets file = /etc/rsyncd.secrets

[pub]                                    # verejný adresár
        read only = yes
        list = yes
        path = /var/./pub                # chrootneme do /var
[data]
        list = yes
        auth users = nbusr
        path = /var/./data
        comment = neake data
/etc/rsyncd.secrets :
nbusr:nbusr123
V obidvoch prípadoch sa chrootneme do /var. Môžeme tam mať knižnice, ktoré nám umožnia preložit username do na UID. Je to preto, že v chrootovanom prostredí proces nemá prístup do /etc/passwd.
Príkaz pre archiváciu (rekurzívne, nekopírovať symlinky,...), verbose output, komprimuj súbory:
rsync -avz -e ssh rsync@remote.acme.com:/home/rsync/out/ /home/rsync/from_remote

Literatura