
Tag: Linux, Bash, Informatica, Sistemi Operativi, Reti.Visto 1941 volte.
Nella nostra vita informatica spesso ci capita di voler sincronizzare due directory, magari dislocate su calcolatori geograficamente distanti.
Quello che nella maggior parte dei casi accade è che, per una questione di tempo, iniziano una vera e propria copia dei file, rendendo una directory il mirror dell'altra.
Questa procedura può essere conveniente per spostamenti di piccole dimensioni, piccoli file che se anche trasferiti diverse volte, sul lungo periodo non incidono molto sulla banda utilizzata.
L'approcio risulta poco intelligente se quello che vogliamo fare è mantenere nel tempo le due directory sincrone tra loro e se i file in esse contenuti vengono modificati.
Abbiamo già parlato precedentemente di rsync come tool per i nostri backup in questo articolo, ma quello che andremo ad analizzare oggi è una variante più complessa del servizio.
Il nostro obiettivo è creare un server rsync che ci permetta di gestire la sincronizzazione tra due cartelle e l'accesso ad esse secondo delle policy predefinite.
Preparazione e installazione
ATTENZIONE: la guida è stata testata su Fedora 14/CentOS 5.5; i comandi di seguito sono relativi alla distribuzione indicata ma facilmente sostituibili con i comandi specifici della propria distribuzione.
Per poter attivare rsync in modalità servizio è ovviamente necessario avere il software installato sul computer.
Per farlo provvediamo attraverso il comando:
Code:
Una volta installato il software necessario passiamo alla fase di configurazione
Configurazione
Creiamo, se non è già esistente la cartella /etc/rsyncd con il comando
Code:
nella quale andremo a posizionare tutti i file di configurazione necessari.
Creiamo il file di configurazione generale /etc/rsyncd/rsyncd.conf come segue:
Code:
# General configuration
motd file = /etc/rsyncd/motd.rsync
read only = no
list = yes
uid = nobody
gid = nobody
log file = /var/log/rsyncd/rsyncd.log
pid file = /var/run/rsyncd.pid
# Module configuration
[all]
comment = Welcome Home ~ rsyncdserver.mydomain.net
path = /home/rsync/all
[secure]
comment = Secure Module
path = /home/rsync/secure
auth users = rsync,codiceasbarre
secrets file = /etc/rsyncd/rsyncd.secrets
#hosts allow = *.mydomain.com
#hosts deny = *
list = false
Il file è scaricabile da qui.
Commentiamo ora alcune parti del file:
~ motd: message of the day, ovvero il messaggio di benvenuto che il server mostra ai client
~ list: permette di listare i moduli
~ uid/gid: uid e guid di chi manda in esecuzione il servizio
I moduli sono le parti che rappresentano i "repository" del server.
Quello che accade con il file sopracitato, viene configurato un modulo all, fruibile da chiunque in lettura e scrittura (come definito globalmente), la cui path è /home/rsync/all.
Per quanto riguarda il modulo secure, è un modulo ad accesso esclusivo degli utenti rsync e codiceasbarre, per i quali vengono definite delle credenziali di accesso nel file /etc/rsyncd/rsyncd.secrets. Tale modulo non viene listato tra i moduli presenti sul server.
Le variabili hosts allow e hosts deny possono essere configurate in base alle proprie esigenze di sicurezza.
Creiamo ora i file accessori al servizio.
Iniziamo con il file /etc/rsyncd/motd.rsync, nel quale possiamo inserire quello che vogliamo come per esempio:
Code:
Passiamo ora al file contenente le credenziali degli utenti con accesso al modulo ristretto, ovvero al file /etc/rsyncd/rsyncd.secrets:
Code:
codiceasbarre:drowssapym
Come è facilmente intuibile il file contiene un utente per riga nel formato username:password. Il file sopraindicato specifica quindi che l'utente rsync potrà accedere al server attraverso la password mypassowrd, e l'utente codiceasbarre dovrà utilizzare la password drowssapym.
Per quanto riguarda la configurazione del servizio siamo pronti a lanciare il nostro server rsync, che ricordiamo utilizza la porta 873, attraverso il comando:
Code:
Proponiamo di seguito, per completezza, uno script di init (argomento trattato in questo post), che possiamo copiare nella cartella /etc/init.d permettendoci di gestire il servizio. Tale script è conforme alle direttive di chkconfig, quindi può essere gestito attraverso gli appositi comandi di chkconfig (vedere questo post).
Code:
# chkconfig: 345 96 55
# description: rsyncd service
# INIT SCRIPT FOR RSYNCD
RSYNC_CMD="/usr/bin/rsync"
CONFIG_FILE="/etc/rsyncd/rsyncd.conf"
PID_FILE="/var/run/rsyncd.pid"
PROG_NAME="rsyncd"
function start()
{
$RSYNC_CMD --daemon --config "$CONFIG_FILE"
sleep 3
echo -e "Rsyncd startttt[ OK ]"
}
function stop()
{
kill -9 $(cat "$PID_FILE")
rm -f "$PID_FILE"
sleep 2
echo -e "Rsyncd stopttt[ OK ]"
}
function restart()
{
stop
sleep 1
start
}
function status()
{
if [ -f "$PID_FILE" ]
then
echo "$PROG_NAME is started ($(cat $PID_FILE))"
else
echo "$PROG_NAME is stopped"
fi
}
function usage()
{
echo -e "$PROG_NAME usage:ntt$0 {start|stop|restart}"
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
usage
;;
esac
Lo script è scaricabile da qui
Utilizzo del servizio
Siamo ora pronti ad utilizzare il servizio. Se avete lasciato moduli listabili potete andare a esplorare i "repository" che avete condiviso con il seguente comando
Code:
che vi mostrerà in output la lista dei moduli listabili.
Per visionare il contenuto di ogni singolo modulo basterà aggiungere la path da visionare; per il nostro esempio:
Code:
Potrete quindi navigare all'interno del vostro modulo con il comando rsync, eseguendo l'autenticazione se necessario. Per tutti i comandi di trasferimento dati vi rimandiamo alla man page del comando rsync
($ man rsync | rsync --help).

