Bacula

De wiki.debian-fr


Présentation

Ce document est basé sur une installation stable de Debian (en ce moment Squeeze) et de Bacula 5.0.2.

Son but : sauvegarde, restauration et vérification en réseau
(reste à faire)

Installation

Bacula peut utiliser les bases de données SQLite, MySql et PostGreSQL.Il suffit d'installer les paquets correspondant à votre choix.

Changer "-mysql" par "-pgsql" ou "-sqlite3" sur le paquet director et le fd.

ici je choisi MySql (MySql étant déja installé):

# aptitude install bacula-director-mysql bacula-sd-mysql bacula

Accorder les droits à bacula sur la base de données (vérifié si pas obsolète):

# mysql -u root -p
> grant all privileges on bacula.* to 'bacula'@'localhost' identified by 'bacula' ;

Créer le répertoire de sauvegarde et accorder les droits à bacula :

# mkdir /home/sauvegarde/
# chown -R bacula.bacula /home/sauvegarde
# chmod -R 660 /home/sauvegarde (---> à vérifier)

Configuration

Bacula se compose des fichiers suivants :

Le fichier générale de configuration le Director :

/etc/bacula/bacula-dir.conf

Le fichier Storage Daemon concernant le stockage des données :

/etc/bacula/bacula-sd.conf

Celui du File Daemon permettant l'accès aux données installé sur le client à sauvegarder :

/etc/bacula/bacula-fd.conf

Le fichier permettant la connexion entre la console et le directeur :

/etc/bacula/bconsole.conf

Le fichier de configuration du moniteur de ressources :

/etc/bacula/tray-monitor.conf

Ces fichiers représentent les différents services de Bacula, ils peuvent se trouver sur des machines totalement différentes.

La Console

/etc/bacula/bconsole.conf

 
'''Director''' { 
:'''Name''' = NOM_DIR <span style="color:#bd0000;">&nbsp;# le nom du director défini dans le fichier bacula-dir.conf</span>
:'''DIRport''' = 9101 <span style="color:#bd0000;"># le port d'écoute du director</span>  
:'''address''' = nom_resolu_par_dns_ou_IP <span style="color:#bd0000;"># ip ou dns du director</span>
:'''Password''' = "mdp_du_director" <span style="color:#bd0000;"># le mot de passe du director</span> 
::<span style="background-color:#cbfeff;">TLS Enable = yes </span>
::<span style="background-color:#cbfeff;">TLS Require = yes </span>
::<span style="background-color:#cbfeff;">TLS CA Certificate File = /etc/bacula/keys/ca.crt</span>
::<span style="background-color:#cbfeff;">TLS Certificate = /etc/bacula/keys/console.crt </span>
::<span style="background-color:#cbfeff;">TLS Key = /etc/bacula/keys/console.key </span> 
} 

address : Attention le nom DNS est obligatoire pour une connexion SSL penser à configurer le fichier /etc/hosts ou le serveur dns.

si vous n'utilisez pas de connexion sécurisée vous pouvez mettre une adresse ip directement.

La partie bleu permet la sécurisation des données entre le director et la console ca.crt doit être le même partout les deux autres diffèrent
pour chaque éléments de bacula.
Pour l'instant ne vous préoccupez pas de cette partie, une explication plus complète sera détaillée dans le chapitre sur la sécurisation.
Sachez juste que cela ce trouve là.
D'autres indications dans la documentation de bacula

Le File Daemon

