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§ion=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