Come creare un server di backup rsync over ssh

Transcript

Come creare un server di backup rsync over ssh
Sistemisti Indipendenti.ORG
http://www.sistemistiindipendenti.org
e-mail: [email protected]
RSYNC e la sincronizzazione dei dati
Introduzione
Questo breve documento intende spiegare come effettuare la sincronizzazione dei dati tra due
sistemi, supponendo un sistema in produzione (master) ed uno in copia (slave).
Lo strumento scelto è ovviamente il “mitico” rsync, presente di default su numerosi sistemi
Unix e GNU/Linux e funzionante anche su sistemi Win32.
La sua home
• http://optics.ph.unimelb.edu.au/help/rsync/rsync_pc1.html#install
Vedremo come è semplice sincronizzare e mantenere in questo modo allineati i dati di due
sistemi e subito dopo come creare un vero e proprio repository per dati (rsync server),
accessibile via rete da sistemi diversi dotati del client rsync.
Requisiti
Per mettere in piedi il sistema sono necessari
•
•
due linux box (uno master e uno slave per la copia)
rsync ed ssh installati su entrambi i sistemi
Il sistema si basa dunque su rsync in abbinata a ssh per lo spostamento e la cifratura dei
dati.
Ma come funziona?
Questa è la sua sintassi:
rsync [<opzioni>] <sorgente> <destinazione>
rsync è dunque un programma che si occupa di mantenere allineati una destinazione con una
sorgente, utilizzando per questo parametri caratteristici dei file de delle directory contenuti,
come data, dimensioni, MD5, ecc.
Per effettuare la connessione utilizza in genere rsh, oppure se specificato, un'altra shell come
ssh.
Procedura
Il servizio si appoggia su rsync utilizzando la metodologia di copia/sincronizzazione dati che
coinvolge due elaboratori differenti, su cui deve essere installato il software rsync.
Il trasferimento dei dati avviene attraverso ssh, al posto di rsh, sconsigliato perché meno
sicuro, con i dati che transitano in chiaro.
Come detto, nel nostro caso useremo rsync in accoppiata con ssh, avendo cura come prima
cosa di rendere possibile la connessione tra i sistemi attraverso ssh senza l'ausilio delle
password ma inserendo nel database degli host autorizzati file identity.pub necessari.
Sistemisti Indipendenti.ORG
Sistemisti Indipendenti.ORG
http://www.sistemistiindipendenti.org
e-mail: [email protected]
Ipotizziamo di avere due host, uno che chiameremo HOST_A (master - sorgente) che è quello
che contiene i dati che vogliamo copiare su un sistema che potremmo definire slave e che
chiameremo per comodità HOST_B (slave – destinazione).
•
Per poter spostare i dati attraverso il canale ssh avremo bisogno che nel file
authoryzed.keys dell’Host A sia importata la chiave dell’Host B, in modo che quest’ultimo
venga riconosciuto attraverso e di essa e null’altro e gli venga pertanto concesso l’accesso.
Procedura
Scambiare le chiavi tra i sistemi, usando un canale protetto, meglio con uno user ad hoc,
non root se possibile.
Sull’Host B digitare:
ssh-keygen –t rsa
scp id_rsa.pub root@host_a:/tmp
Sull’Host A
touch authorized_keys
cat /tmp/id_rsa.pub >>authorized_keys
•
A questo punto identifichiamo quali file vogliamo prima copiare e poi mantenere
sincronizzati (selezione delle directory da sincronizzare)
Faccio un esempio pratico e ipotizziamo di voler effettuare una copia di queste directory:
/etc
/home
/var/lib/apache/htdocs
/dati
•
Script di Sincronizzazione da eseguire a intervalli regolari sull’HOST B
#! /bin/sh
echo "Sincronizza /etc"
rsync -avupogz -e ssh HOST_A:/etc /etc
echo "Sincronizza home directory"
rsync -avupogz -e ssh HOST_A:/home /home
echo "Sincronizza Web"
rsync -avupogz -e ssh HOST_A:/var/lib/apache /var/lib/apache
echo "Sincronizza Posta"
rsync -avupogz -e ssh HOST_A:/var/spool/mail /var/spool/mail
N.B. Aggiungere tutte le directory necessarie, ad esempio quelle esportate in rete via Samba o
in altro modo
Questa operazione è semplice ed intuitiva e lo script generato può essere eseguito ad intervalli
regolari attraverso la crontab.
La procedura non richiede password e l’autenticazione avviene tramite la chiave
precedentemente importata:
Esempio:
Sistemisti Indipendenti.ORG
Sistemisti Indipendenti.ORG
http://www.sistemistiindipendenti.org
e-mail: [email protected]
#/root/sincro
Sincronizza /home
building file list ... done
wrote 204 bytes read 20 bytes 448.00 bytes/sec
total size is 734 speedup is 3.28
Sincronizzazione di una risorsa samba condivisa
Spesso può essere utile avere due directory perfettamente sincronizzate. Ovviamente questo
strumento si presta bene solo a mantenere archivi con sincronizzazioni monodirezionali e può
considerarsi un ottimo strumento di backup.
Vediamo una procedura in pratica, che richiede sul sistema, samba, rsync e ssh:
Predisposizione filesystem
mkdir /sincro
Configurazione samba
[sincro]
comment = sincro
path = /sincro
valid users = paolo
public = no
writable = yes
printable = no
create mask = 0765
force users= root
Impostazione della sincronizzazione
#sincro from HOST_B to HOST_A
echo "Sincronizza /sincro"
rsync –avupogz -e ssh HOST_A:/sincro /
Sincronizzazione date
E’ bene mantenere le date sincronizzate sui sistemi, visto che rsync si appoggia anche alle
modifiche di data dei file per effettuare gli aggiornamenti.
Eseguire regolarmente
ntpdate time.ien.it
Spiegazione Opzioni utilizzate
Vediamo il significato delle opzioni di rsync utilizzate:
-a, --archive
E’ l’opzione fondamentale per poter ottenere due archivi allineati. Equivale alla somma delle
opzioni –rlptgoD.
Conviene sempre specificarla, onde evitare di complicare troppo il nostro comando. Nei casi
sopra specificati, alcune opzioni (come opg) sono ripetute solo per poterne spiegare il
significato. Si tratta pertanto di opzioni ridondanti.
Sistemisti Indipendenti.ORG
Sistemisti Indipendenti.ORG
http://www.sistemistiindipendenti.org
e-mail: [email protected]
-v | --verbose
Aumenta il livello di dettaglio dell’operazioni, aiuta in caso di problemi
-u | --update
Questa opzione può essere molto utile perché
evita l'aggiornamento di file che nella
destinazione risultano avere una data di modifica più recente di quella dei file di origine
corrispondenti.
Si può utilizzare nel caso in cui anche i file nella destinazione vengano modificati
(sincronizzazione bidirezionale)
-p | --perms
Consente la riproduzione fedele dei permessi dei file di origine.
-o | --owner
Siccome rsync viene spesso utilizzato dall'utente root, consente di mantenere per i file copiati il
proprietario che aveva in origine. Si usa in genere abbinata all’opzione –p.
-g | --group
Siccome rsync viene spesso utilizzato dall'utente root, consente di mantenere per i file copiati il
gruppo che aveva in origine. Si usa in genere abbinata all’opzione –p.
-z | --compress
Questa opzione consente di risparmiare banda ma di aumentare l’uso delle risorse del sistema
infatti comprime i dati prima di trasferirli.
-e | --rsh <comando>
Permette di specificare quale programma utilizzare come shell per l'accesso remoto. In genere
viene usata rsh, ma nel nostro caso viene utilizzato ssh.
Altre Opzioni utilizzabili
-c | --checksum
Utilizza per il controllo un codice di controllo più grande di quello utilizzato di default. In questo
modo le operazioni di controllo origine-destinazione sono più accurate ma più lente.
-r | --recursive
Effettua la copia ricorsiva delle directory, qundi copia anche le sottodirectory.
--delete
Questa opzione è sicuramente degna di nota, sia per la sua utilità che per la sua pericolosità.
Infatti permette di cancellare i file nella destinazione che non si trovano nell'origine. E’
un’opzione pericolosa da usare con cautela, ma che può aiutare a mantenere “pulito” il server
di copia, da cui verrebbero rimossi documenti vecchi non più utilizzati dagli utenti sul server
originale. Infatti è da far notare come con questo sistema si arrivi sempre ad avere sul sistema
in copia una quantità di file vecchi e non più necessari (in genere), che possono per l’appunto
essere rimossi attraverso questa opzione.
Visto il rischio insito nell’uso di questa opzione, la cancellazione dei file non presenti nell’origine
avviene solo nel caso in cui le directory sia specificatamente indicate nell'origine.
-n | --dry-run
Consente di simulare il comando senza che venga realmente effettuato
Sistemisti Indipendenti.ORG
Sistemisti Indipendenti.ORG
http://www.sistemistiindipendenti.org
e-mail: [email protected]
-t | --times
Utilizzato per riprodurre in modo preciso la data di modifica dei file.
-D, --devices
Consnete di preservare i devices. La può usare solo l’utente root.
Per tutte le opzioni di rsync (sono davvero tante) vi consiglio un bel man rsync
Rsync repository: rsync server
In questo caso viene utilizzato rsync come demone, per consentire accessi remoti autenticati a
dei repository contenenti dati.
Per prima cosa occorre configurare rsync attraverso il suo file rsyncd.conf
Configurazione di rsyncd.conf
/etc/rsyncd.conf
#Opzioni generali
uid = nobody
gid = nobody
use chroot = no
max connections = 4
syslog facility = local5
pid file = /var/run/rsyncd.pid
#Condivisioni
[ftp]
path = /home/ftp
comment = Area FTP (Dimensione ~ 1 GB)
[http]
path = /htdir/htdocs
comment = Area HTTP (Dimensione ~ 100 MB)
hosts allow= 192.168.0.
list= false
[sincro]
path = /sincro
comment = Area Dati (Dimensione ~ 500 MB)
auth users = paolo, marco
secrets file = /etc/rsyncd.secrets
read only = yes
[software]
path = /software
comment = Area Software (Dimensione ~ 5 GB)
Il file rsyncd.secrets avrà un aspetto simile a questo con la sintassi user:password
Sistemisti Indipendenti.ORG
Sistemisti Indipendenti.ORG
http://www.sistemistiindipendenti.org
e-mail: [email protected]
paolo:test
marco:prova
Gli utenti creati non devono necessariamente essere utenti di sistema. L’importante è che
questo file sia in sola lettura e scrittura per l’utente root onde evitare possibili alterazioni.
Se queste opzioni non venogno specificate l’accesso al repository rsync è libero per tutti gli
utenti e viene definito "anonymous rsync".
Per tutte le condivisioni per cui non viene specificata la direttiva auth user l’accesso è libero di
tipo anonymous.
Ma vediamo nel dettaglio alcuni parametri da impostare in rsyncd.conf per controllare il server
rsync.
•
•
•
•
•
•
•
•
•
•
[condivisione] e' il nome della condivisione rsync a cui gli utenti potranno aver accesso
path e' il percorso locale della condivisione;
comment: aggiunge una descrizione per la risorsa condivisa
read only: consente di impostare la protezione per i file dalla scrittura (va impostata a
yes);
uid e gid: permetto no di specificare l’utente ed il gruppo con cui rsync accede al
filesystem;
hosts allow consente di specificare gli IP da cui è possibile connettersi al server rsync.
Aumenta il livello di controllo del sistema
list e' un opzione che consente di impedire di visualizzare alcune condivisioni disponibili
sul server rsync, va pertanto impostata a false.
L’opzione use chroot consente di specificare se il nostro server per motivi di sicurezza è
stato posto in un ambiente di tipo chroot.
Anche l’opzione max connections ha un impatto sulla sicurezza oltrechè sulle prestazioni
limitando il numero massimo di connessioni contemporanee.
Con syslog facility possiamo indicare il livello di verbosity che troveremo nel file syslog
dove verranno riportate tutte le operazioni effettuate ed i tentativi di connessione.
Tutte queste opzioni sono specificabili per la condivisione singola o per tutte le condivisioni se
impostate nella sezione globale. Molto dipende da come vogliamo gestire il server e gli accessi.
Per tutte le altre opzioni fate un bel man rsyncd.conf.
Metodi di esecuzione del server
Il server rsync può essere eseguito come inetd o standalone, molto dipende dall’uso che se ne
fa, secondo la nota regola che per un utilizzo intensivo con accessi continui è meglio eseguirlo
in modalità standalone, mentre nel caso di accessi sporadici, la modalità inetd sarà quella da
preferire.
Server inetd
rsync
873/tcp
rsync stream tcp
nowait root
/usr/bin/rsync rsyncd –daemon
Server standalone
rsync --daemon --config=/etc/rsyncd.conf
Uso del Client rsync
Sistemisti Indipendenti.ORG
Sistemisti Indipendenti.ORG
http://www.sistemistiindipendenti.org
e-mail: [email protected]
Ovviamente il comando rsync deve essere usato anche per prelevare i file e sincronizzare i
diversi repository.
La sintassi standard nel caso di connessioni client rsync verso server rsync è questa:
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
Esempi
Effettuare il browsing del repository per vedere quali sono le risorse condivise:
rsync -avz rsync://user@host/
ftp
Area FTP (Dimensione ~ 1 GB)
http
Area HTTP (Dimensione ~ 100 MB)
sincro
Area Dati (Dimensione ~ 500 MB)
software
Area Software (Dimensione ~ 5 GB)
Copiare il file dall’host remoto al nostro host locale
rsync -avz rsync://paolo@rsync_server/sincro /tmp/sincro
Aggiungendo l’opzione –e con la shell ssh otterremo la cifratura della sessione aumentando
notevolmente la sicurezza.
rsync -avz -e ssh rsync://paolo@ rsync_server /sincro /tmp/sincro
Note
Per chi non lo sapesse rsync funziona anche su Win grazie alla librerie cygwin.dll e può quindi
essere usato anche da sistemi con sistemi operativi non unix.
Maggiori informazioni ed il pacchetto per l’installazione su win sono disponibili a questo
indirizzo:
•
http://optics.ph.unimelb.edu.au/help/rsync/rsync_pc1.html#install
Inoltre è molto supportato, si trovano programmi, scripts ed interfacce per automatizzare le
operazioni di sincronia e backup via rete.
Basta andare su Freshmeat per accorgersene:
• http://freshmeat.net/search/?q=rsync&section=projects
Io lo considero una valida alternativa a costosi dispositivi di backup, basi pensare ai costi bassi
dei dischi rigidi oggi, anche quelli con capienza di centinaia di GB.
Effettuare una sincronizzazione di dati, anche più volte al giorno e di volumi significativi
richiede poco tempo, specie su reti locali a 100 Mb.
E’ chiaro che comunque non sostituisce una vera procedura di backup, che come la legge e la
letteratura ci ricorda deve consentirci di separare l’archivio dal sistema e riporlo in un luogo
protetto ed accessibile solo alle persone autorizzate.
Diciamo che come metodo si può affiancare ad una procedura di backup tradizionale su nastro,
avendo il grande vantaggio di consentire un ripristino immediato dei dati, con una procedura di
sincronizzazione inversa.
Doc: rsync.pdf
Dott. Paolo PAVAN [Netlink Sas]– [email protected]
Sistemisti Indipendenti.ORG
Sistemisti Indipendenti.ORG
http://www.sistemistiindipendenti.org
e-mail: [email protected]
Data: 2003/2004
Note finali
Il presente documento è a semplice scopo divulgativo
L’autore non si assume la responsabilità di eventuali danni diretti o indiretti derivanti dall'uso dei programmi, o
dall’applicazione delle configurazioni menzionate nel seguente articolo
I marchi citati sono di proprietà dei rispettivi proprietari e sono stati utilizzati solo a scopo didattico o divulgativo.
L’uso o il riutilizzo del presente articolo è liberamente consentito per scopi didattici o informativi previa citazione
della fonte
Sono possibili errori o imprecisioni, segnalatemele a [email protected]
Chi volesse integrare il presente documento, può scrivere a [email protected].
Sistemisti Indipendenti.ORG