La ressource Client (ou File Daemon) définit le nom du client (tel qu'il est utilisé par le director) ainsi que le port sur lequel le client est à l'écoute des connections du Director.

/etc/bacula/bacula-fd.conf

 
'''Director''' {
:'''Name''' = NOM_DIR <span style="color:#bd0000;">&nbsp;# le nom du director défini dans le fichier bacula-dir.conf</span>
:'''Password''' = "mdp_du_director" <span style="color:#bd0000;">&nbsp;# le mot de passe du director</span>
::<span style="background-color:#cbfeff;">TLS Enable = yes</span>
::<span style="background-color:#cbfeff;">TLS Require = yes</span>            
::<span style="background-color:#cbfeff;">TLS Verify Peer = yes</span>
::<span style="background-color:#cbfeff;">TLS Allowed CN = "directorCN"</span>
::<span style="background-color:#cbfeff;">TLS CA Certificate File = /etc/bacula/keys/ca.crt</span>
::<span style="background-color:#cbfeff;">TLS Certificate = /etc/bacula/keys/filedaemon.crt</span>
::<span style="background-color:#cbfeff;">TLS Key = /etc/bacula/keys/filedaemon.key </span>
}
 
'''Director''' {
:'''Name''' = NOM_MON <span style="color:#bd0000;">&nbsp;# le nom du director restreint défini dans le fichier bacula-dir.conf</span>
:'''Password''' = "mdp_du_director_restreint" <span style="color:#bd0000;"># son mot de passe</span>
:'''Monitor''' = yes 
}
 
'''FileDaemon''' { 
:'''Name''' = NOM_FD <span style="color:#bd0000;"># le nom du File daemon</span>
:'''FDport''' = 9102 <span style="color:#bd0000;"># son mot port d'écoute'</span>
:'''WorkingDirectory''' = /var/lib/bacula
:'''Pid Directory''' = /var/run/bacula
:'''Maximum Concurrent Jobs''' = 8 <span style="color:#bd0000;"># le nombre maximum de sauvegardes simultanées</span>
::<span style="background-color:#cbfeff;">TLS Enable = yes</span>
::<span style="background-color:#cbfeff;">TLS Require = yes</span>                                                      
::<span style="background-color:#cbfeff;">TLS CA Certificate File = /etc/bacula/keys/ca.crt</span>
::<span style="background-color:#cbfeff;">TLS Certificate = /etc/bacula/keys/filedaemon.crt</span>
::<span style="background-color:#cbfeff;">TLS Key = /etc/bacula/keys/filedaemon.key</span> 
:::<span style="background-color:#cbfeff;">PKI Signatures = Yes</span>           
:::<span style="background-color:#cbfeff;">PKI Encryption = Yes</span>            
:::<span style="background-color:#cbfeff;">PKI Keypair = "/etc/bacula/keys/client.pem"</span>    
:::<span style="background-color:#cbfeff;">PKI Master Key = "/etc/bacula/keys/master.crt"</span>
}
 
'''Messages''' { <span style="color:#bd0000;">&nbsp;# les messages sont envoyés au director</span> 
:'''Name''' = Standard
:'''director''' = NOM_DIR = all, !skipped, !restored
}
 


Working Directory : Cette directive est obligatoire et spécifie un répertoire dans lequel le File Daemon peut placer ses fichiers d'état.

Ce répertoire ne doit être utilisé que par Bacula, mais peut être partagé par d'autres daemons Bacula les définitions des noms doivent être uniques pour chaque démon.
Sur les systèmes Win32, dans certaines circonstances, vous pourriez avoir besoin de spécifier une lettre de lecteur dans le chemin de répertoire de travail spécifié.
Aussi, s'il vous plaît assurez-vous que ce répertoire est accessible en écriture par l'utilisateur SYSTEM au contraire la restauration peut échouer
(le fichier d'amorçage (bootstrap) qui est transféré vers le File Daemon du directeur est temporairement placé dans ce répertoire avant d'être transmis au Storage Daemon).

Pid Directory Cette directive est obligatoire et spécifie un répertoire dans lequel le directeur peut placer ses fichiers d'identification de processus.

Le fichier d'identification de processus est utilisé pour stopper Bacula et éviter à plusieurs instances de Bacula de fonctionner simultanément.
Cet enregistrement est nécessaire. L'expansion du shell standard de l'annuaire se fait lorsque le fichier de configuration est lu de telle sorte que des valeurs
telles que $HOME seront correctement substituées.
Typiquement, sur les systèmes Linux, vous mettrez: /var/run.Si vous n'installez pas Bacula dans les répertoires système, vous pouvez utiliser le répertoire de travail
tel que défini ci-dessus.

Pour voir toutes les possibilités du File Daemon je vous invite à lire la documentation de Bacula à ce sujet.


Le Storage Daemon

Le fichier de configuration du Storage Daemon a relativement peu de définitions de ressources. Toutefois, en raison de
la grande variation dans les médias de sauvegarde et des capacités du système, le démon de stockage doit être hautement configurable.

En conséquence, il y a un assez grand nombre de directives dans la définition des ressources de périphérique qui vous permet de définir.

toutes les caractéristiques de votre périphérique de stockage (normalement un lecteur de bande). Heureusement, avec des dispositifs

de stockage modernes, les valeurs par défaut sont suffisantes, et très peu de directives sont réellement nécessaires.

/etc/bacula/bacula-sd.conf

 
'''Storage''' {
:'''Name''' = NOM_SD <span style="color:#bd0000;">&nbsp;# Le nom du Storage Daemon</span>
:'''SDPort''' = 9103 <span style="color:#bd0000;">&nbsp;# son port d'écoute</span>
:''' WorkingDirectory''' = "/var/lib/bacula" 
:''' Pid Directory''' = "/var/run/bacula" 
:'''Maximum Concurrent Jobs''' = 8 <span style="color:#bd0000;">&nbsp;# Le nombre maximum de sauvegardes simultanées par media</span>
:'''SDAddress''' = nom_dns_ou_ip <span style="color:#bd0000;">&nbsp;# Son addresse ip ou son nom dns</span>
::<span style="background-color:#cbfeff;">TLS Enable = yes</span>
::<span style="background-color:#cbfeff;">TLS Require = yes</span>                                                      
::<span style="background-color:#cbfeff;">TLS CA Certificate File = /etc/bacula/keys/ca.crt</span>
::<span style="background-color:#cbfeff;">TLS Certificate = /etc/bacula/keys/storagedaemon.crt</span>
::<span style="background-color:#cbfeff;">TLS Key = /etc/bacula/keys/storagedaemon.key</span> 
}
 
'''Director''' {
:'''Name''' = NOM_DIR <span style="color:#bd0000;">&nbsp;# le nom du director défini dans le fichier bacula-dir.conf</span>
:'''Password''' = "mdp_du_director" <span style="color:#bd0000;">&nbsp;# et son mot de passe</span>
::<span style="background-color:#cbfeff;">TLS Enable = yes</span>
::<span style="background-color:#cbfeff;">TLS Require = yes</span>            
::<span style="background-color:#cbfeff;">TLS Verify Peer = yes</span>
::<span style="background-color:#cbfeff;">TLS Allowed CN = "directorCN"</span>                                          
::<span style="background-color:#cbfeff;">TLS CA Certificate File = /etc/bacula/keys/ca.crt</span>
::<span style="background-color:#cbfeff;">TLS Certificate = /etc/bacula/keys/storagedaemon.crt</span>
::<span style="background-color:#cbfeff;">TLS Key = /etc/bacula/keys/storagedaemon.key</span> 
}
 
'''Director''' {
:'''Name''' = NOM_MON <span style="color:#bd0000;">&nbsp;# le nom du director restreint défini dans le fichier bacula-dir.conf</span>
:'''Password''' = "mdp_du_director_restreint"
:'''Monitor''' = yes
}
 
'''Device''' { <span style="color:#bd0000;">&nbsp;# ou répertoire</span> 
:'''Name''' = Nom_Device <span style="color:#bd0000;">&nbsp;# Un nom pour l'identifier</span>
:'''Media Type''' = File <span style="color:#bd0000;">&nbsp;# Son TYPE : File, Tape, Fifo, DVD</span>
:'''Archive Device''' = /home/sauvegarde/ <span style="color:#bd0000;">&nbsp;# Son emplacement</span>
:'''LabelMedia''' = yes; <span style="color:#bd0000;">&nbsp;# Lui donne un nom</span>
:'''Random Access''' = Yes;
:'''AutomaticMount''' = yes; <span style="color:#bd0000;">&nbsp;# monte le media en automatique</span>
:'''RemovableMedia''' = no;
:'''AlwaysOpen''' = yes; <span style="color:#bd0000;">&nbsp;# Toujours accessible</span>
}
 
'''Messages''' { <span style="color:#bd0000;">&nbsp;# les messages sont envoyés au director</span> 
:'''Name''' = Standard
:'''director''' = NOM_DIR = all
}
 


Random Access : Si Oui, le périphérique est supposé être un moyen d'accès aléatoire qui prend en charge le lseek (Dvd,Usb...)

Non pour les dispositifs d'accès non-aléatoires tels que des bandes.

RemovableMedia : Si oui, cet appareil prend en charge les supports amovibles (par exemple, cassettes ou de CD).

Si Non, les médias ne peuvent pas être supprimés (par exemple, une zone de sauvegarde intermédiaire sur un disque dur).

Pour voir toutes les possibilités du Storage Daemon je vous invite à lire la documentation de Bacula à ce sujet.

Le Director

De tous les fichiers de configuration nécessaires à l'exécution de Bacula, le directeur est le plus compliqué, et celui que vous aurez besoin de modifier
le plus souvent. Afin de simplifier sa comprehension nous le séparons en plusieurs fichiers.
Pour inclure un fichier dans bacula-dir.conf, il suffit de mettre un @ devant le chemin du fichier à inclure.

@/chemin_complet/fichier

Comme toujours vous y gagneriez à lire la documentation du director.

/etc/bacula/bacula-dir.conf

 
'''Director''' {
:'''Name''' = NOM_DIR <span style="color:#bd0000;">&nbsp;# le nom du director</span>
:'''DIRport''' = 9101 <span style="color:#bd0000;">&nbsp;# son port d'écoute</span>
:'''QueryFile''' = "/etc/bacula/query.sql"
:'''WorkingDirectory''' = "/var/lib/bacula"
:'''PidDirectory''' = "/var/run/bacula"
:'''Maximum Concurrent Jobs''' = 4 <span style="color:#bd0000;">&nbsp;# Le nombre maximum de sauvegardes simultanées</span>
:'''Password''' = "mdp_du_director"
:'''Messages''' = Standard
::<span style="background-color:#cbfeff;">TLS Enable = yes</span>
::<span style="background-color:#cbfeff;">TLS Require = yes</span>            
::<span style="background-color:#cbfeff;">TLS Verify Peer = yes</span>
::<span style="background-color:#cbfeff;">TLS Allowed CN = "consolerCN"</span>
::<span style="background-color:#cbfeff;">TLS CA Certificate File = /etc/bacula/keys/ca.crt</span>
::<span style="background-color:#cbfeff;">TLS Certificate = /etc/bacula/keys/director.crt</span>
::<span style="background-color:#cbfeff;">TLS Key = /etc/bacula/keys/director.key </span>
}
 
@/etc/bacula/configuration/bacula_dir_filset.conf <span style="color:#bd0000;">&nbsp;# On ajoute les fichiers de configuration des sauvegardes</span><br/>
@/etc/bacula/configuration/bacula_dir_job.conf<br/>
@/etc/bacula/configuration/bacula_dir_storage.conf<br/>
@/etc/bacula/configuration/bacula_dir_pool.conf<br/>
@/etc/bacula/configuration/bacula_dir_client.conf<br/>
@/etc/bacula/configuration/bacula_dir_schedule.conf<br/>
 
'''Catalog''' { <span style="color:#bd0000;">&nbsp;# le catalogue ou Bacula stocke toutes ses informations</span>
:'''Name''' = MyCatalog <span style="color:#bd0000;">&nbsp;# son nom</span>
:dbname = "bacula"; dbuser = "bacula"; dbpassword = "mdp_base_SQL" <span style="color:#bd0000;">&nbsp;# les accés à la base Sql</span>
}
 
'''Messages''' { <span style="color:#bd0000;">&nbsp;# Définitions des messages envoyés par Bacula</span>
:'''Name''' = Standard <span style="color:#bd0000;">&nbsp;# Un nom pour l'identifier</span>
:'''mailcommand''' = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r"
:'''mail''' = root@localhost = all, !skipped
:'''console''' = all, !skipped, !saved
::append = "/var/bacula/log" = all, !skipped
}
 
'''Console''' { <span style="color:#bd0000;">&nbsp;# Director restreint utile pour les clients</span>
:'''Name''' = DIR_MON
:'''Password''' = "Mdp_du_director_restreint"
:'''CommandACL''' = status, .status
}
 

QueryFile = Cette directive est obligatoire et spécifie un répertoire et le fichier dans lequel le directeur peut trouver les états conservés SQL
pour les commandes de requête de la console.

Filset

C'est dans ce fichier que l'on trouve les répertoires et fichiers à sauvegarder.

/etc/bacula/configuration/bacula_dir_filset.conf

 
'''FileSet''' { <span style="color:#bd0000;">&nbsp;# Fileset Windows</span>
:'''Name''' = "DONNEES_FSET" 
:'''Enable VSS''' = yes <span style="color:#bd0000;">&nbsp;# activation ou non du Volume Shadow copy</span>
:'''Include''' {
::'''Options''' {
:::compression = GZIP <span style="color:#bd0000;">&nbsp;# on compresse la sauvegarde possibilité de donner un niveau de compression ex: GZIP9</span>
:::signature = MD5 <span style="color:#bd0000;">&nbsp;# on vérifie les fichiers sauvegardés avec md5 ou sha1</span>
:::accurate = yes <span style="color:#bd0000;">&nbsp;# si cette valeur est a "no" même les fichiers effacés seront restaurés</span>
::}
::'''File''' = "C:/DONNEES"<span style="color:#bd0000;">&nbsp;# le(s) répertoire(s) / fichier(s) à inclure</span>
:}
 
:'''Exclude''' { <span style="color:#bd0000;">&nbsp;# le(s) répertoire(s) / fichier(s) à exclure</span>
::'''File''' = "C:/DONNEES/xxx/yyy/zzz"
::'''File''' = "C:/DONNEES/xxx/yyy/zzz"
::'''File''' = "C:/DONNEES/yyy/zzz/yyy"
:}
}
 
'''FileSet''' { <span style="color:#bd0000;">&nbsp;# Fileset Linux</span>
:'''Name''' = "BACULA_FSET"
:'''Enable VSS''' = no
:'''Include''' {
::'''Options''' {
:::signature = MD5
:::compression = GZIP9
:::accurate = yes
::}
::'''File''' = "/etc/bacula/"
}
 

Vous trouverez le détail des ressources du fileset ici

Storage

C'est ici que vous définissez le Storage Daemon ainsi que le device (répertoire) de sauvegarde à utiliser.

/etc/bacula/configuration/bacula_dir_storage.conf

 
'''Storage''' {
:'''Name''' = Donnees_st <span style="color:#bd0000;">&nbsp;# Vous lui donnez un nom</span>
:'''Address''' = nom_dns_ou_ip_du_storagedaemon <span style="color:#bd0000;">&nbsp;# L' adresse du Storage Daemon défini plus haut</span>
:'''SDPort''' = 9103
:'''Password''' = "mdp_du_storagedaemon"
:'''Device''' = donnees_device <span style="color:#bd0000;">&nbsp;# un des devices défini dans le fichier du Storage Daemon</span>
}<br/>
 

Vous trouverez le détail des ressources du storage ici

Pool

Ce fichier décrit la façon dont sont gérés les volumes de sauvegarde.

/etc/bacula/configuration/bacula_dir_pool.conf

 
'''Pool'''{
:'''Name''' = Donnees_Pool
:'''Pool Type''' = Backup <span style="color:#bd0000;">&nbsp;# son TYPE Backup, Archive, Cloned, Migration, Copy, Save"</span>
:'''Recycle''' = yes <span style="color:#bd0000;">&nbsp;# on peut réutiliser les anciens volumes purgés</span>
:'''AutoPrune''' = yes <span style="color:#bd0000;">&nbsp;# On laisse Bacula gérer les volumes</span>
:'''File Retention''' = 180 days <span style="color:#bd0000;">&nbsp;# durée de rétention des fichiers</span>
:'''Job Retention''' = 180 days <span style="color:#bd0000;">&nbsp;# durée de rétention des jobs</span>
:'''Maximum Volume Jobs''' = 1 
:'''Label Format''' = "${Level}_${Job}_${Year}-${Month:p/2/0/r}-${Day:p/2/0/r}_${Hour:p/2/0/r}h${Minute:p/2/0/r}m"
}<br/>

Maximum Volume Jobs = Cette directive n'est pas obligatoire mais en fixant cette valeur à 1 on s'assure
de n'avoir qu'un seul fichier par sauvegarde.
Label Format = permet de nommer son volume de sauvegarde

Vous trouverez le détail des ressources pool ici

Client

Dans ce fichier vous retrouvez tous vos clients à sauvegarder.

/etc/bacula/configuration/bacula_dir_client.conf

 
'''Client''' {
:'''Name''' = Nom_du_poste_a_savegarder
:'''Address''' = nom_dns_ou_ip
:'''FDPort''' = 9102
:'''Catalog''' = MyCatalog
:'''Password''' = "mdp_du_client"
}
 

Vous trouverez le détail des ressources du client ici

Schedule

Dans celui-ci vous définissez les heures et les niveaux de vos sauvegardes automatiques.

/etc/bacula/configuration/bacula_dir_schedule.conf

 
'''Schedule''' {
:'''Name''' = "Donnees"
:'''Run''' = Full 1st sun at 23:05 <span style="color:#bd0000;">&nbsp;# complète le 1er dimanche du mois à 23:05</span>
:'''Run''' = Differential 2nd-5th sun at 23:05 <span style="color:#bd0000;">&nbsp;# Différentiel le 2em et 5em dimanche du mois à 23:05</span>
:'''Run''' = Incremental mon-sat at 21:00 <span style="color:#bd0000;">&nbsp;# Incrémentiel su lundi au samedi à 21:00</span>
}<br/>
 

Vous trouverez le détail des ressources schedule ici

Job

Et enfin dans ce fichier ci vous assemblez tous vos éléments.

/etc/bacula/configuration/bacula_dir_job.conf

 
'''Job''' {
:'''Name''' = "DONNEES"
:'''Type''' = Backup
:'''Level''' = Incremental <span style="color:#bd0000;">&nbsp;# le niveau de la sauvegarde</span>
:'''Client''' = SERVEURZZZ
:'''RunBeforeJob''' = "/usr/bin/prog" <span style="color:#bd0000;">&nbsp;# Execute /usr/bin/prog '''avant''' la sauvegarde sur la '''machine éxecutant le director'''</span>
:'''RunAfterJob'''  = "/usr/bin/prog2" <span style="color:#bd0000;">&nbsp;# Execute /usr/bin/prog2 '''après''' la sauvegarde sur la '''machine éxecutant le director'''</span>
:'''ClientRunBeforeJob''' = "\"C:/PROGRAM\ Files/progx/fermeture\ prog.bat\"" <span style="color:#bd0000;">&nbsp;# Execute "fermeture prog.bat" '''avant''' la sauvegarde sur la machine '''cliente'''</span>
:'''ClientRunAfterJob'''  = "\"C:/PROGRAM\ Files/progx/ouverture_prog.bat\"" <span style="color:#bd0000;">&nbsp;# Execute "ouverture_prog.bat" '''après''' la sauvegarde sur la machine '''cliente'''</span>
:'''FileSet''' = "DONNEES_FSET"
:'''Schedule''' = "Donnees"
:'''Storage''' = Donnee_st
:'''Pool'''= Donnees_Pool
:'''Write Bootstrap''' = /var/lib/bacula/donnee.bsr <span style="color:#bd0000;">&nbsp;# fichier contenant l'ensemble des données de la sauvegarde</span>
:'''Priority''' = 20 <span style="color:#bd0000;">&nbsp;# la priorité du job de sauvegarde : plus le nombre est petit plus la priorité est haute</span>
:'''Messages''' = Standard 
}

Si dans vos différents jobs vous avez les mêmes données (Fileset,Schedule...) vous pouvez créer un JobDefs.

 
'''JobDefs''' {
:'''Name''' = "JOBCOMMUN"
:'''Type''' = Backup
:'''Level''' = Full
:'''FileSet''' = "DONNEES_FSET"
:'''Schedule''' = "Donnees"
:'''Pool''' = Donnees_Pool
:'''Storage''' = Donnees-st
:'''Messages''' = Standard
}
 
'''Job''' {
:'''Name''' = "DONNEES"
:'''JobDefs''' = "JOBCOMMUN"
:'''Client''' = SERVEURZZZ
:'''Write Bootstrap''' = /var/lib/bacula/donnee.bsr 
:'''Priority''' = 10 
:'''Messages''' = Standard 
}
 
 

Vous trouverez le détail des ressources job ici

Le moniteur de ressources

Sécurisation

Tout au long du chapitre sur la configuration certaines parties en bleue n'ont pas été expliquées, elles concernaient essentiellement
des commandes liées aux connexions SSL et aux Chiffrage des données.

Les connexions SSL

Afin de sécuriser un peu notre système de sauvegarde nous pouvons mettre en place des connexions SSL entre les différents services de Bacula.
Dans un premier temps nous allons créer notre certificat d'autorité de certification, c'est lui qui validera (signera) les autres.

Si vous créez plusieurs certificats le conseil que je vous donne c'est d'éditer le fichier /etc/ssl/openssl.conf et
dans la section :"req_distinguished_name" de mettre vos paramêtres personalisés.

Exemple:

countryName                     = Country Name (2 letter code)
countryName_default             = FR
countryName_min                 = 2
countryName_max                 = 2

stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = Votre département

localityName                    = Locality Name (eg, city)
localityName_default            = Votre ville

0.organizationName              = Organization Name (eg, company)
0.organizationName_default      = Votre société

# we can do this but it is not needed normally :-)
#1.organizationName             = Second Organization Name (eg, company)
#1.organizationName_default     = World Wide Web Pty Ltd

organizationalUnitName          = Organizational Unit Name (eg, section)
organizationalUnitName_default  = Interne

commonName                      = Common Name (eg, YOUR name)
commonName_max                  = 64
emailAddress                    = Email Address
emailAddress_default            = Une adresse mail
emailAddress_max                = 64

Commencez par créer le répertoire /etc/bacula/keys/ puis entrez y.

Création du certificat d'autorité de certification :

#openssl genrsa -aes256 -out ca.key 2048 # Génére une clé RSA 2048 bits et son chiffrement en AES 256 un mot de passe vous sera demandé. 
#openssl req -new -key ca.key -x509 -out ca.crt # Génére le certificat publique de la clé. 

Ensuite il faut créer une clé et un certificat par services que nous voulons sécuriser. Par exemple pour le director :

#openssl genrsa -out director.key 2048
#openssl req -new -key director.key > director.csr
#openssl x509 -req -in director.csr -out director.crt -CA ca.crt -CAkey ca.key -CAcreateserial -CAserial ca.srl

Il est obligatoire de mettre le même nom dans le Common Name que le nom résolu par DNS du service.
Si l'adresse dns du director est "director.local" alors le Common Name est "director.local" et n'oubliez pas de configurer
le fichier /etc/hosts ou le serveur DNS.
L'option CAcreateserial n'est nécessaire que la première fois, ensuite pour la console :

#openssl genrsa -out console.key 2048
#openssl req -new -key console.key > console.csr
#openssl x509 -req -in console.csr -out console.crt -CA ca.crt -CAkey ca.key -CAserial ca.srl

Maintenant vous pouvez continuer seul pour les autres certificats (filedaemon.crt/key,storagedaemon.crt/key...).
Pour plus d'informations sur les certificats vous pouvez voir :
N30Secs Blog , Linux-france.org , Madboa.com


Pour établir une connexion sécurisé entre:

Director | Console
Revenons à notre fichier /etc/bacula/bconsole.conf et plus précisement à ces lignes :

Director {
  TLS Enable = yes # Active une connexion SSL
  TLS Require = yes # Oblige une connexion SSL
  TLS CA Certificate File = /etc/bacula/keys/ca.crt# le chemin vers votre certificat publique du ca généré plus haut
  TLS Certificate = /etc/bacula/keys/console.crt # le chemin vers votre certificat publique de la console généré plus haut
  TLS Key = /etc/bacula/keys/console.key # le chemin vers la clé privé de la console généré plus haut
}

Dans le fichier /etc/bacula/bacula-dir.conf :

Director {
  TLS Enable = yes
  TLS Require = yes            
  TLS Verify Peer = yes
  TLS Allowed CN = "consolerCN"# Ici on n'autorise que la console en donnant le Common Name du certificat de la console
  TLS CA Certificate File = /etc/bacula/keys/ca.crt
  TLS Certificate = /etc/bacula/keys/director.crt
  TLS Key = /etc/bacula/keys/director.key 
}

Vous voilà avec une connexion sécurisé entre votre console et le director.

Director | Filedaemon

Dans le fichier /etc/bacula/bacula-fd.conf :

Director {
  TLS Enable = yes
  TLS Require = yes            
  TLS Verify Peer = yes
  TLS Allowed CN = "DirectorCN"# Ici on n'autorise que le director en donnant le Common Name du certificat du director
  TLS CA Certificate File = /etc/bacula/keys/ca.crt
  TLS Certificate = /etc/bacula/keys/filedaemon.crt
  TLS Key = /etc/bacula/keys/filedaemon.key 
}

Dans le fichier /etc/bacula/bacula-dir.conf :

Client {
  TLS Enable = yes 
  TLS Require = yes 
  TLS CA Certificate File = /etc/bacula/keys/ca.crt
  TLS Certificate = /etc/bacula/keys/director.crt
  TLS Key = /etc/bacula/keys/director.key
}

Director | Storagedaemon

Dans le fichier /etc/bacula/bacula-sd.conf :

Director {
  TLS Enable = yes
  TLS Require = yes            
  TLS Verify Peer = yes
  TLS Allowed CN = "DirectorCN"# Ici on n'autorise que le director en donnant le Common Name du certificat du director
  TLS CA Certificate File = /etc/bacula/keys/ca.crt
  TLS Certificate = /etc/bacula/keys/storagedaemon.crt
  TLS Key = /etc/bacula/keys/storagedaemon.key 
}

Dans le fichier /etc/bacula/bacula-dir.conf :

Storage {
  TLS Enable = yes 
  TLS Require = yes 
  TLS CA Certificate File = /etc/bacula/keys/ca.crt
  TLS Certificate = /etc/bacula/keys/director.crt
  TLS Key = /etc/bacula/keys/director.key
}

Filedaemon | Storagedaemon

Dans le fichier /etc/bacula/bacula-sd.conf :

Storage {
  TLS Enable = yes 
  TLS Require = yes 
  TLS CA Certificate File = /etc/bacula/keys/ca.crt
  TLS Certificate = /etc/bacula/keys/storagedaemon.crt
  TLS Key = /etc/bacula/keys/storagedaemon.key
}

Dans le fichier /etc/bacula/bacula-fd.conf :

FileDaemon {
  TLS Enable = yes 
  TLS Require = yes 
  TLS CA Certificate File = /etc/bacula/keys/ca.crt
  TLS Certificate = /etc/bacula/keys/filedaemon.crt
  TLS Key = /etc/bacula/keys/filedaemon.key
}

Sous Windows faites attention aux chemins ce n'est pas un antislash mais deux slashs à la place :

  TLS CA Certificate File = "C:\\keys\\ca.crt"
  TLS Certificate = "C:\\keys\\client_win.crt"
  TLS Key = "C:\\keys\\client_win.key"

Et pensez aussi à modifier le fichier C:\WINDOWS\system32\drivers\etc\hosts ou le dns.

Le chiffrement des sauvegardes

C'est dans les différents File Daemon que cela ce passe, les fameuses lignes PKI :

PKI Signatures = Yes# active les données signées
PKI Encryption = Yes# active le chiffrage
PKI Keypair = "/etc/bacula/keys/client.pem"# paire de clé publique/privée du client
PKI Master Key = "/etc/bacula/keys/master.crt"# clé publique maître


Premiere étape générer une paire de clé maître de 2048 bits et chiffré en AES 256 (un mot de passe vous sera demandé):

# openssl genrsa -aes256 -out master.key 2048 # Votre clé privé : master.key 
# openssl req -new -key master.key -x509 -out master.crt # Votre clé publique : master.crt 

Ensuite on génére une paire de clé pour chaque client :
Générer une clé privée :

# openssl genrsa -aes256 -out client.key 2048

Le fait de chiffrer la clé en AES 256 nous permet de chiffrer notre sauvegarde en AES 256, les autres choix sont :
128, 192, AES-CBC et Blowfish-CBC

Générer la clé publique auto-signée :

# openssl req -new -key -client.key -x509 -out client.crt 

Se débarrasser du mot de passe de la clé (que bacula puisse la lire!) :

# openssl rsa -in client.key -out client.nopass.key

Copier la clé privée et publique dans le fichier .pem :

# cat client.nopass.key client.crt > client.pem # Votre paire de clé publique/privée du client : client.pem 

Si votre paire de clé du client est perdue ou corrompue vous pouvez déchiffrer les données avec la paire de clé maître pour cela il faut :
concaténer la clé privée et publique :

# cat master.key master.crt > master.keypair

puis modifier la ligne PKI Keypair en y mettant la master.keypair :

PKI Keypair = "/etc/bacula/keys/master.keypair"

source :

la documentation de bacula
Data Encryption - subjectKeyIdentifier extension?

Utilisation

En mode Console

Ouvrez un terminal et passez root puis entrez :

# bconsole

Pour quitter la console :

* quit

Pour afficher toutes les commandes :

* help

Pour afficher les messages :

* messages

Je ne vais pas m' éterniser sur cette partie la documentation est très explicite et en français cette fois.

La commande status est très utile pour visualiser votre système Bacula, ce n'est pas obligatoire mais elle prend les arguments dir, storage, client et all.
Lancer un status all permet de vérifier que vous avez bien configuré tout les accés.

Un petit aperçu :

status.png

La commande run permet de lancer un job de sauvegarde (une liste apparaît pour faire votre choix).
La commande restore affiche un choix de restauration (ex: le n°5 permet de restaurer la sauvegarde la plus récente.

Restore1.png Restore2.png

En mode Graphique

Une interface graphique Qt existe pour l 'installer :

# aptitude install bacula-console-qt

Son fichier de configuration /etc/bacula/bat.conf se configure comme une console.

Lancer l' interface en étant root :

# gksu bat

Connecté à deux directors celà ressemble à ça :

Bat.png

Haludeis (discussion) 6 mai 2012 à 14:39 (CEST)