Author Archives: admin

Backup: sincronizziamo con rsync

rsync_logo

Avendo la necessità di tenere sempre una copia aggiornata dei miei dati sul PC di lavoro ho deciso di creare uno script bash che automaticamente crea una copia di backup incrementale sul mio server.

Il comando che uso è rsync, un programma che ha molte delle caratteristiche di rcp, ma con in aggiunta la possibilità di utilizzare il protocollo rsync remote-update che permette un rapido trasferimento dei file.

Ecco il mio script (backup.sh):

#!/bin/bash

COMMAND=”rsync -r -t -p -o -g -x -v –progress –delete”
SOURCE=”/home/max”
DESTINATION=”max@server.example.com:/home/max/backup”

DIR=”Documenti”
echo “$DIR”
eval $COMMAND “$SOURCE/$DIR/” “$DESTINATION/$DIR”

DIR=”.kde”
echo “$DIR”
eval $COMMAND “$SOURCE/$DIR/” “$DESTINATION/$DIR”

Il funzionamento è semplice. Ho definito innanzi tutto alcune variabili:

  • COMMAND: contiene la riga di comando per rsync con le varie opzioni
  • SOURCE: è la directory sorgente
  • DESTINATION: è la directory di destinazione, definita con il formato user@server:/destination_dir

Dopodiché è sufficiente definire la directory per la quale vogliamo effettuare il backup:

  • DIR: directory locale da sincronizzare

È possibile aggiungere più directory all’interno dello stesso script.

Rsync mette a disposizione numerose opzioni che permettono di personalizzare i backup a seconda delle proprie esigenze. Per la lista completa delle opzioni, naturalmente si farà riferimento alla pagina di manuale

man 1 rsync

Nota: per chi non lo sapesse esiste un tool grafico Grsync che rende più user friendly l’uso di questo programma.

Grsync

Una volta creato lo script sarà sufficiente renderlo eseguibile e farlo eseguire a cron a intervalli di tempo regolari e grazie all’autenticazione a chiave pubblica, lo script non chiederà la password del server ogni volta che viene eseguito.

Programmi correlati: rdiff-backup, unison

Ntpdate: Sincronizzare l'orologio di sistema

Quando è indispensabile tenere la data di sistema sempre aggiornata è consigliabile affidarsi alla sincronizzazione con un server NTP (Network Time Protocol).

In una distribuzione Debian, il comando più diffuso è ntpdate e lo installiamo con apt-get.

#apt-get install ntpdate

A questo punto il nostro sistema è automaticamente sincronizzato con il server NTP pool.ntp.org. Per modificare le impostazioni di default possiamo modificare il file /etc/default/ntpdate:

#nano /etc/default/ntpdate

È possibile lanciare il comando ntpdate specificando direttamente il server NTP a cui collegarsi:

#ntpdate 0.europe.pool.ntp.org

SSH: autenticazione con chiave pubblica

Un’alternativa alla classica autenticazione tramite password in ssh è l’utilizzo della chiave pubblica.

Ecco una breve guida che può essere utile per configurare l’accesso a un server remoto senza inserire la password.

key_diagram

Questa metodo è utlite in alcuni casi:

  • Sicurezza: previene il rischio di attacchi brute force (solo se è disabilitata l’autenticazione con password)
  • Comodità: è utile quando si utilizzano script automatici che richiedono l’accesso ad un server remoto (per esempio script di backup)

Per semplicità in questa guida mostrerò l’autenticazione di un utente da una macchina client come utente in una macchina server.
Attenzione: evitare assolutamente l’autenticazione a chiave pubblica tra due sistemi root – root.

Generazione delle chiavi RSA

Innanzi tutto assicurarsi di avere la directory .ssh nella propria home. Se non è presente la creiamo e settiamo i permessi:

client$ mkdir ~/.ssh
client$ chmod 700 ~/.ssh

Ora è necessario generare la coppia chiave privata / chiave pubblica RSA sul client:

client$ ssh-keygen -f ~/.ssh/id_rsa -t rsa
Enter passphrase (empty for no passphrase): …
Enter same passphrase again: …

Viene richiesto l’inserimento di una passphrase. Essa dovrà essere non vuota ed è consigliabile inserirne una composta da almeno 16 caratteri. Non scegliere una frase semplice e facilmente rintracciabile. È abitudine creare passphrase estratte da libri, poemi, testi di canzoni, le cui parole sono spesso intervallate da caratteri non alfabetici.

Le chiavi RSA generate si trovano ora in ~/.ssh/id_rsa per la chiave privata e ~/.ssh/id_rsa.pub per la chiave pubblica.

È buona norma proteggere tali file settando adeguati permessi:

client$ chmod go-w ~/
client$ chmod 700 ~/.ssh
client$ chmod go-rwx ~/.ssh/*

Distribuzione della chiave pubblica

La chiave pubblica precedentemente generata ~/.ssh/id_rsa.pub nel client deve essere copiata sul server nel file ~/.ssh/authorized_keys. Iniziamo a copiare la chiave pubblica nella home dell’utente del server, che si trova all’indirizzo server.example.org:

client$ scp ~/.ssh/id_rsa.pub server.example.org:

Nota: fate attenzione ai due punti “:”.

A questo punto effettuaiamo il login al server e importaiamo la chiave del client:

server$ mkdir ~/.ssh
server$ chmod 700 ~/.ssh
server$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
server$ chmod 600 ~/.ssh/authorized_keys
server$ rm ~/id_rsa.pub

Nel caso in cui si vogliano importare più chiavi pubbliche è necessario effettuare un append della chiave pubblica al file ~/.ssh/authorized_keys. Ogni chiave pubblica deve stare su una riga.

Ora possiamo effettuare la nostra connessione dal client al server senza l’inserimento della password:

client$ ssh server.example.org
Enter passphrase for key ‘~/.ssh/id_rsa’:

Ci verrà richiesta la passphrase, precedentemente scelta, per verificare l’autenticazione.

Inconveniente

Ogni volta che vogliamo effettuare un accesso al server remoto ci verrà richiesto l’inserimento della passphrase. È evidente che non è ciò che volevamo ottenere.

Un’idea comoda, ma meno sicura, consiste nell’impostare la chiave RSA senza passphrase.

Un compromesso invece consiste nell’utilizzo del comando ssh-agent, ma questo è un altro capitolo. Rimando alla guida di manuale:

$ man 1 ssh-agent

ssh-agent is a program to hold private keys used for public key authenti‐
cation (RSA, DSA). The idea is that ssh-agent is started in the begin‐
ning of an X-session or a login session, and all other windows or pro‐
grams are started as clients to the ssh-agent program. Through use of
environment variables the agent can be located and automatically used for
authentication when logging in to other machines using ssh(1).

Fonti:
http://sial.org/howto/openssh/publickey-auth/