Monitorare e backuppare i cambiamenti della configurazione
Versioni Compatibili Tutte le versioni supportate di Debian |
Introduzione
In un server è fondamentale avere il completo controllo della directory /etc, dove risiedono tutti i file di configurazione del sistema.
Un metodo molto semplice, efficace e poco faticoso è utilizzare il software etckeeper. Questo software e’ una collezione di script bash che consentono di tenere sotto controllo tramite un sistema di revisione distribuito la nostra directory /etc, dove sono appunto presenti i file di configurazione della maggior parte dei nostri servizi in Linux.
Installazione
L'installazione è molto semplice:
apt-get install etckeeper bzr
Il pacchetto etckeeper si appoggia, per tenere traccia dei cambiamenti, a un software di controllo versione: possiamo scegliere quello che preferiamo tra Git, Subversion, Bazaar, etc.
In questa guida la scelta è caduta su Bazaar, un software leggero e adatto a installazioni piccole o di singoli server.
Configurazione
Una volta installato, apriamo il file di configurazione:
# nano /etc/etckeeper/etckeeper.conf
e impostiamo il software di controllo versione che intendiamo usare:
# The VCS to use. #VCS="hg" #VCS="git" VCS="bzr" #VCS="darcs"
lasciando immodificate le altre linee del file.
Per inizializzare etckeeper lanciamo il comando:
# etckeeper init
In caso apportassimo delle modifiche al file di configurazione /etc/etckeeper/etckeeper.conf, potremo (se lo desideriamo) reinizializzare la configurazione:
# etckeeper uninit # nano /etc/etckeeper/etckeeper.conf # etckeeper init
tenendo presente che una reinizializzazione, azzera tutte le informazioni archiviate da etckeeper.
etckeeper farà il primo commit automaticamente quando verrà installato un software che modifica la directory /etc directory, ma se non vogliamo aspettare, possiamo lanciare il primo commit manualmente:
# etckeeper commit "Initial commit"
Utilizzo
Per impostazione predefinita, etckeeper effettua un commit ogni giorno.
Possiamo comunque effettuare manualmente dei commit, ad esempio dopo aver apportato delle modifiche ai file di configurazione di qualche servizio.
Supponiamo di aver modificato il file /etc/hosts. Con il comando:
# bzr status /etc/
possiamo vedere quali file sono cambiati dall'ultimo commit:
root@server1:~# bzr status /etc/ modified: hosts root@server1:~#
Possiamo quindi effettuare un nuovo commit dei file che ci interessano:
# etckeeper commit "Changed /etc/hosts"
root@server1:~# etckeeper commit "Changed /etc/hosts" Committing to: /etc/ modified hosts Committed revision 3. root@server1:~#
Ripristinare i cambiamenti
Con Bazaar possiamo tornare a una versione precedente dei file modificati. Per farlo, ci occorre conoscere il numero di versione da ripristinare.
Ad esempio:
# bzr log /etc/hosts
ci mostrerà tutte le versioni archiviate del file /etc/hosts:
root@server1:~# bzr log /etc/hosts ------------------------------------------------------------ revno: 5 committer: root <root@server1.example.com.example.com> branch nick: server1.example.com /etc repository timestamp: Tue 2011-07-12 17:00:22 +0200 message: Changed /etc/hosts ------------------------------------------------------------ revno: 4 committer: root <root@server1.example.com.example.com> branch nick: server1.example.com /etc repository timestamp: Tue 2011-07-12 16:59:03 +0200 message: Changed /etc/hosts ------------------------------------------------------------ revno: 3 committer: root <root@server1.example.com.example.com> branch nick: server1.example.com /etc repository timestamp: Tue 2011-07-12 16:45:21 +0200 message: Changed /etc/hosts ------------------------------------------------------------ revno: 1 committer: root <root@server1.example.com.example.com> branch nick: server1.example.com /etc repository timestamp: Tue 2011-07-12 16:43:39 +0200 message: saving uncommitted changes in /etc prior to apt run root@server1:~#
Il comando:
# bzr log /etc
ci mostrerà le versioni dell'intera directory /etc:
root@server1:~# bzr log /etc ------------------------------------------------------------ revno: 5 committer: root <root@server1.example.com.example.com> branch nick: server1.example.com /etc repository timestamp: Tue 2011-07-12 17:00:22 +0200 message: Changed /etc/hosts ------------------------------------------------------------ revno: 4 committer: root <root@server1.example.com.example.com> branch nick: server1.example.com /etc repository timestamp: Tue 2011-07-12 16:59:03 +0200 message: Changed /etc/hosts ------------------------------------------------------------ revno: 3 committer: root <root@server1.example.com.example.com> branch nick: server1.example.com /etc repository timestamp: Tue 2011-07-12 16:45:21 +0200 message: Changed /etc/hosts ------------------------------------------------------------ revno: 2 committer: root <root@server1.example.com> branch nick: server1.example.com /etc repository timestamp: Tue 2011-07-12 16:43:50 +0200 message: committing changes in /etc after apt run Package changes: +fail2ban 0.8.4-3 ------------------------------------------------------------ revno: 1 committer: root <root@server1.example.com.example.com> branch nick: server1.example.com /etc repository timestamp: Tue 2011-07-12 16:43:39 +0200 message: saving uncommitted changes in /etc prior to apt run root@server1:~#
Per ripristinare il file /etc/hosts alla versione 3 occorrre:
# bzr revert --revision 3 /etc/hosts
Se vogliamo ripristinare l'intera directory//etc alla versione 2:
# bzr revert --revision 2 /etc
Monitorare i pacchetti installati
Possiamo aggiungere a etckeeper anche la lista dei pacchetti installati nel sistema, utilizzando un piccolo script:
dpkg --get-selections > /etc/package.list cp /etc/apt/sources.list /etc/sources.list apt-key exportall > /etc/Repo.keys
Inserito in cron, questo script creerà una lista aggiornata dei pacchetti installati nel sistema, che sarà poi inserita nel controllo di versione di etckeeper.
Potremo ripristinare le modifiche con:
apt-key add /etc/Repo.keys cp ~/sources.list /etc/apt/sources.list apt-get update apt-get install dselect dpkg --set-selections < /etc/package.list apt-get dselect-upgrade -y