Table des matières

Dernière mise-à-jour : 2020/03/15 09:52

SED901 - Administration de la Sauvegarde de Serveurs Linux

Quels sont les LABs de ce cours ?

  • LAB #1 - Importation de vos Machines Virtuelles
  • LAB #2 - Outils Classiques de Sauvegarde
  • LAB #3 - Que Sauvegarder en Priorité ?
  • LAB #4 - Rsync
  • LAB #5 - Backup-PC
  • LAB #6 - Bacula
  • LAB #7 - AMANDA (Advanced Maryland Automated Disk Archiver)

Types de Sauvegardes

Sauvegarde complète

Dans ce cas on sauvegarde tous les fichiers et dossiers, toute la partition ou tout le disque :

La restauration nécessite :

  • La dernière sauvegarde complète.

Avantage :

  • Restauration plus rapide et plus simple que les restaurations à partir de sauvegardes différentielles et incrémentales.

Inconvénient :

  • Nécessite plus d'espace de stockage que les sauvegardes différentielles et incrémentales.

Sauvegarde différentielle

Dans ce cas on sauvegarde des données modifiées ou nouvellement ajoutées sur la base de la dernière sauvegarde complète :

La restauration nécessite :

  • La dernière sauvegarde complète,
  • La dernière sauvegarde différentielle.

Avantage :

  • Restauration plus rapide que la restauration à partir d'une sauvegarde incrémentale.

Inconvénient :

  • Nécessite plus d'espace de stockage que la sauvegarde incrémentale.

Sauvegarde incrémentale

Dans ce cas, on ne sauvegarde que ce qui a changé depuis la dernière sauvegarde quelle qu'elle soit (complète, différentielle ou incrémentale) :

La restauration nécessite :

  • La dernière sauvegarde complète,
  • Toutes les sauvegardes incrémentales effectuées depuis, et dans l'ordre.

Avantage :

  • Sauvegarde plus rapide que la sauvegarde complète ou différentielle,
  • Nécessite moins d'espace de stockage que la sauvegarde différentielle.

Inconvénient :

  • Plus longue à restaurer.

Sauvegarde décrémentale

Dans ce cas on sauvegarde tous les fichiers puis on produit une sauvegarde de ce qui a changé depuis la dernière sauvegarde complète. Cette sauvegarde est appelée une sauvegarde décrémentale :

La restauration nécessite :

  • La dernière sauvegarde complète.

La restauration de J-1 nécessite :

  • La dernière sauvegarde complète,
  • La sauvegarde décrémentale J.

Par exemple pour obtenir un état du système J1 quand on est à J2, il convient de restaurer la sauvegarde complète de J2 qui est en réalité J2+J1 puis la sauvegarde décrémentale -J2. De cette façon et d'une manière mathématique on obtient : J2 + J1 -J2 = J1.

Avantage :

  • Restauration plus rapide et plus simple que les restaurations à partir de sauvegardes différentielles et incrémentales.

Inconvénient :

  • Nécessite plus de manipulation de données à chaque sauvegarde.

Outils de Sauvegarde

Outils de Sauvegarde Unidirectionnelle

Ces outils sauvegardent des fichiers vers un répertoire local ou distant dans un seul sens.

Ce premier tableau compare les outils par rapport aux caractéristiques et aux capacités des opérations de sauvegarde :

Outil Backend Sauvegarde différentielle Sauvegarde incrémentale Sauvegarde décrémentale Planification incorporée Restauration incorporée Chiffrement Compression Site
AMANDA tar, gzip AMANDA
Areca Backup Aucun   Areca Backup
bacula (Bareos) MySQL bacula
BackInTime rsync, diff, meld BackInTime
BackupPC rsync, samba, tar BackupPC
Dar Aucun Dar
Déjà Dup duplicity Duplicity
Grsync rsync Grsync
luckyBackup rsync luckyBackup
SBackup Aucun SBackup

A Faire - Consultez la page List of backup software sur Wikipedia pour plus d'informations.

Ce deuxième tableau compare les outils triés par la date de dernière version connue :

Outil Ecrit en Licence Dernière Version Date Version Linux Windows Mac Site Web
Dar C++ GPL 2.6.2 09/02/2019 Dar
Bacula (Bareos) C, C++ GNU Affero General Public License v3.0 9.4.2 04/02/2019 bacula
BackupPC Perl GPL v3.0 4.3.0 25/11/2018 BackupPC
luckyBackup C++ GPL v3.0 0.5.0 18/11/2018 luckyBackup
Déjà Dup (Duplicity) Python GPL 0.7.18.2 17/11/2018 Duplicity
AMANDA C, Perl GPL, LGPL, Apache, Amanda License 3.5.1 01/12/2017 AMANDA
BackInTime Python3 GPL 1.1.24 07/11/2017 BackInTime
Grsync GTK GPL 1.2.6 15/03/2016 Grsync
Areca Backup Java GPLv2 7.5 26/08/2015 Areca Backup
SBackup GTK GPLv2 0.11.6 24/02/2014 SBackup

Outils de Sauvegarde Multidirectionnelle

Ces outils synchronisent les fichiers entre deux serveurs.

Ce premier tableau compare les outils par rapport aux caractéristiques et aux capacités des opérations de sauvegarde :

Outil Backend Sauvegarde différentielle Sauvegarde incrémentale Sauvegarde décrémentale Planification incorporée Restauration incorporée Chiffrement Compression
FullSync smb, ftp, sftp S/O
FreeFileSync Aucun S/O
unison SSH, RSH S/O
Synkron Aucun

A Faire - Consultez la page Comparison of file synchronization software sur Wikipedia pour plus d'informations..

Ce deuxième tableau compare les outils triés par la date de dernière version connue :

Outil Ecrit en Licence Dernière Version Date Version Linux Windows Mac Site Web
FreeFileSync Divers GPL v3.0 10.8 05/01/2019 FreeFileSync
unison OCaml GPL v3.0 2.51.2 27/01/2018 unison
FullSync Java GPLv2 0.10.4 05/04/2016 FullSync
Synkron C++ GPL v2 1.6.2 25/01/2011 Synkron

Outils de Sauvegarde des Partitions

Ce premier tableau compare les outils par rapport aux caractéristiques et aux capacités des opérations de sauvegarde :

Outil Backend Sauvegarde différentielle Sauvegarde incrémentale Sauvegarde décrémentale Planification incorporée Restauration incorporée Chiffrement Compression
CloneZilla SSH, samba, NFS
Partclone Aucun
partimage Aucun

A Faire - Consultez la page Comparison of disk cloning software sur Wikipedia pour plus d'informations.

Ce deuxième tableau compare les outils triés par la date de dernière version connue :

Outil Ecrit en Licence Dernière Version Date Version Linux Windows Mac Site Web
CloneZilla Perl, Unix shell GPL 2.6.0-37 10/01/2019 CloneZilla
Partclone C GPL 0.2.89 05/07/2016 Partclone
partimage C GPL 0.6.9 25/07/2010 Partimage

LAB #1 - Importation de vos Machines Virtuelles

Ouvrez VirtualBox et importez les deux machines virtuelles Debian_9 et CentOS_7 :

Fichier > Importer un appareil virtuel ...

Les deux machines virtuelles doivent être dans le réseau NAT NatNetwork :

Machine Nom d'hôte Adresse IP Redirection de Port
Debian_9 debian9.i2tch.loc 10.0.2.9 2222
CentOS_7 centos7.i2tch.loc 10.0.2.16 2322

Les noms d'utilisateurs et les mots de passe sont identiques pour chaque machine :

Utilisateur Mot de Passe
trainee trainee
root fenestros

Créez les redirections de ports dans le réseau NAT NatNetwork de VirtualBox (Fichier > Paramètres > Réseau > NatNetwork > Redirection de ports) selon le tableau suivant :

Nom Protocole IP hôte Port hôte IP invité Port invité
ssh01 TCP 127.0.0.1 2222 10.0.2.9 22
ssh02 TCP 127.0.0.1 2322 10.0.2.16 22

Connexion à vos Machines Virtuelles

Vous devez vous connecter aux machines virtuelles de la façon suivante :

MAC et Linux

Ouvrez un terminal et tapez la commande suivante pour la machine Debian_9 :

$ ssh -l trainee localhost -p 2222

Ouvrez un autre terminal et tapez la commande suivante pour la machine CentOS_7 :

$ ssh -l trainee localhost -p 2322

Windows

Ouvrez putty et utilisez les informations suivantes pour vous connecter à Debian_9 :

  • Host Name –> localhost
  • Port –> 2222

Ouvrez putty et utilisez les informations suivantes pour vous connecter à CentOS_7 :

  • Host Name –> localhost
  • Port –> 2322

Connectez-vous à la machine virtuelle CentOS_7, arrêtez le pare-feu et configurez SELinux en mode permissive :

[root@centos7 tmp]# systemctl stop firewalld
[root@centos7 tmp]# systemctl disable firewalld
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
[root@centos7 tmp]# setenforce permissive
[root@centos7 tmp]# vi /etc/selinux/config 
[root@centos7 tmp]# cat /etc/selinux/config 

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 

Dernièrement, modifiez le fichier /etc/hosts dans la machine virtuelle Debian_9 :

trainee@debian9:~$ su -
Mot de passe : 
root@debian9:~# vi /etc/hosts
root@debian9:~# cat /etc/hosts
127.0.0.1	localhost
127.0.1.1	debian9.i2tch.loc	debian9
10.0.2.9        debian9.i2tch.loc
10.0.2.16       centos7.i2tch.loc

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

LAB #2 - Outils classiques de sauvegarde

Préparation

Afin de poursuivre, il convient de créer une arborescence à sauvegarder :

root@debian9:~# mkdir -p /test/repY; mkdir /test/repZ
root@debian9:~# cd /test/repY; touch Y1 Y2 Y3
root@debian9:/test/repY# cd /test/repZ; touch Z1 Z2
root@debian9:/test/repZ# ls -lR /test
/test:
total 8
drwxr-xr-x 2 root root 4096 févr. 16 11:50 repY
drwxr-xr-x 2 root root 4096 févr. 16 11:50 repZ

/test/repY:
total 0
-rw-r--r-- 1 root root 0 févr. 16 11:50 Y1
-rw-r--r-- 1 root root 0 févr. 16 11:50 Y2
-rw-r--r-- 1 root root 0 févr. 16 11:50 Y3

/test/repZ:
total 0
-rw-r--r-- 1 root root 0 févr. 16 11:50 Z1
-rw-r--r-- 1 root root 0 févr. 16 11:50 Z2

La Commande tar

Présentation

Le programme tar a été originellement prévu pour sauvegarder sur des bandes magnétiques, d'où son nom issu de tape archiver.

La commande tar peut sauvegarder vers :

  • un fichier spécial, par exemple le nom d'un lecteur de bande,
  • un fichier ordinaire sur disque,
  • la sortie standard pour être utilisé dans un pipe.

Travailler avec la Commande tar

Vous allez maintenant sauvegarder votre dossier test ainsi que son contenu vers un fichier :

root@debian9:/test/repZ# tar cvf /tmp/test.tar /test
tar: Removing leading `/' from member names
/test/
/test/repY/
/test/repY/Y1
/test/repY/Y3
/test/repY/Y2
/test/repZ/
/test/repZ/Z2
/test/repZ/Z1

Pour visualiser la table of contents de votre sauvegarde, utilisez la commande suivante :

root@debian9:/test/repZ# tar tvf /tmp/test.tar
drwxr-xr-x root/root         0 2019-02-16 11:50 test/
drwxr-xr-x root/root         0 2019-02-16 11:50 test/repY/
-rw-r--r-- root/root         0 2019-02-16 11:50 test/repY/Y1
-rw-r--r-- root/root         0 2019-02-16 11:50 test/repY/Y2
-rw-r--r-- root/root         0 2019-02-16 11:50 test/repY/Y3
drwxr-xr-x root/root         0 2019-02-16 11:50 test/repZ/
-rw-r--r-- root/root         0 2019-02-16 11:50 test/repZ/Z1
-rw-r--r-- root/root         0 2019-02-16 11:50 test/repZ/Z2

Afin de créer une sauvegarde incrémentale, vous avez besoin de créer un fichier qui servira de référence de date :

root@debian9:/test/repZ# touch /tmp/dateref

Modifiez maintenant deux des fichiers de votre arborescence test :

root@debian9:/test/repZ# echo "Debian is great \!" > /test/repY/Y1
root@debian9:/test/repZ# echo "Ubuntu is wonderful \!" > /test/repZ/Z1

Pour procéder à votre sauvegarde incrémentale, vous devez sauvegarder uniquement les fichiers modifiés ou créés depuis la création de votre fichier /tmp/dateref.

Saisissez donc la commande suivante :

root@debian9:/test/repZ# tar -cvf /tmp/incremental.tar -N /tmp/dateref /test
tar: Removing leading `/' from member names
/test/
/test/repY/
/test/repY/Y1
tar: /test/repY/Y3: file is unchanged; not dumped
tar: /test/repY/Y2: file is unchanged; not dumped
/test/repZ/
tar: /test/repZ/Z2: file is unchanged; not dumped
/test/repZ/Z1

Important - Notez l'utilisation de l'option -N avec l’argument /tmp/dateref qui permet d'identifier les fichiers modifiés ou créés depuis la création de /tmp/dateref.

Contrôlez maintenant le contenu de l'archive /tmp/incremental.tar :

root@debian9:/test/repZ# tar tvf /tmp/incremental.tar
drwxr-xr-x root/root         0 2019-02-16 11:50 test/
drwxr-xr-x root/root         0 2019-02-16 11:50 test/repY/
-rw-r--r-- root/root        19 2019-02-16 11:52 test/repY/Y1
drwxr-xr-x root/root         0 2019-02-16 11:50 test/repZ/
-rw-r--r-- root/root        23 2019-02-16 11:52 test/repZ/Z1

Supprimez maintenant le contenu du répertoire test :

root@debian9:/test/repZ# rm -rf /test/*

Important - Notez que le système vous permet de supprimer le répertoire /test/repZ, or vous vous situez dans ce même répertoire !

Afin de pouvoir restaurer les fichiers de votre première sauvegarde, placez-vous à la racine de votre système et restaurez le contenu de votre répertoire test en saisissant la commande tar suivante :

root@debian9:/test/repZ# cd /
root@debian9:/# tar xvf /tmp/test.tar
test/
test/repY/
test/repY/Y1
test/repY/Y2
test/repY/Y3
test/repZ/
test/repZ/Z1
test/repZ/Z2

La Commande GPL tar et la Compression

Dernièrement, la commande tar peut archiver en utilisant des algorithmes de compression :

Algorythme Option de la commande tar
gzip z
bzip2 j
lzma J

cpio

Présentation

La commande cpio (Copy Input To Output). cpio peut gérer les archives au format tar. La différence majeure entre tar et cpio est que ce dernier stocke les chemins d'accès aux fichiers sauvgardés en même temps que les fichiers eux-mêmes. Ceci implique que dans le cas où le chemin absolu a été spécifié lors de la sauvegarde, il est impossible de restaurer un fichier à un autre emplacement que son emplacement d'origine.

Travailler avec la Commande cpio

Vous allez utiliser maintenant le logiciel cpio pour effectuer les sauvegardes et restaurations. Dans un premier temps, vous devez utiliser la commande find pour construire une liste de fichiers à sauvegarder :

root@debian9:/# find /test > /tmp/cpio.liste
root@debian9:/# cat /tmp/cpio.liste
/test
/test/repY
/test/repY/Y1
/test/repY/Y2
/test/repY/Y3
/test/repZ
/test/repZ/Z1
/test/repZ/Z2

Sauvegardez maintenant les fichiers et répertoires référencés par le fichier /tmp/cpio.liste :

root@debian9:/# cpio -ov < /tmp/cpio.liste > /tmp/test.cpio
/test
/test/repY
/test/repY/Y1
/test/repY/Y2
/test/repY/Y3
/test/repZ
/test/repZ/Z1
/test/repZ/Z2
1 bloc

Consultez maintenant la table of contents de votre sauvegarde :

root@debian9:/# cpio -it < /tmp/test.cpio
/test
/test/repY
/test/repY/Y1
/test/repY/Y2
/test/repY/Y3
/test/repZ
/test/repZ/Z1
/test/repZ/Z2
1 bloc

Supprimez maintenant le répertoire /test/repY et son contenu :

root@debian9:/# rm -rf /test/repY

Contrôlez le bon déroulement de la suppression :

root@debian9:/# ls -lR /test
/test:
total 4
drwxr-xr-x 2 root root 4096 févr. 16 11:50 repZ

/test/repZ:
total 0
-rw-r--r-- 1 root root 0 févr. 16 11:50 Z1
-rw-r--r-- 1 root root 0 févr. 16 11:50 Z2

Restaurez les fichiers supprimés :

root@debian9:/# cpio -ivdum "/test/repY/*" < /tmp/test.cpio
/test/repY/Y1
/test/repY/Y2
/test/repY/Y3
1 bloc

Important - Notez l'utilisation de la chaîne “/test/repY/*” qui permet de rechercher uniquement le répertoire repY ainsi que les fichiers Y1, Y2 et Y3 dans l'archive test.cpio.

Contrôlez le bon déroulement de la restauration :

root@debian9:/# ls -lR /test
/test:
total 8
drwxr-xr-x 2 root root 4096 févr. 16 11:58 repY
drwxr-xr-x 2 root root 4096 févr. 16 11:50 repZ

/test/repY:
total 0
-rw-r--r-- 1 root root 0 févr. 16 11:50 Y1
-rw-r--r-- 1 root root 0 févr. 16 11:50 Y2
-rw-r--r-- 1 root root 0 févr. 16 11:50 Y3

/test/repZ:
total 0
-rw-r--r-- 1 root root 0 févr. 16 11:50 Z1
-rw-r--r-- 1 root root 0 févr. 16 11:50 Z2

dd

Présentation

La commande dd n'est pas réellement une commande de sauvegarde.

La commande dd copie le fichier passé en entrée dans le fichier de sortie en limitant le nombre d'octets copiés par l'utilisation de deux options :

  • count
    • le nombre
  • bs
    • la taille du bloc à copier

Travailler avec la Commande dd

Vous allez utiliser maintenant le logiciel dd pour effectuer une sauvegarde de votre MBR et de la table des partitions.

Effectuez une sauvegarde de votre MBR qui se trouve dans les premiers 446 octets de votre disque /dev/sda :

root@debian9:/# dd if=/dev/sda of=/tmp/mbr.save bs=1 count=446
446+0 enregistrements lus
446+0 enregistrements écrits
446 bytes copied, 0,0134986 s, 33,0 kB/s

Effectuez maintenant une sauvegarde de votre table des partitions qui se trouve dans les 64 octets après les 446 précédemment sauvegardés :

root@debian9:/# dd if=/dev/sda of=/tmp/tblpart.save bs=1 count=64 skip=446
64+0 enregistrements lus
64+0 enregistrements écrits
64 bytes copied, 0,00349885 s, 18,3 kB/s

Important - Notez l'utilisation de l'option skip qui permet de positionner le début de la sauvegarde au 447ième octet.

dump et restore

Présentation

Les commandes dump et restore se basent sur le format d'enregistrement des données ( ext3 ). Pour cette raison il n'est pas possible de sauvegarder des répertoires à l'intérieur d'un système de fichiers mais uniquement des systèmes de fichiers complets.

Il est important de noter que le système de fichier ne doit pas être utilisé pendant le processus de dump. Pour cette raison il est normalement conseillé de démonter le système de fichiers.

Il existe 10 niveaux de dump possibles de 0 à 9. Lors d'un dump le niveau est spécifié. Chaque fois qu'un dump est effectué, cette information est sauvegardée dans le fichier /etc/dumpdates.

Par définition un dump de niveau 0 est une sauvegarde complète tandis que le dump de niveau 1 est une sauvegarde incrémentale.

Notez que les fichiers sont sauvegardés avec des nom relatifs. Ceci implique que vous devez vous positionner dans le système de fichiers lors de la restauration avec la commande restore.

LAB #3 - Que Sauvegarder en Priorité ?

Sauvegarde de la Liste des Paquets

Paquets *.deb

Sauvegarde

Utilisez la commande dpkg pour créer un fichier contenant une liste des paquets installés :

root@debian9:~# dpkg --get-selections > liste-des-paquets_`hostname`_`date +%Y-%m-%d-%H-%M`

Consultez le contenu de ce fichier :

root@debian9:~# more liste-des-paquets_debian9_2019-02-18-16-51 
acl						install
adduser						install
adwaita-icon-theme				install
aglfn						install
alsa-utils					install
amanda-client					install
amanda-common					install
anacron						install
ant						install
ant-optional					install
apt						install
apt-listchanges					install
apt-utils					install
aspell						install
aspell-en					install
aspell-fr					install
at-spi2-core					install
avahi-autoipd					install
avahi-daemon					install
base-files					install
base-passwd					install
bash						install
bash-completion					install
bind9-host					install
bluetooth					install
bluez						install
bsd-mailx					install
bsdmainutils					install
bsdutils					install
busybox						install
bzip2						install
ca-certificates					install
ca-certificates-java				install
coinor-libcbc3					install
coinor-libcgl1					install
coinor-libclp1					install
coinor-libcoinmp1v5:amd64			install
coinor-libcoinutils3v5				install
coinor-libosi1v5				install
--Plus--(2%)

Copiez maintenant le fichier de /etc/apt/sources.list :

root@debian9:~# cp /etc/apt/sources.list sources.list

Important - Il convient ensuite de sauvegarder les deux fichiers liste-des-paquets_* et sources.list sur un support externe.

Restauration

Récupérez les deux fichiers liste-des-paquets_* et sources.list du support externe.

Restaurez le fichier sources.list :

root@debian9:~# cp sources.list /etc/apt/sources.list

Mettez à jour les listes des paquets disponibles :

root@debian9:~# apt-get update

Installez dselect :

root@debian9:~# apt-get install dselect

Mettez à jour l'information sur les paquets disponibles dans dselect :

root@debian9:~# dselect update

Ign:1 http://ftp.fr.debian.org/debian stretch InRelease
Atteint:2 http://ftp.fr.debian.org/debian stretch-updates InRelease
Atteint:4 http://ftp.fr.debian.org/debian stretch Release      
Atteint:3 http://security-cdn.debian.org/debian-security stretch/updates InRelease
Lecture des listes de paquets... Fait
Fusion des informations disponibles
Remplacement de l'information sur les paquets disponibles, en utilisant /var/cache/apt/available.
L'information sur 50874 paquets a été mise à jour.

Restaurez le contenu du fichier liste-des-paquets* :

root@debian9:~# dpkg --set-selections < liste-des-paquets_debian9_2019-02-18-16-51

Installez ou mettez à jour tous les paquets dans le fichier liste-des-paquets_* :

root@debian9:~# apt-get -u dselect-upgrade
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Les paquets suivants seront mis à jour :
  base-files ca-certificates-java cups-client cups-common firefox-esr firefox-esr-l10n-fr fonts-opensymbol ghostscript gnupg gnupg-agent gpgv libc-bin libc-l10n libc6
  libcups2 libcupsimage2 libcurl3 libcurl3-gnutls libgd3 libgpod-common libgpod4 libgs9 libgs9-common libpam-systemd libpq5 libqt5core5a libqt5dbus5 libqt5gui5
  libqt5network5 libqt5printsupport5 libqt5widgets5 libreoffice libreoffice-avmedia-backend-gstreamer libreoffice-base libreoffice-base-core libreoffice-base-drivers
  libreoffice-calc libreoffice-common libreoffice-core libreoffice-draw libreoffice-gtk2 libreoffice-help-en-us libreoffice-help-fr libreoffice-impress
  libreoffice-java-common libreoffice-l10n-fr libreoffice-librelogo libreoffice-math libreoffice-nlpsolver libreoffice-ogltrans libreoffice-pdfimport
  libreoffice-report-builder libreoffice-report-builder-bin libreoffice-script-provider-bsh libreoffice-script-provider-js libreoffice-script-provider-python
  libreoffice-sdbc-hsqldb libreoffice-sdbc-postgresql libreoffice-style-galaxy libreoffice-style-tango libreoffice-wiki-publisher libreoffice-writer libsmbclient
  libssh-gcrypt-4 libsystemd0 libudev1 libwayland-client0 libwayland-cursor0 libwayland-server0 libwbclient0 libxapian30 linux-image-4.9.0-8-amd64 locales
  multiarch-support openssh-client openssh-server openssh-sftp-server python3-uno qt5-gtk-platformtheme rtkit samba-libs systemd systemd-sysv udev uno-libs3 ure
86 mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 214 Mo dans les archives.
Après cette opération, 214 ko d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] O

Paquets *.rpm

Sauvegarde

Supprimez les fichiers de verrouillage de la base de données RPM :

[root@centos7 ~]# rm -f /var/lib/rpm/__db*

Sauvegardez les bases de données RPM :

[root@centos7 ~]# tar czvf $(hostname).rpmdatabase.tar.gz /var/lib/rpm
tar: Removing leading `/' from member names
/var/lib/rpm/
/var/lib/rpm/.dbenv.lock
/var/lib/rpm/.rpm.lock
/var/lib/rpm/Basenames
/var/lib/rpm/Conflictname
/var/lib/rpm/Dirnames
/var/lib/rpm/Group
/var/lib/rpm/Installtid
/var/lib/rpm/Name
/var/lib/rpm/Obsoletename
/var/lib/rpm/Packages
/var/lib/rpm/Providename
/var/lib/rpm/Requirename
/var/lib/rpm/Sha1header
/var/lib/rpm/Sigmd5
/var/lib/rpm/Triggername

Pour sauvegarder la liste des paquets à l'identique en termes de version, utilisez la commande RPM :

[root@centos7 ~]# rpm -qa > liste-des-paquets_`hostname`_`date +%Y-%m-%d-%H-%M`

Consultez le contenu de ce fichier :

[root@centos7 ~]# more liste-des-paquets_centos7.i2tch.loc_2019-02-18-17-10 
pulseaudio-gdm-hooks-10.0-5.el7.x86_64
lrzsz-0.12.20-36.el7.x86_64
avahi-gobject-0.6.31-19.el7.x86_64
opus-1.0.2-6.el7.x86_64
bind-license-9.9.4-72.el7.noarch
perl-ExtUtils-Embed-1.30-294.el7_6.noarch
expat-2.1.0-10.el7_3.x86_64
gnome-initial-setup-3.28.0-1.el7.x86_64
alsa-utils-1.1.6-1.el7.x86_64
perl-parent-0.225-244.el7.noarch
fwupdate-efi-12-5.el7.centos.x86_64
pixman-0.34.0-1.el7.x86_64
vinagre-3.22.0-9.el7.x86_64
python-blivet-0.61.15.72-1.el7.noarch
pytalloc-2.1.13-1.el7.x86_64
libXext-1.3.3-3.el7.x86_64
libtool-ltdl-2.4.2-22.el7_3.x86_64
gnome-weather-3.26.0-1.el7.noarch
setroubleshoot-plugins-3.0.67-3.el7.noarch
fftw-libs-double-3.3.3-8.el7.x86_64
--More--(1%)

Important - Il convient ensuite de sauvegarder les deux fichiers liste-des-paquets_* et $(hostname).rpmdatabase.tar.gz sur un support externe.

Restauration

Récupérez les deux fichiers liste-des-paquets_* et $(hostname).rpmdatabase.tar.gz du support externe à la racine du système de fichiers :

[root@centos7 ~]# cp liste-des-paquets_centos7.i2tch.loc_2019-02-18-17-10 centos7.i2tch.loc.rpmdatabase.tar.gz /

Placez-vous à la racine du système de fichiers et restaurez les bases de données RPM :

[root@centos7 ~]# cd /
[root@centos7 /]# tar xvf centos7.i2tch.loc.rpmdatabase.tar.gz 
var/lib/rpm/
var/lib/rpm/.dbenv.lock
var/lib/rpm/.rpm.lock
var/lib/rpm/Basenames
var/lib/rpm/Conflictname
var/lib/rpm/Dirnames
var/lib/rpm/Group
var/lib/rpm/Installtid
var/lib/rpm/Name
var/lib/rpm/Obsoletename
var/lib/rpm/Packages
var/lib/rpm/Providename
var/lib/rpm/Requirename
var/lib/rpm/Sha1header
var/lib/rpm/Sigmd5
var/lib/rpm/Triggername

Utilisez YUM pour restaurer les paquets :

[root@centos7 /]# yum -y install $(cat liste-des-paquets_centos7.i2tch.loc_2019-02-18-17-10)

Sauvegarde d'un Mémo sur la Structure du Disque Dur Système

Sous Debian / Ubuntu

root@debian9:~# fdisk -l /dev/sda > structure.list
root@debian9:~# more structure.list 
Disque /dev/sda : 20 GiB, 21474836480 octets, 41943040 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x53ca058b

Périphérique Amorçage    Début      Fin Secteurs Taille Id Type
/dev/sda1    *            2048 37748735 37746688    18G 83 Linux
/dev/sda2             37750782 41940991  4190210     2G  5 Étendue
/dev/sda5             37750784 41940991  4190208     2G 82 partition d'échange L
inux / Solaris

Sous Red Hat / CentOS

[root@centos7 /]# cd ~
[root@centos7 ~]# fdisk -l /dev/sda > structure.list
[root@centos7 ~]# cat structure.list 

Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000c5a90

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      411647      204800   83  Linux
/dev/sda2          411648    20891647    10240000   83  Linux
/dev/sda3        20891648    25083903     2096128   82  Linux swap / Solaris

Important - Il convient ensuite de sauvegarder le fichier structure.list sur un support externe.

Sauvegarde d'un Mémo sur les Points de Montage du Disque Dur Système

Sous Debian / Ubuntu

Saisissez la commande suivante :

root@debian9:~# df -h | grep "^/dev/" > montages.list
root@debian9:~# cat montages.list 
/dev/sda1           18G    3,3G   14G  20% /

Sous Red Hat / CentOS

Saisissez la commande suivante :

[root@centos7 ~]# df -h | grep "^/dev/" > montages.list
[root@centos7 ~]# cat montages.list
/dev/sda2       9.8G  5.1G  4.7G  53% /
/dev/sda1       197M  174M   24M  89% /boot

Important - Il convient ensuite de sauvegarder le fichier montages.list sur un support externe.

Sauvegarde du Chargeur de Démarrage

GRUB Legacy

# cp /boot/grub/menu.lst grubmenu.lst

GRUB 2 avec BIOS

Saisissez les commandes suivantes :

Debian / Ubuntu
root@debian9:~# cp /boot/grub/grub.cfg grub.cfg
root@debian9:~# grub-mkdevicemap
root@debian9:~# cp /boot/grub/device.map device.map

Sous Red Hat / CentOS

[root@centos7 ~]# cp /boot/grub2/grub.cfg grub.cfg
[root@centos7 ~]# cp /boot/grub2/device.map device.map

GRUB 2 avec EFI

Debian / Ubuntu
# cp /boot/edi/EFI/debian/grub.cfg grub.cfg
# grub-mkdevicemap
# cp /boot/grub/device.map device.map
Sous Red Hat / CentOS
# cp /boot/efi/EFI/redhat/grub.cfg grub.cfg
# cp /boot/grub2/device.map device.map

Important - Il convient ensuite de sauvegarder le fichier menu.lst ou grub.cfg et le fichier device.map sur un support externe.

Sauvegarde des Dossiers Utilisateurs

Debian / Ubuntu

root@debian9:~# cp -apv /home/ .

Red Hat / CentOS

[root@centos7 ~]# cp -apv /home/ .

Important - Il convient ensuite de sauvegarder le dossier /root/home sur un support externe.

LAB #4 - Rsync

Présentation

Rsync ou Remote Sync est un utilitaire de synchronisation de fichiers qui utilise un algorithme qui minimise la quantité de données copiée en ne copiant que les parties des fichiers qui ont été modifiées.

Rsync n'est pas installé par défaut dans Debian 8. Installez donc l'utilitaire :

root@debian9:~# apt-get install rsync

Travaller avec la Commande rsync

Synchroniser Localement

Créez les répertoires /test/repA et mkdir /test/repB :

root@debian9:/# mkdir /test/repA; mkdir /test/repB

Créez maintenant 20 fichiers vides dans le répertoire /test/repA :

root@debian9:/# touch /test/repA/file{1..20}
root@debian9:/# ls -l /test/repA/
total 0
-rw-r--r-- 1 root root 0 févr. 16 12:02 file1
-rw-r--r-- 1 root root 0 févr. 16 12:02 file10
-rw-r--r-- 1 root root 0 févr. 16 12:02 file11
-rw-r--r-- 1 root root 0 févr. 16 12:02 file12
-rw-r--r-- 1 root root 0 févr. 16 12:02 file13
-rw-r--r-- 1 root root 0 févr. 16 12:02 file14
-rw-r--r-- 1 root root 0 févr. 16 12:02 file15
-rw-r--r-- 1 root root 0 févr. 16 12:02 file16
-rw-r--r-- 1 root root 0 févr. 16 12:02 file17
-rw-r--r-- 1 root root 0 févr. 16 12:02 file18
-rw-r--r-- 1 root root 0 févr. 16 12:02 file19
-rw-r--r-- 1 root root 0 févr. 16 12:02 file2
-rw-r--r-- 1 root root 0 févr. 16 12:02 file20
-rw-r--r-- 1 root root 0 févr. 16 12:02 file3
-rw-r--r-- 1 root root 0 févr. 16 12:02 file4
-rw-r--r-- 1 root root 0 févr. 16 12:02 file5
-rw-r--r-- 1 root root 0 févr. 16 12:02 file6
-rw-r--r-- 1 root root 0 févr. 16 12:02 file7
-rw-r--r-- 1 root root 0 févr. 16 12:02 file8
-rw-r--r-- 1 root root 0 févr. 16 12:02 file9

Pout synchroniser les fichiers de /test/repA vers le répertoire /test/repB, utilisez l'option -r de la commande rsync :

root@debian9:/# rsync -r /test/repA/ /test/repB
root@debian9:/# ls -l /test/repB
total 0
-rw-r--r-- 1 root root 0 févr. 16 12:04 file1
-rw-r--r-- 1 root root 0 févr. 16 12:04 file10
-rw-r--r-- 1 root root 0 févr. 16 12:04 file11
-rw-r--r-- 1 root root 0 févr. 16 12:04 file12
-rw-r--r-- 1 root root 0 févr. 16 12:04 file13
-rw-r--r-- 1 root root 0 févr. 16 12:04 file14
-rw-r--r-- 1 root root 0 févr. 16 12:04 file15
-rw-r--r-- 1 root root 0 févr. 16 12:04 file16
-rw-r--r-- 1 root root 0 févr. 16 12:04 file17
-rw-r--r-- 1 root root 0 févr. 16 12:04 file18
-rw-r--r-- 1 root root 0 févr. 16 12:04 file19
-rw-r--r-- 1 root root 0 févr. 16 12:04 file2
-rw-r--r-- 1 root root 0 févr. 16 12:04 file20
-rw-r--r-- 1 root root 0 févr. 16 12:04 file3
-rw-r--r-- 1 root root 0 févr. 16 12:04 file4
-rw-r--r-- 1 root root 0 févr. 16 12:04 file5
-rw-r--r-- 1 root root 0 févr. 16 12:04 file6
-rw-r--r-- 1 root root 0 févr. 16 12:04 file7
-rw-r--r-- 1 root root 0 févr. 16 12:04 file8
-rw-r--r-- 1 root root 0 févr. 16 12:04 file9

Important - Notez que l'horodatage des fichiers synchronisés n'a pas été préservé.

Supprimez les fichiers dans /test/repB :

root@debian9:/# rm -rf /test/repB/*
root@debian9:/# ls -l /test/repB
total 0

Pour synchroniser les fichiers de /test/repA vers le répertoire /test/repB, utilisez l'option -a de la commande rsync :

root@debian9:/# rsync -a /test/repA/ /test/repB
root@debian9:/# ls -l /test/repB
total 0
-rw-r--r-- 1 root root 0 févr. 16 12:02 file1
-rw-r--r-- 1 root root 0 févr. 16 12:02 file10
-rw-r--r-- 1 root root 0 févr. 16 12:02 file11
-rw-r--r-- 1 root root 0 févr. 16 12:02 file12
-rw-r--r-- 1 root root 0 févr. 16 12:02 file13
-rw-r--r-- 1 root root 0 févr. 16 12:02 file14
-rw-r--r-- 1 root root 0 févr. 16 12:02 file15
-rw-r--r-- 1 root root 0 févr. 16 12:02 file16
-rw-r--r-- 1 root root 0 févr. 16 12:02 file17
-rw-r--r-- 1 root root 0 févr. 16 12:02 file18
-rw-r--r-- 1 root root 0 févr. 16 12:02 file19
-rw-r--r-- 1 root root 0 févr. 16 12:02 file2
-rw-r--r-- 1 root root 0 févr. 16 12:02 file20
-rw-r--r-- 1 root root 0 févr. 16 12:02 file3
-rw-r--r-- 1 root root 0 févr. 16 12:02 file4
-rw-r--r-- 1 root root 0 févr. 16 12:02 file5
-rw-r--r-- 1 root root 0 févr. 16 12:02 file6
-rw-r--r-- 1 root root 0 févr. 16 12:02 file7
-rw-r--r-- 1 root root 0 févr. 16 12:02 file8
-rw-r--r-- 1 root root 0 févr. 16 12:02 file9

Important - Notez que non seulement l'option -a de la commande rsync synchronise les fichiers d'une manière récursive, toute comme l'option -r, mais elle préserve aussi les fichiers spéciaux, les liens symboliques, les permissions, les propriétaires, les groupes ainsi que les dates de modification des fichiers.

De nouveau, supprimez les fichiers dans le répertoire /test/repB :

root@debian9:/# rm -rf /test/repB/*
root@debian9:/# ls -l /test/repB
total 0

Exécutez maintenant le commande suivante et constatez le résultat :

root@debian9:/# rsync -a /test/repA /test/repB
root@debian9:/# ls -l /test/repB
total 4
drwxr-xr-x 2 root root 4096 févr. 16 12:02 repA
root@debian9:/# ls -l /test/repB/repA
total 0
-rw-r--r-- 1 root root 0 févr. 16 12:02 file1
-rw-r--r-- 1 root root 0 févr. 16 12:02 file10
-rw-r--r-- 1 root root 0 févr. 16 12:02 file11
-rw-r--r-- 1 root root 0 févr. 16 12:02 file12
-rw-r--r-- 1 root root 0 févr. 16 12:02 file13
-rw-r--r-- 1 root root 0 févr. 16 12:02 file14
-rw-r--r-- 1 root root 0 févr. 16 12:02 file15
-rw-r--r-- 1 root root 0 févr. 16 12:02 file16
-rw-r--r-- 1 root root 0 févr. 16 12:02 file17
-rw-r--r-- 1 root root 0 févr. 16 12:02 file18
-rw-r--r-- 1 root root 0 févr. 16 12:02 file19
-rw-r--r-- 1 root root 0 févr. 16 12:02 file2
-rw-r--r-- 1 root root 0 févr. 16 12:02 file20
-rw-r--r-- 1 root root 0 févr. 16 12:02 file3
-rw-r--r-- 1 root root 0 févr. 16 12:02 file4
-rw-r--r-- 1 root root 0 févr. 16 12:02 file5
-rw-r--r-- 1 root root 0 févr. 16 12:02 file6
-rw-r--r-- 1 root root 0 févr. 16 12:02 file7
-rw-r--r-- 1 root root 0 févr. 16 12:02 file8
-rw-r--r-- 1 root root 0 févr. 16 12:02 file9

Important - Notez que dans ce cas, le caractère / est manquant après repA dans la commande rsync -a /test/repA /test/repB. Le résultat est la synchronisation du répertoire /test/repA vers /test/repB.

Pour éviter des erreurs, la commande rsync vous permet de visualiser le résultat de votre commande sans exécuter la commande grâce à l'utilisation des options -n et -r.

De nouveau, supprimez les fichiers dans le répertoire /test/repB :

root@debian9:/# rm -rf /test/repB/*
root@debian9:/# ls -l /test/repB
total 0

Exécutez la commande ci-dessous :

root@debian9:/# rsync -anv /test/repA/ /test/repB
sending incremental file list
./
file1
file10
file11
file12
file13
file14
file15
file16
file17
file18
file19
file2
file20
file3
file4
file5
file6
file7
file8
file9

sent 379 bytes  received 79 bytes  916.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)

Important - Notez que dans ce cas, Le résultat de la synchronisation est d'envoyer le contenu du répertoire /test/repA vers /test/repB.

Maintenant, exécutez la commande ci-dessous :

root@debian9:/# rsync -anv /test/repA /test/repB
sending incremental file list
repA/
repA/file1
repA/file10
repA/file11
repA/file12
repA/file13
repA/file14
repA/file15
repA/file16
repA/file17
repA/file18
repA/file19
repA/file2
repA/file20
repA/file3
repA/file4
repA/file5
repA/file6
repA/file7
repA/file8
repA/file9

sent 392 bytes  received 80 bytes  944.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)

Important - Notez que dans ce cas, Le résultat de la synchronisation est d'envoyer le répertoire /test/repA vers /test/repB.

Synchroniser par SSH

Rsync a besoin d'une configuration par clef asymétrique avec la machine CentOS_7 afin de fonctionner correctement. Dans cette configuration :

  • La machine Debian_9 envoie à la machine CentOS_7 une requête d'authentification par clé asymétrique qui contient le module de la clé à utiliser,
  • La machine CentOS_7 recherche une correspondance pour ce module dans le fichier des clés autorisés ~/.ssh/authorized_keys,
    • Dans le cas où une correspondance n'est pas trouvée, la machine CentOS_7 met fin à la communication,
    • Dans le cas contraire la machine CentOS_7 génère une chaîne aléatoire de 256 bits appelée un challenge et la chiffre avec la clé publique de la machine Debian_9,
  • La machine Debian_9 reçoit le challenge et le décrypte avec la partie privée de sa clé. Il combine le challenge avec l'identifiant de session et chiffre le résultat. Ensuite il envoie le résultat chiffré à la machine CentOS_7.
  • La machine CentOS_7 génère le même haché et le compare avec celui reçu de la machine Debian_9. Si les deux hachés sont identiques, l'authentification est réussie.

La configuration du serveur ssh s'effectue dans le fichier /etc/ssh/sshd_config de la machine CentOS_7 :

[trainee@centos7 ~]$ su -
Mot de passe : 
Dernière connexion : lundi 14 janvier 2019 à 09:30:54 CET sur tty1
[root@centos7 ~]# cat /etc/ssh/sshd_config 
#	$OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/local/bin:/usr/bin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

# Ciphers and keying
#RekeyLimit default none

# Logging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
#PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

#PubkeyAuthentication yes

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile	.ssh/authorized_keys

#AuthorizedPrincipalsFile none

#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication yes

# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
#KerberosUseKuserok yes

# GSSAPI options
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
#GSSAPIEnablek5users no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
# WARNING: 'UsePAM no' is not supported in Red Hat Enterprise Linux and may cause several
# problems.
UsePAM yes

#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation sandbox
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#ShowPatchLevel no
#UseDNS yes
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none

# no default banner path
#Banner none

# Accept locale-related environment variables
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS

# override default of no subsystems
Subsystem	sftp	/usr/libexec/openssh/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
#	X11Forwarding no
#	AllowTcpForwarding no
#	PermitTTY no
#	ForceCommand cvs server

Important : Notez que le mot de passe fenestros ne sera pas en clair.

Pour ôter les lignes de commentaires dans ce fichier, utilisez la commande suivante :

[root@centos7 ~]# cd /tmp ; grep -E -v '^(#|$)'  /etc/ssh/sshd_config > sshd_config
[root@centos7 tmp]# cat sshd_config
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
AuthorizedKeysFile	.ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem	sftp	/usr/libexec/openssh/sftp-server

Pour sécuriser le serveur ssh, ce fichier doit être modifié :

[root@centos7 tmp]# vi sshd_config 
[root@centos7 tmp]# cat sshd_config 
Banner /etc/issue.net
PermitRootLogin yes
X11Forwarding no
Port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
UsePrivilegeSeparation yes
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
StrictModes yes
PubkeyAuthentication yes
IgnoreRhosts yes
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes

Renommez le fichier /etc/ssh/sshd_config en /etc/ssh/sshd_config.old :

[root@centos7 tmp]# mv /etc/ssh/sshd_config /etc/ssh/sshd_config.old

Copiez le fichier /tmp/sshd_config vers /etc/sshd/ :

[root@centos7 tmp]# cp /tmp/sshd_config /etc/ssh/

Redémarrez ensuite le service sshd :

[root@centos7 tmp]# systemctl restart sshd
[root@centos7 tmp]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-02-18 11:07:46 CET; 3s ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 11282 (sshd)
   CGroup: /system.slice/sshd.service
           └─11282 /usr/sbin/sshd -D

Feb 18 11:07:46 centos7.i2tch.loc systemd[1]: Stopped OpenSSH server daemon.
Feb 18 11:07:46 centos7.i2tch.loc systemd[1]: Starting OpenSSH server daemon...
Feb 18 11:07:46 centos7.i2tch.loc sshd[11282]: Server listening on 0.0.0.0 port 22.
Feb 18 11:07:46 centos7.i2tch.loc sshd[11282]: Server listening on :: port 22.
Feb 18 11:07:46 centos7.i2tch.loc systemd[1]: Started OpenSSH server daemon.

Saisissez maintenant les commandes suivantes en tant que trainee dans la machine Debian_9 :

Important - Lors de la génération des clefs, la passphrase doit être vide.

trainee@debian9:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/trainee/.ssh/id_rsa): 
Created directory '/home/trainee/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/trainee/.ssh/id_rsa.
Your public key has been saved in /home/trainee/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:FlTf5QtW3geWEag+uCR8kkeCejftN3R9Q3xBEMuZFCI trainee@debian9
The key's randomart image is:
+---[RSA 2048]----+
|        .E.. *X*.|
|       .  ..=oB=.|
|     .  .  ..Bo.=|
|    . . ... . .o+|
|   . . =So   ....|
|  . . B.* + . ...|
|   . . O o o   ..|
|        o o      |
|         . .     |
+----[SHA256]-----+
trainee@debian9:~$ ssh-keygen -t ecdsa
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/trainee/.ssh/id_ecdsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/trainee/.ssh/id_ecdsa.
Your public key has been saved in /home/trainee/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:uancu/tKEP09dUQ83zRaH8gfqrfavatD5UycBjAXUVI trainee@debian9
The key's randomart image is:
+---[ECDSA 256]---+
|           oo=*Eo|
|       .    o+.Bo|
|      . .     O.@|
|       . o . + O+|
|      . S . + *  |
|       . o . + o |
|        +   o .  |
|     . +    .o.  |
|      o **...oo+o|
+----[SHA256]-----+
trainee@debian9:~$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/trainee/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/trainee/.ssh/id_ed25519.
Your public key has been saved in /home/trainee/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:O/+l+gD5mMGKGcqSivdGxuiONkLXPChiU89t632gIq8 trainee@debian9
The key's randomart image is:
+--[ED25519 256]--+
|                 |
|                 |
|                 |
|   .   . .       |
|  .oB . S        |
|.B.++X + O       |
|*.*oo + B +   .  |
|+=o... o.o o o   |
|*ooE=.o. .+++    |
+----[SHA256]-----+

Important - Les clés générées seront placées dans le répertoire ~/.ssh/.

Créez ensuite le fichier ~/.ssh/authorized_keys :

trainee@debian9:~$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
trainee@debian9:~$ cat .ssh/id_ecdsa.pub >> .ssh/authorized_keys
trainee@debian9:~$ cat .ssh/id_ed25519.pub >> .ssh/authorized_keys
trainee@debian9:~$ cat .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDjaTYj766fcplXV8y78FgAFmCShUZF12yblQXg7nYPSU+ymMGuB5n3WOeiqPBZ3ro9HItln/mLRHk9ubazFMhsa34gkhf9iZDy0o8vH9fdxU3HxVZkSnxhzSmM4Tzz6Szeg16BnuAzgGwfPcAOuwqm7+6JUIyIJwtywXPCiPaxMmwWpe7cfJguml+k6s8lE2JGRlGVrJRScfetBA8L0kQDcOJbF75xNvAXI3ssLbViNKfd50y+ZRtDYXS047sDH5h9jOn54aZDtBD3DOQXfiqCl5Db3UzHyYxGeW+Ux4GWSXMA3E9ZIVRqWzfXzFnIRVEcC/CpvnauOwXjr8S8KsPR trainee@debian9
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOku5nHPrKnvDi7w26pxyoNiKmFa6auc/fnSBBSLrlRqDywpyLf6V+e78AlBJKsziT1u6UFCJtAT8CZ78t7DfBA= trainee@debian9
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIB5s+3tdvqWCttG//YMDyldQOoUXZyYqqt96R4u8pSh1 trainee@debian9

Il convient maintenant de se connecter sur la machine CentOS_7 en utilisant ssh et de vérifier la présence du répertoire ~/.ssh :

En saisissant cette commande, vous obtiendrez une fenêtre similaire à celle-ci :

root@debian9:~# ssh -l trainee centos7.i2tch.loc
The authenticity of host 'centos7.i2tch.loc (10.0.2.16)' can't be established.
ECDSA key fingerprint is SHA256:RgOsp/XI7JHNq+oIfHKw+jkHdtTnBIh+Dd7kVmHRxtU.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'centos7.i2tch.loc,10.0.2.16' (ECDSA) to the list of known hosts.
\S
Kernel \r on an \m
trainee@centos7.i2tch.loc's password: trainee
Last login: Mon Feb 18 10:54:18 2019 from 10.0.2.2
[trainee@centos7 ~]$ ls -la | grep ssh
[trainee@centos7 ~]$ mkdir .ssh
[trainee@centos7 ~]$ chmod 700 .ssh
[trainee@centos7 ~]$ exit
déconnexion
Connection to centos7.i2tch.loc closed.

Important - Si le dossier distant .ssh n'existe pas dans le répertoire personnel de l'utilisateur connecté, il faut le créer avec des permissions de 700. Attention, le fichier authorized_keys doit posséder les permissions 644.

Important : Notez que le mot de passe trainee ne sera pas en clair.

Ensuite, il convient de transférer le fichier .ssh/authorized_keys de la machine Debian_9 vers la machine CentOS_7 :

trainee@debian9:~$ scp .ssh/authorized_keys trainee@centos7.i2tch.loc:/home/trainee/.ssh/authorized_keys
The authenticity of host 'centos7.i2tch.loc (10.0.2.16)' can't be established.
ECDSA key fingerprint is SHA256:RgOsp/XI7JHNq+oIfHKw+jkHdtTnBIh+Dd7kVmHRxtU.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'centos7.i2tch.loc,10.0.2.16' (ECDSA) to the list of known hosts.
\S
Kernel \r on an \m
trainee@centos7.i2tch.loc's password: 
authorized_keys                               100%  671   720.1KB/s   00:00                                                                                                                          100%  701   994.8KB/s   00:00 

Important : Notez que le mot de passe trainee ne sera pas en clair.

Connectez-vous via ssh de la machine Debian_9 à la machine CentOS_7 :

trainee@debian9:~$ ssh -l trainee centos7.i2tch.loc
\S
Kernel \r on an \m
Last login: Mon Feb 18 12:35:27 2019 from 10.0.2.9
[trainee@centos7 ~]$ exit
déconnexion
Connection to centos7.i2tch.loc closed.

Important : Notez que l'authentification a utilisé le couple de clefs asymétrique et aucun mot de passe n'a été requis.

Créez maintenant 100 fichiers dans le répertoire /home/trainee/debian9 :

trainee@debian9:~$ mkdir debian9
trainee@debian9:~$ touch debian9/file{1..100}
trainee@debian9:~$ ls -l debian9/ | more
total 4
-rw-r--r-- 1 trainee trainee 6 févr. 18 12:49 file1
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file10
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file100
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file11
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file12
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file13
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file14
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file15
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file16
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file17
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file18
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file19
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file2
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file20
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file21
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file22
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file23
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file24
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file25
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file26
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file27
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file28
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file29
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file3
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file30
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file31
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file32
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file33
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file34
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file35
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file36
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file37
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file38
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file39
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file4
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file40
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file41
-rw-r--r-- 1 trainee trainee 0 févr. 18 12:49 file42
--Plus--

Important : Notez l'heure de chaque fichier - 12:49.

Envoyez le répertoire ~/debian9 vers la machine virtuelle CentOS_7 :

trainee@debian9:~$ rsync -a ~/debian9 trainee@centos7.i2tch.loc:~/debian9
\S
Kernel \r on an \m
trainee@debian9:~$ ssh -l trainee centos7.i2tch.loc
\S
Kernel \r on an \m
Last login: Mon Feb 18 12:44:06 2019 from 10.0.2.9
[trainee@centos7 ~]$ ls
debian9  Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos
[trainee@centos7 ~]$ ls debian9/
debian9
[trainee@centos7 ~]$ ls debian9/debian9
file1    file13  file18  file22  file27  file31  file36  file40  file45  file5   file54  file59  file63  file68  file72  file77  file81  file86  file90  file95
file10   file14  file19  file23  file28  file32  file37  file41  file46  file50  file55  file6   file64  file69  file73  file78  file82  file87  file91  file96
file100  file15  file2   file24  file29  file33  file38  file42  file47  file51  file56  file60  file65  file7   file74  file79  file83  file88  file92  file97
file11   file16  file20  file25  file3   file34  file39  file43  file48  file52  file57  file61  file66  file70  file75  file8   file84  file89  file93  file98
file12   file17  file21  file26  file30  file35  file4   file44  file49  file53  file58  file62  file67  file71  file76  file80  file85  file9   file94  file99
[trainee@centos7 ~]$ exit
déconnexion
Connection to centos7.i2tch.loc closed.

Modifiez le fichier /home/debian/file1 dans la machine virtuelle Debian_9 :

trainee@debian9:~$ echo "i2tch" > ~/debian9/file1

Envoyez de nouveau le répertoire ~/debian9 vers la machine virtuelle CentOS_7 :

trainee@debian9:~$ rsync -a --progress ~/debian9 trainee@centos7.i2tch.loc:~/debian9
\S
Kernel \r on an \m
sending incremental file list
trainee@debian9:~$ ssh -l trainee centos7.i2tch.loc
\S
Kernel \r on an \m
Last login: Mon Feb 18 13:09:55 2019 from 10.0.2.9
[trainee@centos7 ~]$ cd debian9/debian9/
[trainee@centos7 debian9]$ ls -l | more
total 4
-rw-r--r--. 1 trainee trainee 6 18 févr. 13:13 file1
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file10
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file100
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file11
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file12
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file13
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file14
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file15
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file16
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file17
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file18
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file19
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file2
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file20
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file21
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file22
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file23
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file24
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file25
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file26
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file27
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file28
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file29
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file3
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file30
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file31
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file32
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file33
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file34
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file35
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file36
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file37
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file38
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file39
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file4
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file40
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file41
-rw-r--r--. 1 trainee trainee 0 18 févr. 12:49 file42
[trainee@centos7 debian9]$ exit
déconnexion
Connection to centos7.i2tch.loc closed.

Important : Notez l'heure du fichier - file1.

Supprimez maintenant le fichier ~/debian9/file2 dans la machine virtuelle Debian_9:

trainee@debian9:~$ rm -rf ~/debian9/file2

Envoyez encore une fois le répertoire ~/debian9 vers la machine virtuelle CentOS_7 :

trainee@debian9:~$ rsync -a --progress ~/debian9 trainee@centos7.i2tch.loc:~/debian9
\S
Kernel \r on an \m
sending incremental file list
debian9/

Vérifiez le résultat dans la machine virtuelle CentOS_7 :

trainee@debian9:~$ ssh -l trainee centos7.i2tch.loc
\S
Kernel \r on an \m
Last login: Mon Feb 18 13:13:48 2019 from 10.0.2.9
[trainee@centos7 ~]$ ls ~/debian9/debian9/
file1    file13  file18  file22  file27  file31  file36  file40  file45  file5   file54  file59  file63  file68  file72  file77  file81  file86  file90  file95
file10   file14  file19  file23  file28  file32  file37  file41  file46  file50  file55  file6   file64  file69  file73  file78  file82  file87  file91  file96
file100  file15  file2   file24  file29  file33  file38  file42  file47  file51  file56  file60  file65  file7   file74  file79  file83  file88  file92  file97
file11   file16  file20  file25  file3   file34  file39  file43  file48  file52  file57  file61  file66  file70  file75  file8   file84  file89  file93  file98
file12   file17  file21  file26  file30  file35  file4   file44  file49  file53  file58  file62  file67  file71  file76  file80  file85  file9   file94  file99
[trainee@centos7 ~]$ exit
déconnexion
Connection to centos7.i2tch.loc closed.

Important : Notez que le fichier file2 n'a pas été supprimé.

Envoyez encore une fois le répertoire ~/debian9 vers la machine virtuelle CentOS_7 en utilisant l'option –delete :

trainee@debian9:~$ rsync -a --delete --progress ~/debian9 trainee@centos7.i2tch.loc:~/debian9
\S
Kernel \r on an \m
sending incremental file list
deleting debian9/file2
trainee@debian9:~$ ssh -l trainee centos7.i2tch.loc
\S
Kernel \r on an \m
Last login: Mon Feb 18 13:26:21 2019 from 10.0.2.9
[trainee@centos7 ~]$ ls ~/debian9/debian9/
file1    file13  file18  file23  file28  file32  file37  file41  file46  file50  file55  file6   file64  file69  file73  file78  file82  file87  file91  file96
file10   file14  file19  file24  file29  file33  file38  file42  file47  file51  file56  file60  file65  file7   file74  file79  file83  file88  file92  file97
file100  file15  file20  file25  file3   file34  file39  file43  file48  file52  file57  file61  file66  file70  file75  file8   file84  file89  file93  file98
file11   file16  file21  file26  file30  file35  file4   file44  file49  file53  file58  file62  file67  file71  file76  file80  file85  file9   file94  file99
file12   file17  file22  file27  file31  file36  file40  file45  file5   file54  file59  file63  file68  file72  file77  file81  file86  file90  file95
[trainee@centos7 ~]$ exit
déconnexion
Connection to centos7.i2tch.loc closed.

Important : Notez que le fichier file2 a été supprimé.

Options de la Commande

Les options de la commande rsync sont :

trainee@debian9:~$ rsync --help
rsync  version 3.1.2  protocol version 31
Copyright (C) 1996-2015 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes, prealloc

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

rsync is a file transfer program capable of efficient remote update
via a fast differencing algorithm.

Usage: rsync [OPTION]... SRC [SRC]... DEST
  or   rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
  or   rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
  or   rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
  or   rsync [OPTION]... [USER@]HOST:SRC [DEST]
  or   rsync [OPTION]... [USER@]HOST::SRC [DEST]
  or   rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
The ':' usages connect via remote shell, while '::' & 'rsync://' usages connect
to an rsync daemon, and require SRC or DEST to start with a module name.

Options
 -v, --verbose               increase verbosity
     --info=FLAGS            fine-grained informational verbosity
     --debug=FLAGS           fine-grained debug verbosity
     --msgs2stderr           special output handling for debugging
 -q, --quiet                 suppress non-error messages
     --no-motd               suppress daemon-mode MOTD (see manpage caveat)
 -c, --checksum              skip based on checksum, not mod-time & size
 -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
     --no-OPTION             turn off an implied OPTION (e.g. --no-D)
 -r, --recursive             recurse into directories
 -R, --relative              use relative path names
     --no-implied-dirs       don't send implied dirs with --relative
 -b, --backup                make backups (see --suffix & --backup-dir)
     --backup-dir=DIR        make backups into hierarchy based in DIR
     --suffix=SUFFIX         set backup suffix (default ~ w/o --backup-dir)
 -u, --update                skip files that are newer on the receiver
     --inplace               update destination files in-place (SEE MAN PAGE)
     --append                append data onto shorter files
     --append-verify         like --append, but with old data in file checksum
 -d, --dirs                  transfer directories without recursing
 -l, --links                 copy symlinks as symlinks
 -L, --copy-links            transform symlink into referent file/dir
     --copy-unsafe-links     only "unsafe" symlinks are transformed
     --safe-links            ignore symlinks that point outside the source tree
     --munge-links           munge symlinks to make them safer (but unusable)
 -k, --copy-dirlinks         transform symlink to a dir into referent dir
 -K, --keep-dirlinks         treat symlinked dir on receiver as dir
 -H, --hard-links            preserve hard links
 -p, --perms                 preserve permissions
 -E, --executability         preserve the file's executability
     --chmod=CHMOD           affect file and/or directory permissions
 -A, --acls                  preserve ACLs (implies --perms)
 -X, --xattrs                preserve extended attributes
 -o, --owner                 preserve owner (super-user only)
 -g, --group                 preserve group
     --devices               preserve device files (super-user only)
     --copy-devices          copy device contents as regular file
     --specials              preserve special files
 -D                          same as --devices --specials
 -t, --times                 preserve modification times
 -O, --omit-dir-times        omit directories from --times
 -J, --omit-link-times       omit symlinks from --times
     --super                 receiver attempts super-user activities
     --fake-super            store/recover privileged attrs using xattrs
 -S, --sparse                handle sparse files efficiently
     --preallocate           allocate dest files before writing them
 -n, --dry-run               perform a trial run with no changes made
 -W, --whole-file            copy files whole (without delta-xfer algorithm)
 -x, --one-file-system       don't cross filesystem boundaries
 -B, --block-size=SIZE       force a fixed checksum block-size
 -e, --rsh=COMMAND           specify the remote shell to use
     --rsync-path=PROGRAM    specify the rsync to run on the remote machine
     --existing              skip creating new files on receiver
     --ignore-existing       skip updating files that already exist on receiver
     --remove-source-files   sender removes synchronized files (non-dirs)
     --del                   an alias for --delete-during
     --delete                delete extraneous files from destination dirs
     --delete-before         receiver deletes before transfer, not during
     --delete-during         receiver deletes during the transfer
     --delete-delay          find deletions during, delete after
     --delete-after          receiver deletes after transfer, not during
     --delete-excluded       also delete excluded files from destination dirs
     --ignore-missing-args   ignore missing source args without error
     --delete-missing-args   delete missing source args from destination
     --ignore-errors         delete even if there are I/O errors
     --force                 force deletion of directories even if not empty
     --max-delete=NUM        don't delete more than NUM files
     --max-size=SIZE         don't transfer any file larger than SIZE
     --min-size=SIZE         don't transfer any file smaller than SIZE
     --partial               keep partially transferred files
     --partial-dir=DIR       put a partially transferred file into DIR
     --delay-updates         put all updated files into place at transfer's end
 -m, --prune-empty-dirs      prune empty directory chains from the file-list
     --numeric-ids           don't map uid/gid values by user/group name
     --usermap=STRING        custom username mapping
     --groupmap=STRING       custom groupname mapping
     --chown=USER:GROUP      simple username/groupname mapping
     --timeout=SECONDS       set I/O timeout in seconds
     --contimeout=SECONDS    set daemon connection timeout in seconds
 -I, --ignore-times          don't skip files that match in size and mod-time
 -M, --remote-option=OPTION  send OPTION to the remote side only
     --size-only             skip files that match in size
     --modify-window=NUM     compare mod-times with reduced accuracy
 -T, --temp-dir=DIR          create temporary files in directory DIR
 -y, --fuzzy                 find similar file for basis if no dest file
     --compare-dest=DIR      also compare destination files relative to DIR
     --copy-dest=DIR         ... and include copies of unchanged files
     --link-dest=DIR         hardlink to files in DIR when unchanged
 -z, --compress              compress file data during the transfer
     --compress-level=NUM    explicitly set compression level
     --skip-compress=LIST    skip compressing files with a suffix in LIST
 -C, --cvs-exclude           auto-ignore files the same way CVS does
 -f, --filter=RULE           add a file-filtering RULE
 -F                          same as --filter='dir-merge /.rsync-filter'
                             repeated: --filter='- .rsync-filter'
     --exclude=PATTERN       exclude files matching PATTERN
     --exclude-from=FILE     read exclude patterns from FILE
     --include=PATTERN       don't exclude files matching PATTERN
     --include-from=FILE     read include patterns from FILE
     --files-from=FILE       read list of source-file names from FILE
 -0, --from0                 all *-from/filter files are delimited by 0s
 -s, --protect-args          no space-splitting; only wildcard special-chars
     --address=ADDRESS       bind address for outgoing socket to daemon
     --port=PORT             specify double-colon alternate port number
     --sockopts=OPTIONS      specify custom TCP options
     --blocking-io           use blocking I/O for the remote shell
     --stats                 give some file-transfer stats
 -8, --8-bit-output          leave high-bit chars unescaped in output
 -h, --human-readable        output numbers in a human-readable format
     --progress              show progress during transfer
 -P                          same as --partial --progress
 -i, --itemize-changes       output a change-summary for all updates
     --out-format=FORMAT     output updates using the specified FORMAT
     --log-file=FILE         log what we're doing to the specified FILE
     --log-file-format=FMT   log updates using the specified FMT
     --password-file=FILE    read daemon-access password from FILE
     --list-only             list the files instead of copying them
     --bwlimit=RATE          limit socket I/O bandwidth
     --stop-at=y-m-dTh:m     Stop rsync at year-month-dayThour:minute
     --time-limit=MINS       Stop rsync after MINS minutes have elapsed
     --outbuf=N|L|B          set output buffering to None, Line, or Block
     --write-batch=FILE      write a batched update to FILE
     --only-write-batch=FILE like --write-batch but w/o updating destination
     --read-batch=FILE       read a batched update from FILE
     --protocol=NUM          force an older protocol version to be used
     --iconv=CONVERT_SPEC    request charset conversion of filenames
     --checksum-seed=NUM     set block/file checksum seed (advanced)
     --noatime               do not alter atime when opening source files
 -4, --ipv4                  prefer IPv4
 -6, --ipv6                  prefer IPv6
     --version               print version number
(-h) --help                  show this help (-h is --help only if used alone)

Use "rsync --daemon --help" to see the daemon-mode command-line options.
Please see the rsync(1) and rsyncd.conf(5) man pages for full documentation.
See http://rsync.samba.org/ for updates, bug reports, and answers

LAB #5 - Backup-PC

Présentation

Cet utilitaire :

  • se base sur une interface graphique à base de scripts CGI,
  • ne nécessite pas de base de données ni de PHP.

Le serveur se réveille toutes les heures pour surveiller les postes clients spécifiés dans le fichier /etc/backuppc/hosts. Si le client surveillé est en phase de blackout (éteinte), le serveur passe au client suivant, sinon il examine la date de la dernière sauvegarde complète. Lorsque la date de dernière sauvegarde dépasse les 30 jours le serveur opère une nouvelle sauvegarde complète.

Important - Notez qu'il est possible d'utiliser l'utilitaire etherwake afin de réveiller une machine pour effectuer une sauvegarde.

Dans le cas contraire, le serveur examine la date de la dernière sauvegarde incrémentale. Lorsque la date de dernière sauvegarde incrémentale date de plus de 1 jour, le serveur opère une nouvelle sauvegarde incrémentale.

Important - Le serveur ne garde que 19 sauvegardes incrémentales à un instant t.

Installation du serveur

Installez Apache et Backup-PC :

root@debian9:~# apt-get install apache2 apache2-doc backuppc

Lors de l'installation, un mot de passe de type At0tJdU est créé pour l'utilisateur backuppc. Afin de modifier ce mot de passe, saisissez la commande suivante :

root@debian9:~# htpasswd /etc/backuppc/htpasswd backuppc
New password: fenestros
Re-type new password: fenestros
Updating password for user backuppc

Important : Notez que le mot de passe fenestros ne sera pas en clair.

Créez maintenant des paires de clefs sous l'identité de l'utilisateur backuppc :

root@debian9:~# su - backuppc
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/var/lib/backuppc/.ssh/id_rsa): 
Created directory '/var/lib/backuppc/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /var/lib/backuppc/.ssh/id_rsa.
Your public key has been saved in /var/lib/backuppc/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:iCdVMVIUTDX9+/TjKoJZfRhqEV3JD/vFi6zjXc2XvIM backuppc@debian9
The key's randomart image is:
+---[RSA 2048]----+
|      .=O++.o..  |
|       o.o o.+   |
|      .   .  .+. |
|     o . . . ...o|
|    o o S + + o.o|
|     o   + o +o++|
|        =   o .*=|
|       o . +.E.o=|
|          o.ooooo|
+----[SHA256]-----+
$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/var/lib/backuppc/.ssh/id_dsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /var/lib/backuppc/.ssh/id_dsa.
Your public key has been saved in /var/lib/backuppc/.ssh/id_dsa.pub.
The key fingerprint is:
SHA256:PKuHZblMtW5CYeQ09wTNXvlvJPcHmknzMHaQZWHlzRo backuppc@debian9
The key's randomart image is:
+---[DSA 1024]----+
|          .+ o=+.|
|        + . *ooo.|
|       + o + oE.+|
|       .+ . O +o+|
|       .S+ + X.=o|
|        *o. + . =|
|       B.o     ..|
|      ..= o      |
|      .. o       |
+----[SHA256]-----+
$ ssh-keygen -t ecdsa
Generating public/private ecdsa key pair.
Enter file in which to save the key (/var/lib/backuppc/.ssh/id_ecdsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /var/lib/backuppc/.ssh/id_ecdsa.
Your public key has been saved in /var/lib/backuppc/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:CCAYjAxsSF+xhRbxNwmqtWpcAMBVwmbEox+x/Nq4mns backuppc@debian9
The key's randomart image is:
+---[ECDSA 256]---+
|^+*+.*=o         |
|+BoOoo= . .      |
|. =o*+ . +       |
| . ++.... .      |
|  ..oo. S        |
|  ..o.           |
|   ++            |
|  oE .           |
| ++..            |
+----[SHA256]-----+
$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/var/lib/backuppc/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /var/lib/backuppc/.ssh/id_ed25519.
Your public key has been saved in /var/lib/backuppc/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:Tfnx5uB0JS5HeFy8cHNRP39PsugOk8vckYogcN7o8Zc backuppc@debian9
The key's randomart image is:
+--[ED25519 256]--+
|               o=|
|           . + ++|
|          o o B.*|
|         o . * +o|
|  . .   S . = B +|
|   + o     + X +o|
|    = o  .+ = o .|
|   . + .E+ B .   |
|    . ... =.+    |
+----[SHA256]-----+

Assemblez les clefs publiques dans un fichier authorized_keys :

$ cat .ssh/id_dsa.pub > authorized_keys 
$ cat .ssh/id_ecdsa.pub >> authorized_keys
$ cat .ssh/id_ed25519.pub >> authorized_keys
$ cat .ssh/id_rsa.pub >> authorized_keys
$ cat authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAACBAJCk66i1KAqkv5Idumv0/T2J4opXVWbs+0QAlzOJHHPQynaTwxpFQneCQnTNMBEvkXLuw3iu3bx42vyHo7K2lRbp/aivbGDJbRagYDQZYPKjGFSVKfugzAGMsnnl/fpaZruJprFpiZcecKUcC03i/qSvQpe5GuevjSHumthf37VHAAAAFQDbcCLFn6YmsjkZU0l1xSzV9FVsHQAAAIATz9o01NiqMNJemYKj9Lxf+k08mXpggO7nNraJ8vjkr5dHLOBzMpUEW8kBv1P+A1/y2OBgutZnjoKAW295I47z0y+EpILJPwBcG6xPBDKsa6dOBzXPio84aSyD2zp8IcUOtjAjc8AHBZX76FW0nNCZzMinx1LAFdEwNwNBg1x57QAAAIBPnWaf1nnLQ4yl2mr4Ig6OnVAljcr9fo0AF8TTkQOWXgQ3O2adBGMB74KUdlZhAhUX3HbvmJHDMYgTqwJA71MrJFpW6Pr3uVbRkh2Fv9TqnBpF6ilG2kkbI08qF0N87DkyqTVEWdyXJoHhKPZ0FJB4lDWElxphH4R42X/cuBk9nQ== backuppc@debian9
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFMnCZC0ZOkw5TTv9JC6xx42T45qtZ1Vme3nkClz80KqJ6tqz/xvQ8LEE6XZE6/sF18l51Dey253bmytL3KN1d0= backuppc@debian9
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJifkDkYf35YCcNfwI3GxNxD+7gxd5qjYVFoI1OHaGEe backuppc@debian9
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCj5XVKxV/4gH2eTIIpntQzzJSyyYvLsSn8J3wGhSVubKiaKfZ/miZUUB4l6Ww69EluAGpP8CjXz9fEiJHx1/NSo4lHSnug3l3N2FhdgiHmRB9wWVtPhkTU4lVRS9Y3nCjX2LAOu7s2fdDmK85aotQj2f7ArPQD+inWh2h4E2tvouzI4dLALX19WE+PPbKYhrpxQkexGL5OCw/v1IX4smRc+DiOWbdKuUZsCOUMtk7xKiRO1mwOQ4Bg/7r2RuAHRSbvt8cffdGUgAt2CzwjzXvvOzaHP1Xz58a/sPubScispzR7wZ6c3b78ytwUL/OKfEuRybedFrAgCg8lg2I2tkAN backuppc@debian9

En tant que l'utilisateur root, copiez le fichier authorized_keys vers le répertoire /var/www/html :

$ exit
root@debian9:~# cp /var/lib/backuppc/authorized_keys /var/www/html

Copiez les clefs vers /root/.ssh/ :

root@debian9:~# cp /var/lib/backuppc/.ssh/id_* /root/.ssh
root@debian9:~# ls -la .ssh
total 44
drwx------ 2 root root 4096 févr. 28 15:15 .
drwx------ 7 root root 4096 févr. 28 10:51 ..
-rw------- 1 root root  668 févr. 28 15:15 id_dsa
-rw-r--r-- 1 root root  606 févr. 28 15:15 id_dsa.pub
-rw------- 1 root root  227 févr. 28 15:15 id_ecdsa
-rw-r--r-- 1 root root  178 févr. 28 15:15 id_ecdsa.pub
-rw------- 1 root root  411 févr. 28 15:15 id_ed25519
-rw-r--r-- 1 root root   98 févr. 28 15:15 id_ed25519.pub
-rw------- 1 root root 1675 févr. 28 15:15 id_rsa
-rw-r--r-- 1 root root  398 févr. 28 15:15 id_rsa.pub
-rw-r--r-- 1 root root  444 févr. 18 12:35 known_hosts

Redémarrez le serveur Apache2 :

root@debian9:~# systemctl restart apache2
root@debian9:~# systemctl status apache2
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: 
   Active: active (running) since Thu 2019-02-28 15:17:56 CET; 10s ago
  Process: 20004 ExecStop=/usr/sbin/apachectl stop (code=exited, status=0/SUCCES
  Process: 20010 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCC
 Main PID: 20015 (apache2)
    Tasks: 56 (limit: 4915)
   CGroup: /system.slice/apache2.service
           ├─20015 /usr/sbin/apache2 -k start
           ├─20016 /usr/sbin/apache2 -k start
           ├─20017 /usr/sbin/apache2 -k start
           └─20018 /usr/sbin/apache2 -k start

févr. 28 15:17:56 debian9 systemd[1]: Stopped The Apache HTTP Server.
févr. 28 15:17:56 debian9 systemd[1]: Starting The Apache HTTP Server...
févr. 28 15:17:56 debian9 systemd[1]: Started The Apache HTTP Server.
lines 1-16/16 (END)

Installation du client

Rappelez-vous que la machine virtuelle CentOS_7 a un serveur SSH fonctionnel en cours d'exécution :

[root@centos7 ~]# systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-02-18 12:34:24 CET; 10h ago
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 1248 (sshd)
   CGroup: /system.slice/sshd.service
           ├─ 1248 /usr/sbin/sshd -D
           ├─17841 sshd: trainee [priv]
           ├─17913 sshd: trainee@pts/0
           ├─17914 -bash
           ├─31276 sshd: trainee [priv]
           ├─31356 sshd: trainee@pts/1
           └─31363 -bash

Feb 18 13:30:57 centos7.i2tch.loc sshd[26681]: Received disconnect from 1...
Feb 18 13:30:57 centos7.i2tch.loc sshd[26681]: Disconnected from 10.0.2.9...
Feb 18 16:44:35 centos7.i2tch.loc sshd[17841]: Failed password for traine...
Feb 18 16:44:38 centos7.i2tch.loc sshd[17841]: Accepted password for trai...
Feb 18 16:44:46 centos7.i2tch.loc su[17982]: (to root) trainee on pts/0
Feb 18 23:00:51 centos7.i2tch.loc sshd[23496]: Accepted publickey for tra...
Feb 18 23:01:03 centos7.i2tch.loc sshd[23503]: Received disconnect from 1...
Feb 18 23:01:03 centos7.i2tch.loc sshd[23503]: Disconnected from 10.0.2.9...
Feb 18 23:18:24 centos7.i2tch.loc sshd[31276]: Accepted password for trai...
Feb 18 23:18:49 centos7.i2tch.loc su[31519]: (to root) trainee on pts/1
Hint: Some lines were ellipsized, use -l to show in full.

Récupérez maintenant la clef publique à partir de la machine virtuelle Debian_9 :

[root@centos7 ~]# wget http://debian9.i2tch.loc/authorized_keys
--2019-02-18 23:22:52--  http://debian9.i2tch.loc/authorized_keys
Resolving debian9.i2tch.loc (debian9.i2tch.loc)... 10.0.2.9
Connecting to debian9.i2tch.loc (debian9.i2tch.loc)|10.0.2.9|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1280 (1.2K)
Saving to: ‘authorized_keys’

100%[======================================>] 1,280       --.-K/s   in 0s      

2019-02-18 23:22:52 (90.3 MB/s) - ‘authorized_keys’ saved [1280/1280]

Déplacez le fichier authorized_keys vers /root/.ssh :

[root@centos7 ~]# mkdir .ssh
[root@centos7 ~]# mv authorized_keys .ssh

Modifiez les permissions ainsi :

[root@centos7 ~]# chmod 700 .ssh
[root@centos7 ~]# chmod 600 .ssh/authorized_keys

A partir de la VM Debian_9, testez la connexion ssh en tant que root :

root@debian9:~# ssh root@centos7.i2tch.loc
\S
Kernel \r on an \m
Last login: Mon Feb 18 23:18:49 2019
[root@centos7 ~]# exit
déconnexion
Connection to centos7.i2tch.loc closed.
root@debian9:~# 

Utilisation

Dans l'interface graphique de la machine virtuelle Debian_9, lancez le navigateur Firefox ESR. Saisissez l'adresse http://debian_9.i2tch.loc/backuppc/index.cgi. Saisissez le nom d'utilisateur backuppc et le mot de passe fenestros. Vous obtiendrez une fenêtre similaire à celle-ci :

Validez la sauvegarde du mot de passe :

Cliquez sur Edit Config dans le menu de gauche. Vous obtiendrez une fenêtre similaire à celle-ci :

Cliquez sur le lien Xfer et choisissez la XferMethod rsync :

Cliquez sur le lien Hosts. Cliquez sur le bouton Add et ajoutez centos7.i2tch.loc :

Cliquez sur le lien Backup Settings et ajoutez centos7.i2tch.loc en ClientNameAlias :

Cliquez ensuite sur le bouton Save.

Cliquez sur le lien Schedule. Dans le menu déroulant à gauche Select a host …, sélectionnez l'entrée centos7.i2tch.loc. Vous obtiendrez une fenêtre similaire à celle-ci :

Lancez la sauvegarde en ligne de commande afin d'accepter la clef ECDSA :

$ /usr/share/backuppc/bin/BackupPC_dump -v -f centos7.i2tch.loc
cmdSystemOrEval: about to system /bin/ping -c 1 centos7.i2tch.loc
cmdSystemOrEval: finished: got output PING centos7.i2tch.loc (10.0.2.16) 56(84) bytes of data.
64 bytes from centos7.i2tch.loc (10.0.2.16): icmp_seq=1 ttl=64 time=0.260 ms

--- centos7.i2tch.loc ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.260/0.260/0.260/0.000 ms

cmdSystemOrEval: about to system /bin/ping -c 1 centos7.i2tch.loc
cmdSystemOrEval: finished: got output PING centos7.i2tch.loc (10.0.2.16) 56(84) bytes of data.
64 bytes from centos7.i2tch.loc (10.0.2.16): icmp_seq=1 ttl=64 time=0.222 ms

--- centos7.i2tch.loc ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.222/0.222/0.222/0.000 ms

CheckHostAlive: returning 0.222
full backup started for directory /
started full dump, share=/
Running: /usr/bin/ssh -q -x -l root centos7.i2tch.loc /usr/bin/rsync --server --sender --numeric-ids --perms --owner --group -D --links --hard-links --times --block-size=2048 --recursive --ignore-times . /
Xfer PIDs are now 20732
xferPids 20732
The authenticity of host 'centos7.i2tch.loc (10.0.2.16)' can't be established.
ECDSA key fingerprint is SHA256:RgOsp/XI7JHNq+oIfHKw+jkHdtTnBIh+Dd7kVmHRxtU.
Are you sure you want to continue connecting (yes/no)? yes
Got remote protocol 31
Negotiated protocol version 28
...
^CfileListReceive() failed
Done: 0 files, 0 bytes
Got fatal error during xfer (fileListReceive failed)
Backup aborted by user signal
Not saving this as a partial backup since it has fewer files than the prior one (got 0 and 0 files versus 0)
dump failed: fileListReceive failed

Retournez ensuite dans l'interface HTML pour lancer une sauvegarde de centos7.i2tch.loc en cliquant sur le bouton Start Full Backup :

Cliquez de nouveau sur le bouton Start Full Backup pour confirmer votre choix :

Retournez dans le terminal de connexion à la machine virtuelle Debian_9 et redevenez l'utilisateur root :

$ exit

Consultez le contenu du répertoire /var/lib/backuppc/pc/ :

root@debian9:~# ls /var/lib/backuppc/pc/
centos7.i2tch.loc  localhost

Consultez le contenu du répertoire /var/lib/backuppc/pc/centos7.i2tch.loc/ :

root@debian9:~# ls /var/lib/backuppc/pc/centos7.i2tch.loc/
LOCK  LOG.032019  new  NewFileList  XferLOG.bad.z  XferLOG.z

Consultez le contenu du fichier LOG :

root@debian9:~# cat /var/lib/backuppc/pc/centos7.i2tch.loc/LOG.032019 
2019-03-01 08:34:31 full backup started for directory /
2019-03-01 08:35:21 Aborting backup up after signal INT
2019-03-01 08:35:22 Got fatal error during xfer (fileListReceive failed)
2019-03-01 08:40:18 full backup started for directory /

Important - Notez le démarrage d'une sauvegarde complète de la machine virtuelle.

La sauvegarde est stockée dans le répertoire /var/lib/backuppc/pc/centos7.i2tch.loc/new/ :

root@debian9:~# ls  /var/lib/backuppc/pc/centos7.i2tch.loc/new/
f%2f
root@debian9:~# ls  /var/lib/backuppc/pc/centos7.i2tch.loc/new/f%2f/
fbin					   fdevice.map	flib64							   fmnt
fboot					   fetc		fliste-des-paquets_centos7.i2tch.loc_2019-02-18-16-53  fmontages.list
fcentos7.i2tch.loc.rpmdatabase.tar.gz  fgrub.cfg	fliste-des-paquets_centos7.i2tch.loc_2019-02-18-17-10  fopt
fcentral_backup				   fhome	flost+found						   fproc
fdev					   flib		fmedia
root@debian9:~# ls  /var/lib/backuppc/pc/centos7.i2tch.loc/new/f%2f/fboot/

Retournez dans l'interface HTML est cliquez sur le bouton Stop/Dequeue Backup :

Confirmez votre choix. Vous obtiendrez la fenêtre suivante :

Retournez à la page de centos7.i2tch.loc :

Cliquez sur le lien 0 dans la colonne Backup# :

Avant de poursuivre, supprimez les sauvegardes de backuppc :

root@debian9:~# rm -rf /var/lib/backuppc/pc/new/*

LAB #6 - Bacula

Bacula est un ensemble de programmes permettant de piloter les sauvegardes, les restaurations et les vérifications.

C'est une suite logicielle :

  • capable de fonctionner sur un seul serveur,
  • qui fonctionne en mode client/serveur,
  • modulaire.

Cette suite se découpe en quatre parties :

  • une ou plusieurs bases de données PostgreSQL, SQLite ou MySQL hebergeant le catalogue contenant, entre autre, les tâches, les chemins vers les données et les évènements,
  • un ou plusieurs directeurs pilotant l'ensemble des stratégies de sauvegarde et listant les clients,
  • un ou plusieurs services de stockage gérant un ensemble de volumes virtuels ou physiques,
  • les clients à sauvegarder.

Installation du serveur

A Faire : Supprimez la machine virtuelle Debian_9. Importez une nouvelle machine virtuelle Debian_9. Ajoutez un disque de type VDI, grand de 20Go et dénommé backup au contrôleur SATA. Mettez l'interface 1 dans le réseau NAT NatNetwork. Démarrez la machine virtuelle.

Modifiez le fichier /etc/hosts dans la machine virtuelle Debian_9 :

trainee@debian9:~$ su -
Mot de passe : fenestros
root@debian9:~# vi /etc/hosts
root@debian9:~# cat /etc/hosts
127.0.0.1	localhost
127.0.1.1	debian9.i2tch.loc	debian9
10.0.2.9        debian9.i2tch.loc
10.0.2.16       centos7.i2tch.loc

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Important : Notez que le mot de passe fenestros ne sera pas en clair.

Commencez par installer PostgreSQL :

root@debian9:~# apt-get install postgresql

Créez ensuite le rôle bacula dans postgresql :

root@debian9:~# su - postgres
postgres@debian9:~$ createuser -sdrP bacula
Saisir le mot de passe pour le nouveau rôle : 
Le saisir de nouveau : 
postgres@debian9:~$ exit
déconnexion

Important : Notez que le mot de passe fenestros ne sera pas en clair.

Installez maintenant bacula :

root@debian9:~# apt-get install bacula-server bacula-director-pgsql bacula-console bacula-common-pgsql bacula-client

Important - Lors de l'installation de bacula, il convient de répondre oui à la question concernant la création de la base de données PostgreSQL et ensuite d'indiquer l'hôte localhost et le mot de passe fenestros.

Creéz une seule partition sur /dev/sdb :

root@debian9:~# fdisk /dev/sdb

Bienvenue dans fdisk (util-linux 2.29.2).
Les modifications resteront en mémoire jusqu'à écriture.
Soyez prudent avant d'utiliser la commande d'écriture.


Commande (m pour l'aide) : n
Type de partition
   p   primaire (0 primaire, 0 étendue, 4 libre)
   e   étendue (conteneur pour partitions logiques)
Sélectionnez (p par défaut) : p
Numéro de partition (1-4, 1 par défaut) : 1
Premier secteur (2048-41943039, 2048 par défaut) : 
Dernier secteur, +secteurs ou +taille{K,M,G,T,P} (2048-41943039, 41943039 par défaut) : 

Une nouvelle partition 1 de type « Linux » et de taille 20 GiB a été créée.

Commande (m pour l'aide) : w
La table de partitions a été altérée.
Appel d'ioctl() pour relire la table de partitions.
Synchronisation des disques.

Créez un système de fichiers ext4 sur /dev/sdb1 :

root@debian9:~# mkfs.ext4 /dev/sdb1
mke2fs 1.43.4 (31-Jan-2017)
En train de créer un système de fichiers avec 5242624 4k blocs et 1310720 i-noeuds.
UUID de système de fichiers=a44860e8-a413-4705-9a50-a71a5f1e66f6
Superblocs de secours stockés sur les blocs : 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000

Allocation des tables de groupe : complété                        
Écriture des tables d'i-noeuds : complété                        
Création du journal (32768 blocs) : complété
Écriture des superblocs et de l'information de comptabilité du système de
fichiers : complété

Obtenez l'UUID du système de fichiers ainsi créé :

root@debian9:~# dumpe2fs /dev/sdb1 | grep UUID
dumpe2fs 1.43.4 (31-Jan-2017)
Filesystem UUID:          a44860e8-a413-4705-9a50-a71a5f1e66f6

Modifiez le fichier /etc/fstab :

root@debian9:~# vi /etc/fstab
root@debian9:~# cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=b29b93ed-8de4-4980-a407-15bba3ad09ba /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda5 during installation
UUID=479bcf18-634c-42af-bb34-d9b7c97230d1 none            swap    sw              0       0
/dev/sr0        /media/cdrom0   udf,iso9660 user,noauto     0       0
UUID=ed81abb5-dfb1-4fad-a011-1e0faaf37e5c	/backup	ext4	defaults	0	0	

Montez le système de fichiers sur /backup :

root@debian9:~# mkdir /backup
root@debian9:~# mount -a
root@debian9:~# mount | grep sdb1
/dev/sdb1 on /backup type ext4 (rw,relatime,data=ordered)

Créez les répertoires /backup/Volumes et /backup/Restore :

root@debian9:~# mkdir /backup/Volumes
root@debian9:~# mkdir /backup/Restore

Modifiez les permissions sur le répertoire /backup :

root@debian9:~# chown -R bacula:bacula /backup
root@debian9:~# chmod -R 700 /backup

Configuration du serveur

Ouvrez en édition le fichier /etc/bacula/bacula-dir.conf. Trouvez la section Job comportant le nom BackupClient1 :

...
#
# Define the main nightly save backup job
#   By default, this job will back up to disk in /nonexistant/path/to/file/archive/dir
Job {
  Name = "BackupClient1"
  JobDefs = "DefaultJob"
}
...

Modifiez la valeur de la directive Name en BackupLocalFiles :

...
#
# Define the main nightly save backup job
#   By default, this job will back up to disk in /nonexistant/path/to/file/archive/dir
Job {
  Name = "BackupLocalFiles"
  JobDefs = "DefaultJob"
}
...

Trouvez maintenant la section Job comportant le nom RestoreFiles :

...
#
# Standard Restore template, to be changed by Console program
#  Only one such job is needed for all Jobs/Clients/Storage ...
#
Job {
  Name = "RestoreFiles"
  Type = Restore
  Client=debian9-fd
  FileSet="Full Set"
  Storage = File1
  Pool = File
  Messages = Standard
  Where = /nonexistant/path/to/file/archive/dir/bacula-restores
}
...

Modifiez la valeur de la directive Name en RestoreLocalFiles et la valeur de la directive Where en /backup/Restore :

...
#
# Standard Restore template, to be changed by Console program
#  Only one such job is needed for all Jobs/Clients/Storage ...
#
Job {
  Name = "RestoreLocalFiles"
  Type = Restore
  Client=debian9-fd
  FileSet="Full Set"
  Storage = File1
  Pool = File
  Messages = Standard
  Where = /backup/Restore
}
...

Trouvez maintenant la section FileSet comportant le nom Full Set :

...
# List of files to be backed up
FileSet {
  Name = "Full Set"
  Include {
    Options {
      signature = MD5
    }
#
#  Put your list of files here, preceded by 'File =', one per line
#    or include an external list with:
#
#    File = <file-name
#
#  Note: / backs up everything on the root partition.
#    if you have other partitions such as /usr or /home
#    you will probably want to add them too.
#
#  By default this is defined to point to the Bacula binary
#    directory to give a reasonable FileSet to backup to
#    disk storage during initial testing.
#
    File = /usr/sbin
  }

#
# If you backup the root directory, the following two excluded
#   files can be useful
#
  Exclude {
    File = /var/lib/bacula
    File = /nonexistant/path/to/file/archive/dir
    File = /proc
    File = /tmp
    File = /sys
    File = /.journal
    File = /.fsck
  }
}
...

Modifiez la valeur de la directive File = /usr/sbin en File = /, ajoutez la directive compression = GZIP ainsi que la directive File = /backup dans la section Exclude. Supprimez la directive File = /nonexistant/path/to/file/archive/dir de la même section :

...
# List of files to be backed up
FileSet {
  Name = "Full Set"
  Include {
    Options {
      signature = MD5
      compression = GZIP
    }
    File = /
  }
  Exclude {
    File = /var/lib/bacula
    File = /backup
    File = /proc
    File = /tmp
    File = /sys
    File = /.journal
    File = /.fsck
  }
}
...

Important - La signature de type md5 ou sha1 permet de garantir l'intégrité des pièces sauvegardées. La compression peut être de type GZIP ou LZO. La section contient aussi des exclusions qui peuvent être exprimées soit au niveau des répertoires, par exemple /backup, soit au niveau des extensions de fichiers.

Modifiez maintenant la section Storage :

...
# Definition of file Virtual Autochanger device
Storage {
  Name = File1
# Do not use "localhost" here
# Address = localhost                # N.B. Use a fully qualified name here
  Address = debian9
  SDPort = 9103
  Password = "ry2gcjqpunuvbTHTZuUuKeMNODtS3FO0l"
  Device = FileChgr1
  Media Type = File1
  Maximum Concurrent Jobs = 10        # run up to 10 jobs a the same time
...

Important - Notez la modification de la directive Address qui prend la valeur soit de l'adresse IP de la machine virtuelle Debian_9, soit debian9. Les noeuds de stockage peuvent se trouver sur des serveurs différents.

Trouvez maintenant la section Pool comportant le nom File et modifiez la directive Label Format = Vol- en Label Format = Local- :

...
# File Pool definition
Pool {
  Name = File
  Pool Type = Backup
  Recycle = yes                       # Bacula can automatically recycle Volumes
  AutoPrune = yes                     # Prune expired volumes
  Volume Retention = 365 days         # one year
  Maximum Volume Bytes = 50G          # Limit Volume size to something reasonable
  Maximum Volumes = 100               # Limit number of Volumes in Pool
  Label Format = "Local-"             # Auto label
}
...

Chaque pool possède des propriétés spécifiques :

Propriété Description
Recycle Permet de recycler les volumes quand il n'y a plus d'espace ou quand celles-ci sont trop anciennes.
Autoprune Permet de recycler les cartouches quand il n'y a plus d'espace disponible.
Volume Retention Spécifie la période de retention des sauvegardes sur les volumes.
Maximum Volume Bytes Spécifie la taille maximale des cartouches, généralement comprise entre 50 et 300Go.
Maximum Volumes Spécifie le nombre maximum de cartouches.
Label Format Spécifie le préfixe de nommage des volumes virtuels.

La section Catalog permet de stipuler l'adresse IP du serveur PostgreSQL :

...
# Generic catalog service
Catalog {
  Name = MyCatalog
  dbname = "bacula"; DB Address = "localhost"; dbuser = "bacula"; dbpassword = "fenestros"
}
...

Dernièrement, notez la présence de la section Schedule qui spécifie les ordonnoncements programmés :

...
#
# When to do the backups, full backup on first sunday of the month,
#  differential (i.e. incremental since full) every other sunday,
#  and incremental backups other days
Schedule {
  Name = "WeeklyCycle"
  Run = Full 1st sun at 23:05
  Run = Differential 2nd-5th sun at 23:05
  Run = Incremental mon-sat at 23:05
}

# This schedule does the catalog. It starts after the WeeklyCycle
Schedule {
  Name = "WeeklyCycleAfterBackup"
  Run = Full sun-sat at 23:10
}
...

La variable run permet de spécifier la tâche à déclencher à un moment précis :

  • Full,
  • Differential,
  • Incremental.

La section Schedule peut aussi contenir les directives suivantes :

Propriété Description
FullPool Spécifie le pool de volumes sur lesquels effectuer les sauvegardes.
IncrementalPool Spécifie le pool de volumes sur lesquels effectuer les sauvegardes incrémentales.
Pool Spécifie le pool par défaut pour tous les types de sauvegardes.
Storage Spécifie le noeud de stockage où rediriger les fichiers de sauvegardes.

Vérifiez la syntaxe du fichier /etc/bacula/bacula-dir.conf :

root@debian9:~# bacula-dir -tc /etc/bacula/bacula-dir.conf

Configuration du daemon de stockage

Ouvrez en édition le fichier /etc/bacula/bacula-sd.conf.

root@debian9:~# vi /etc/bacula/bacula-sd.conf

Configuration de la ressource de stockage

Trouvez la section Storage :

...
Storage {                             # definition of myself
  Name = debian9-sd
  SDPort = 9103                  # Director's port
  WorkingDirectory = "/var/lib/bacula"
  Pid Directory = "/run/bacula"
  Maximum Concurrent Jobs = 20
  SDAddress = 127.0.0.1
}
...

Modifiez la directive SDAddress :

Storage {                             # definition of myself
  Name = debian-sd
  SDPort = 9103                  # Director's port
  WorkingDirectory = "/var/lib/bacula"
  Pid Directory = "/var/run/bacula"
  Maximum Concurrent Jobs = 20
  SDAddress = debian9
}

Configuration du periphérique de stockage

Cherchez ensuite la section Device dont la valeur de la directive Name est FileChgr1-Dev1 :

Device {
  Name = FileChgr1-Dev1
  Media Type = File1
  Archive Device = /nonexistant/path/to/file/archive/dir
  LabelMedia = yes;                   # lets Bacula label unlabeled media
  Random Access = Yes;
  AutomaticMount = yes;               # when device opened, read it
  RemovableMedia = no;
  AlwaysOpen = no;
  Maximum Concurrent Jobs = 5
}

Modifiez la directive Archive Device :

Device {
  Name = FileChgr1-Dev1
  Media Type = File1
  Archive Device = /backup/Volumes
  LabelMedia = yes;                   # lets Bacula label unlabeled media
  Random Access = Yes;
  AutomaticMount = yes;               # when device opened, read it
  RemovableMedia = no;
  AlwaysOpen = no;
  Maximum Concurrent Jobs = 5
}

Testez la syntaxe du fichier /etc/bacula/bacula-sd.conf

Testez la syntaxe du fichier /etc/bacula/bacula-sd.conf avc la commande suivante :

root@debian9:~# bacula-sd -tc /etc/bacula/bacula-sd.conf
root@debian9:~# 

Redémarrez le service du Director Bacula ainsi qu le service du daemon de stockage de Bacula:

root@debian9:~# systemctl restart bacula-director
root@debian9:~# systemctl restart bacula-sd

Sauvegarder le serveur

Pour tester la configuration il convient d'utiliser la console Bacula :

root@debian9:~# bconsole
Connecting to Director localhost:9101
1000 OK: 102 debian9-dir Version: 7.4.4 (20 September 2016)
Enter a period to cancel a command.
*

Entrez la commande label :

*label
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
The defined Storage resources are:
     1: File1
     2: File2
Select Storage resource (1-2): 

Indiquez un nom de volume :

Select Storage resource (1-2): 1
Enter new Volume name: backup-90
Defined Pools:
     1: Default
     2: File
     3: Scratch
Select the Pool (1-3):  

Sélectionnez le Pool File :

Select the Pool (1-3): 2
Connecting to Storage daemon File1 at debian9:9103 ...
Sending label command for Volume "backup-90" Slot 0 ...
3000 OK label. VolBytes=199 VolABytes=0 VolType=1 Volume="backup-90" Device="FileChgr1-Dev1" (/backup/Volumes)
Catalog record for Volume "backup-90", Slot 0  successfully created.
Requesting to mount FileChgr1 ...
3906 File device ""FileChgr1-Dev1" (/backup/Volumes)" is always mounted.
*

Exécutez la sauvegarde :

*run
A job name must be specified.
The defined Job resources are:
     1: BackupLocalFiles
     2: BackupCatalog
     3: RestoreLocalFiles
Select Job resource (1-3): 

Choisissez BackupLocalFiles :

Select Job resource (1-3): 1
Run Backup job
JobName:  BackupLocalFiles
Level:    Incremental
Client:   debian9-fd
FileSet:  Full Set
Pool:     File (From Job resource)
Storage:  File1 (From Job resource)
When:     2019-03-01 13:41:50
Priority: 10
OK to run? (yes/mod/no): 

Confirmez avec yes :

OK to run? (yes/mod/no): yes
Job queued. JobId=1
You have messages.
*

Consultez les messages :

*messages
01-mars 13:42 debian9-dir JobId 1: No prior Full backup Job record found.
01-mars 13:42 debian9-dir JobId 1: No prior or suitable Full backup found in catalog. Doing FULL backup.
01-mars 13:42 debian9-dir JobId 1: Start Backup JobId 1, Job=BackupLocalFiles.2019-03-01_13.42.39_03
01-mars 13:42 debian9-dir JobId 1: Using Device "FileChgr1-Dev1" to write.
01-mars 13:42 debian9-sd JobId 1: Wrote label to prelabeled Volume "backup-90" on file device "FileChgr1-Dev1" (/backup/Volumes)
*

Consultez le statut du director :

*status director
debian9-dir Version: 7.4.4 (20 September 2016) x86_64-pc-linux-gnu debian 9.0
Daemon started 01-mars019 13:35, conf reloaded 01-mars-2019 13:35:17
 Jobs: run=0, running=1 mode=0
 Heap: heap=413,696 smbytes=73,952 max_bytes=74,321 bufs=272 max_bufs=276

Scheduled Jobs:
Level          Type     Pri  Scheduled          Job Name           Volume
===================================================================================
Incremental    Backup    10  01-mars019 23:05   BackupLocalFiles   backup-90
Full           Backup    11  01-mars019 23:10   BackupCatalog      backup-90
====

Running Jobs:
Console connected at 01-mars019 13:37
 JobId  Type Level     Files     Bytes  Name              Status
======================================================================
     1  Back Full      2,922    33.69 M BackupLocalFiles  is running
====
No Terminated Jobs.
====
*

Important - Notez que le job 1 ci-dessus est en cours d'exécution.

Consultez la liste des jobs :

*list jobs
Using Catalog "MyCatalog"
+-------+------------------+---------------------+------+-------+----------+----------+-----------+
| jobid | name             | starttime           | type | level | jobfiles | jobbytes | jobstatus |
+-------+------------------+---------------------+------+-------+----------+----------+-----------+
|     1 | BackupLocalFiles | 2019-03-01 13:42:41 | B    | F     |        0 |        0 | R         |
+-------+------------------+---------------------+------+-------+----------+----------+-----------+
*

La liste des valeurs du champ jobstatus est la suivante :

jobstatus | jobstatuslong 
-----------+--------------------------------- 
C | Created, not yet running 
R | Running 
B | Blocked 
T | Completed successfully 
E | Terminated with errors 
e | Non-fatal error 
f | Fatal error 
D | Verify found differences 
A | Canceled by user 
F | Waiting for Client 
S | Waiting for Storage daemon 
m | Waiting for new media 
M | Waiting for media mount 
s | Waiting for storage resource 
j | Waiting for job resource 
c | Waiting for client resource 
d | Waiting on maximum jobs 
t | Waiting on start time 
p | Waiting on higher priority jobs 

A l'issue de 30 minutes, exécutez la commande status director de nouveau :

*status director
debian9-dir Version: 7.4.4 (20 September 2016) x86_64-pc-linux-gnu debian 9.0
Daemon started 01-mars019 13:35, conf reloaded 01-mars-2019 13:35:17
 Jobs: run=1, running=0 mode=0
 Heap: heap=413,696 smbytes=86,926 max_bytes=94,490 bufs=282 max_bufs=314

Scheduled Jobs:
Level          Type     Pri  Scheduled          Job Name           Volume
===================================================================================
Incremental    Backup    10  01-mars019 23:05   BackupLocalFiles   backup-90
Full           Backup    11  01-mars019 23:10   BackupCatalog      backup-90
====

Running Jobs:
Console connected at 01-mars019 13:37
No Jobs running.
====

Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name 
====================================================================
     1  Full    105,847    1.201 G  OK       01-mars019 14:05 BackupLocalFiles

====
*

Listez les jobs de nouveau :

*list jobs
+-------+------------------+---------------------+------+-------+----------+---------------+-----------+
| jobid | name             | starttime           | type | level | jobfiles | jobbytes      | jobstatus |
+-------+------------------+---------------------+------+-------+----------+---------------+-----------+
|     1 | BackupLocalFiles | 2019-03-01 13:42:41 | B    | F     |  105,847 | 1,201,471,625 | T         |
+-------+------------------+---------------------+------+-------+----------+---------------+-----------+
*

Important - Notez que le job 1 ci-dessus a términé.

Consultez les messages en attente :

*messages
01-mars 14:01 debian9-fd JobId 1:      /dev is a different filesystem. Will not descend from / into it.
01-mars 14:03 debian9-fd JobId 1:      /run is a different filesystem. Will not descend from / into it.
01-mars 14:05 debian9-sd JobId 1: Elapsed time=00:22:28, Transfer rate=901.8 K Bytes/second
01-mars 14:05 debian9-sd JobId 1: Sending spooled attrs to the Director. Despooling 31,224,614 bytes ...
01-mars 14:05 debian9-dir JobId 1: Bacula debian9-dir 7.4.4 (202Sep16):
  Build OS:               x86_64-pc-linux-gnu debian 9.0
  JobId:                  1
  Job:                    BackupLocalFiles.2019-03-01_13.42.39_03
  Backup Level:           Full (upgraded from Incremental)
  Client:                 "debian9-fd" 7.4.4 (202Sep16) x86_64-pc-linux-gnu,debian,9.0
  FileSet:                "Full Set" 2019-03-01 13:42:39
  Pool:                   "File" (From Job resource)
  Catalog:                "MyCatalog" (From Client resource)
  Storage:                "File1" (From Job resource)
  Scheduled time:         01-mars-2019 13:41:50
  Start time:             01-mars-2019 13:42:41
  End time:               01-mars-2019 14:05:14
  Elapsed time:           22 mins 33 secs
  Priority:               10
  FD Files Written:       105,847
  SD Files Written:       105,847
  FD Bytes Written:       1,201,471,625 (1.201 GB)
  SD Bytes Written:       1,215,650,509 (1.215 GB)
  Rate:                   888.0 KB/s
  Software Compression:   59.6% 2.5:1
  Snapshot/VSS:           no
  Encryption:             no
  Accurate:               no
  Volume name(s):         backup-90
  Volume Session Id:      1
  Volume Session Time:    1551443731
  Last Volume Bytes:      1,220,016,902 (1.220 GB)
  Non-fatal FD errors:    0
  SD Errors:              0
  FD termination status:  OK
  SD termination status:  OK
  Termination:            Backup OK

01-mars 14:05 debian9-dir JobId 1: Begin pruning Jobs older than 6 months .
01-mars 14:05 debian9-dir JobId 1: No Jobs found to prune.
01-mars 14:05 debian9-dir JobId 1: Begin pruning Files.
01-mars 14:05 debian9-dir JobId 1: No Files found to prune.
01-mars 14:05 debian9-dir JobId 1: End auto prune.

*

Important - Notez la valeur de Termination - Backup OK.

Restaurer la sauvegarde du director

Pour restaurer cette sauvegarde vers /backup/Restore, tapez la commande restore all :

*restore all

First you select one or more JobIds that contain files
to be restored. You will be presented several methods
of specifying the JobIds. Then you will be allowed to
select which files from those JobIds are to be restored.

To select the JobIds, you have the following choices:
     1: List last 20 Jobs run
     2: List Jobs where a given File is saved
     3: Enter list of comma separated JobIds to select
     4: Enter SQL list command
     5: Select the most recent backup for a client
     6: Select backup for a client before a specified time
     7: Enter a list of files to restore
     8: Enter a list of files to restore before a specified time
     9: Find the JobIds of the most recent backup for a client
    10: Find the JobIds for a backup for a client before a specified time
    11: Enter a list of directories to restore for found JobIds
    12: Select full restore to a specified Job date
    13: Cancel
Select item:  (1-13): 

Sélectionnez le choix 5 :

Select item:  (1-13): 5
Automatically selected Client: debian9-fd
Automatically selected FileSet: Full Set
+-------+-------+----------+---------------+---------------------+------------+
| jobid | level | jobfiles | jobbytes      | starttime           | volumename |
+-------+-------+----------+---------------+---------------------+------------+
|     1 | F     |  105,847 | 1,201,471,625 | 2019-03-01 13:42:41 | backup-90  |
+-------+-------+----------+---------------+---------------------+------------+
You have selected the following JobId: 1

Building directory tree for JobId(s) 1 ...  ++++++++++++++++++++++++++++++++++++++++++++++
98,347 files inserted into the tree and marked for extraction.

You are now entering file selection mode where you add (mark) and
remove (unmark) files to be restored. No files are initially added, unless
you used the "all" keyword on the command line.
Enter "done" to leave this mode.

cwd is: /
$ 

Au prompt, tapez la commande help afin de consulter la liste des commandes disponible dans le shell bacula :

cwd is: /
$ help
  Command    Description
  =======    ===========
  add        add dir/file to be restored recursively, wildcards allowed
  cd         change current directory
  count      count marked files in and below the cd
  delete     delete dir/file to be restored recursively in dir
  dir        long list current directory, wildcards allowed
  done       leave file selection mode
  estimate   estimate restore size
  exit       same as done command
  find       find files, wildcards allowed
  help       print help
  ls         list current directory, wildcards allowed
  lsmark     list the marked files in and below the cd
  mark       mark dir/file to be restored recursively, wildcards allowed
  markdir    mark directory name to be restored (no files)
  pwd        print current working directory
  unmark     unmark dir/file to be restored recursively in dir
  unmarkdir  unmark directory name only no recursion
  quit       quit and do not do restore
  ?          print help

$ 

Tapez la commande ls et notez que l'ensemble des fichiers ont été pré-selectionnés avec une étoile :

$ ls
*
*bin/
*boot/
*dev
*etc/
*home/
*initrd.img
*initrd.img.old
*lib/
*lib64/
*lost+found
*media/
*mnt
*opt
*root/
*run
*sbin/
*srv
*test/
*usr/
*var/
*vmlinuz
*vmlinuz.old
$ 

Tapez la commande done pour valider la restauration des fichiers pré-selectionnés :

$ done
Bootstrap records written to /var/lib/bacula/debian9-dir.restore.1.bsr
Bootstrap records written to /var/lib/bacula/debian9-dir.restore.1.bsr

The Job will require the following (*=>InChanger):
   Volume(s)                 Storage(s)                SD Device(s)
===========================================================================
   
    backup-90                 File1                     FileChgr1                

Volumes marked with "*" are in the Autochanger.


105,847 files selected to be restored.

Run Restore job
JobName:         RestoreLocalFiles
Bootstrap:       /var/lib/bacula/debian9-dir.restore.1.bsr
Where:           /backup/Restore
Replace:         Always
FileSet:         Full Set
Backup Client:   debian9-fd
Restore Client:  debian9-fd
Storage:         File1
When:            2019-03-01 14:19:28
Catalog:         MyCatalog
Priority:        10
Plugin Options:  
OK to run? (yes/mod/no): 
<code>

Tapez **yes** pour démarrer la restauration :

<code>
OK to run? (yes/mod/no): yes
Job queued. JobId=2
*

Consultez les jobs :

*list jobs
+-------+-------------------+---------------------+------+-------+----------+---------------+-----------+
| jobid | name              | starttime           | type | level | jobfiles | jobbytes      | jobstatus |
+-------+-------------------+---------------------+------+-------+----------+---------------+-----------+
|     1 | BackupLocalFiles  | 2019-03-01 13:42:41 | B    | F     |  105,847 | 1,201,471,625 | T         |
|     2 | RestoreLocalFiles | 2019-03-01 14:20:37 | R    | F     |        0 |             0 | R         |
+-------+-------------------+---------------------+------+-------+----------+---------------+-----------+
You have messages.
*

Consultez le statut du director :

*status director
debian9-dir Version: 7.4.4 (20 September 2016) x86_64-pc-linux-gnu debian 9.0
Daemon started 01-mars019 13:35, conf reloaded 01-mars-2019 13:35:17
 Jobs: run=1, running=1 mode=0
 Heap: heap=290,816 smbytes=84,379 max_bytes=20,750,031 bufs=298 max_bufs=314

Scheduled Jobs:
Level          Type     Pri  Scheduled          Job Name           Volume
===================================================================================
Incremental    Backup    10  01-mars019 23:05   BackupLocalFiles   backup-90
Full           Backup    11  01-mars019 23:10   BackupCatalog      backup-90
====

Running Jobs:
Console connected at 01-mars019 13:37
 JobId  Type Level     Files     Bytes  Name              Status
======================================================================
     2  Rest Rest          0         0  RestoreLocalFiles is running
====

Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name 
====================================================================
     1  Full    105,847    1.201 G  OK       01-mars019 14:05 BackupLocalFiles

====
*

Important - Notez que le job 2 ci-dessus est en cours d'exécution.

A l'issue de 10 minutes, exécutez la commande status director de nouveau :

*status director
debian9-dir Version: 7.4.4 (20 September 2016) x86_64-pc-linux-gnu debian 9.0
Daemon started 01-mars019 13:35, conf reloaded 01-mars-2019 13:35:17
 Jobs: run=2, running=0 mode=0
 Heap: heap=290,816 smbytes=82,877 max_bytes=20,750,031 bufs=278 max_bufs=314

Scheduled Jobs:
Level          Type     Pri  Scheduled          Job Name           Volume
===================================================================================
Incremental    Backup    10  01-mars019 23:05   BackupLocalFiles   backup-90
Full           Backup    11  01-mars019 23:10   BackupCatalog      backup-90
====

Running Jobs:
Console connected at 01-mars019 13:37
No Jobs running.
====

Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name 
====================================================================
     1  Full    105,847    1.201 G  OK       01-mars019 14:05 BackupLocalFiles
     2  Restore  105,847    3.007 G  OK       01-mars019 14:23 RestoreLocalFiles

====
*exit

Sauvegarder un client

Afin d'organiser les fichiers de configuration de Bacula, créez le répertoire /etc/bacula/conf.d dans la machine virtuelle Debian_9 :

root@debian9:~# mkdir /etc/bacula/conf.d

Editez la fin du fichier /etc/bacula/bacula-dir.conf en ajoutant la ligne qui permettra d'inclure les fichiers *.conf du répertoire /etc/bacula/conf.d dans la configuration de Bacula :

root@debian9:~# vi /etc/bacula/bacula-dir.conf 
root@debian9:~# cat /etc/bacula/bacula-dir.conf 
...
#
# Restricted console used by tray-monitor to get the status of the director
#
Console {
  Name = debian9-mon
  Password = "jWJdcTIJWn0DAf9X38tmc6u6_fvAv5Ft7"
  CommandACL = status, .status
}
@|"find /etc/bacula/conf.d -name '*.conf' -type f -exec echo @{} \;"

Créez maintenant le fichier /etc/bacula/conf.d/pools.conf suivant :

root@debian9:~# cat /etc/bacula/conf.d/pools.conf
Pool {
  Name = RemoteFile
  Pool Type = Backup
  Label Format = Remote-
  Recycle = yes                       
  AutoPrune = yes                     
  Volume Retention = 365 days        
    Maximum Volume Bytes = 50G       
  Maximum Volumes = 100             
}

Chaque pool possède des propriétés spécifiques :

Propriété Description
Recycle Permet de recycler les volumes quand il n'y a plus d'espace ou quand celles-ci sont trop anciennes.
Autoprune Permet de recycler les cartouches quand il n'y a plus d'espace disponible.
Volume Retention Spécifie la période de retention des sauvegardes sur les volumes.
Maximum Volume Bytes Spécifie la taille maximale des cartouches, généralement comprise entre 50 et 300Go.
Maximum Volumes Spécifie le nombre maximum de cartouches.
LabelFormat Spécifie le préfixe de nommage des volumes virtuels.

Créer maintenant le fichier /etc/bacula/conf.d/filesets.conf qui sera utilisé pour sauvegarder le client :

root@debian9:~# cat /etc/bacula/conf.d/filesets.conf
FileSet {
  Name = "Home and Etc"
  Include {
    Options {
      signature = MD5
      compression = GZIP
    }
    File = /home
    File = /etc
  }
  Exclude {
    File = /home/trainee/not_important
  }
}

Modifiez le fichier /etc/hosts :

root@debian9:~# cat /etc/hosts
127.0.0.1	localhost
#127.0.1.1	debian9.i2tch.loc	debian9
10.0.2.9        debian9.i2tch.loc	debian9
10.0.2.16       centos7.i2tch.loc	centos7

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Dans la machine virtuelle CentOS_7, installez le Bacula File Daemon (FD) :

[root@centos7 ~]# yum install bacula-client

Créez le fichier qui sera exclu :

[root@centos7 ~]# touch /home/trainee/not_important

Modifiez le fichier /etc/hosts de la machine virtuelle CentOS_7 :

[root@centos7 ~]# cat /etc/hosts
127.0.0.1		localhost.localdomain localhost
::1		localhost6.localdomain6 localhost6
127.0.1.1	centos7.i2tch.loc centos7
10.0.2.9	debian9.i2tch.loc debian9
10.0.2.16	centos7.i2tch.loc centos7

Générez un mot de passe aléatoire :

[root@centos7 ~]# date +%s | sha256sum | base64 | head -c 33 ; echo
YTczMzk0NDRhNmJjZDIxMDc4YWM4ZGExO

A Faire - Copiez le mot de passe.

Ouvrez maintenant le fichier /etc/bacula/bacula-fd.conf de la machine virtuelle CentOS_7 et modifiez les deux sections Director :

# List Directors who are permitted to contact this File daemon
#
Director {
  Name = debian9-dir
  Password = "YTczMzk0NDRhNmJjZDIxMDc4YWM4ZGExO"
}

#
# Restricted Director, used by tray-monitor to get the
#   status of the file daemon
#
Director {
  Name = debian9-mon
  Password = "YTczMzk0NDRhNmJjZDIxMDc4YWM4ZGExO"
  Monitor = yes
}
...

Important - Notez que le mot de passe est celui copié dans l'étape précédente.

Ensuite, modifiez la valeur des variables Name et FDAddress dans la section FileDaemon :

...
#
# "Global" File daemon configuration specifications
#
FileDaemon {                          # this is me
  Name = centos7.i2tch.loc-fd
  FDport = 9102                  # where we listen for the director
  WorkingDirectory = /var/spool/bacula
  Pid Directory = /var/run
  Maximum Concurrent Jobs = 20
  FDAddress = 10.0.2.16
}
...

Dernièrement, configurez la section Messages pour envoyer les traces de la journalisation au serveur :

...
# Send all messages except skipped files back to Director
Messages {
  Name = Standard
  director = debian9.i2tch.loc = all, !skipped, !restored
}
...

Vérifiez maintenant que la configuration ne comporte pas d'erreurs :

[root@centos7 ~]# bacula-fd -tc /etc/bacula/bacula-fd.conf
[root@centos7 ~]# 

Activez et démarrez le service bacula-fd :

[root@centos7 ~]# systemctl status bacula-fd
● bacula-fd.service - Bacula-FileDaemon, a Backup-client
   Loaded: loaded (/usr/lib/systemd/system/bacula-fd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:bacula-fd(8)
[root@centos7 ~]# systemctl enable bacula-fd
Created symlink from /etc/systemd/system/multi-user.target.wants/bacula-fd.service to /usr/lib/systemd/system/bacula-fd.service.
[root@centos7 ~]# systemctl start bacula-fd
[root@centos7 ~]# systemctl status bacula-fd
● bacula-fd.service - Bacula-FileDaemon, a Backup-client
   Loaded: loaded (/usr/lib/systemd/system/bacula-fd.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2019-03-01 14:11:16 CET; 3s ago
     Docs: man:bacula-fd(8)
 Main PID: 24458 (bacula-fd)
   CGroup: /system.slice/bacula-fd.service
           └─24458 /usr/sbin/bacula-fd -f -c /etc/bacula/bacula-fd.conf -u root -g root

Mar 01 14:11:16 centos7.fenestros.loc systemd[1]: Started Bacula-FileDaemon, a Backup-client.

Dernièrement, créez un répertoire pour recevoir les restaurations du serveur Bacula :

[root@centos7 ~]# mkdir -p /bacula/restore
[root@centos7 ~]# chown -R bacula:bacula /bacula
[root@centos7 ~]# chmod -R 700 /bacula

Revenez à la machine virtuelle Debian_9 et créez le fichier /etc/bacula/conf.d/clients.conf :

root@debian9:~# vi /etc/bacula/conf.d/clients.conf
root@debian9:~# cat /etc/bacula/conf.d/clients.conf
Client {
  Name = centos7.i2tch.loc-fd
  Address = centos7.i2tch.loc
  FDPort = 9102 
  Catalog = MyCatalog
  Password = "YTczMzk0NDRhNmJjZDIxMDc4YWM4ZGExO" 
  File Retention = 30 days
  Job Retention = 6 months 
  AutoPrune = yes                   
}

Job {
  Name = "BackupClientHost"
  JobDefs = "DefaultJob"
  Client = centos7.i2tch.loc-fd
  Pool = RemoteFile
  FileSet="Home and Etc"
}

Important - Notez que la valeur de la directive Password est celle de la directive Password de la section Director du fichier /etc/bacula/bacula-fd.conf du client.

Vérifiez la configuration de Bacula :

root@debian9:~# bacula-dir -tc /etc/bacula/bacula-dir.conf
root@debian9:~#  

Redémarrez le service du director :

root@debian9:~# systemctl restart bacula-director

Connectez-vous au bconsole :

root@debian9:~# bconsole
Connecting to Director localhost:9101
1000 OK: 102 debian9-dir Version: 7.4.4 (20 September 2016)
Enter a period to cancel a command.
*

Consultez le statut des clients :

*status client
The defined Client resources are:
     1: debian9-fd
     2: centos7.i2tch.loc-fd
Select Client (File daemon) resource (1-2):

Choisissez le client centos7.i2tch.loc-fd :

Select Client (File daemon) resource (1-2): 2
Connecting to Client centos7.i2tch.loc-fd at 10.0.2.16:9102

centos7.i2tch.loc-fd Version: 5.2.13 (19 February 2013)  x86_64-redhat-linux-gnu redhat (Core)
Daemon started 01-Mar-19 16:03. Jobs: run=0 running=0.
 Heap: heap=135,168 smbytes=21,689 max_bytes=21,836 bufs=52 max_bufs=53
 Sizeof: boffset_t=8 size_t=8 debug=0 trace=0 
Running Jobs:
Director connected at: 01-Mar-19 16:03
No Jobs running.
====

Terminated Jobs:
====
*

Saisissez la commande run pour démarrer une sauvegarde :

*run
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
A job name must be specified.
The defined Job resources are:
     1: BackupLocalFiles
     2: BackupCatalog
     3: RestoreLocalFiles
     4: BackupClientHost
Select Job resource (1-4): 

Saisissez le numéro correspondant à BackupClientHost :

Select Job resource (1-4): 4
Run Backup job
JobName:  BackupClientHost
Level:    Incremental
Client:   centos7.i2tch.loc-fd
FileSet:  Home and Etc
Pool:     RemoteFile (From Job resource)
Storage:  File1 (From Job resource)
When:     2019-03-02 09:28:57
Priority: 10
OK to run? (yes/mod/no): 

Saisissez le mot yes et validez :

OK to run? (yes/mod/no): yes
Job queued. JobId=3
You have messages.
*

Consultez le status du director :

*status director
debian9-dir Version: 7.4.4 (20 September 2016) x86_64-pc-linux-gnu debian 9.0
Daemon started 02-mars019 09:10, conf reloaded 02-mars-2019 09:10:12
 Jobs: run=1, running=0 mode=0
 Heap: heap=413,696 smbytes=85,756 max_bytes=117,812 bufs=295 max_bufs=327

Scheduled Jobs:
Level          Type     Pri  Scheduled          Job Name           Volume
===================================================================================
Incremental    Backup    10  02-mars019 23:05   BackupLocalFiles   backup-90
Incremental    Backup    10  02-mars019 23:05   BackupClientHost   Remote-0002
Full           Backup    11  02-mars019 23:10   BackupCatalog      backup-90
====

Running Jobs:
Console connected at 02-mars019 09:27
No Jobs running.
====

Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name 
====================================================================
     1  Full    105,847    1.201 G  OK       01-mars019 14:05 BackupLocalFiles
     2  Restore  105,847    3.007 G  OK       01-mars019 14:23 RestoreLocalFiles
     3  Full      4,133    17.05 M  OK       02-mars019 09:30 BackupClientHost

====
*

Important - Notez que le job 3 ci-dessus a términé.

Restaurer le client

Le processus de restauration du client est identique à celui du director :

*restore all
Using Catalog "MyCatalog"

First you select one or more JobIds that contain files
to be restored. You will be presented several methods
of specifying the JobIds. Then you will be allowed to
select which files from those JobIds are to be restored.

To select the JobIds, you have the following choices:
     1: List last 20 Jobs run
     2: List Jobs where a given File is saved
     3: Enter list of comma separated JobIds to select
     4: Enter SQL list command
     5: Select the most recent backup for a client
     6: Select backup for a client before a specified time
     7: Enter a list of files to restore
     8: Enter a list of files to restore before a specified time
     9: Find the JobIds of the most recent backup for a client
    10: Find the JobIds for a backup for a client before a specified time
    11: Enter a list of directories to restore for found JobIds
    12: Select full restore to a specified Job date
    13: Cancel
Select item:  (1-13): 5
Defined Clients:
     1: centos7.i2tch.loc-fd
     2: debian9-fd
Select the Client (1-2): 1
Automatically selected FileSet: Home and Etc
+-------+-------+----------+------------+---------------------+-------------+
| jobid | level | jobfiles | jobbytes   | starttime           | volumename  |
+-------+-------+----------+------------+---------------------+-------------+
|     3 | F     |    4,133 | 17,055,838 | 2019-03-02 09:29:44 | Remote-0002 |
+-------+-------+----------+------------+---------------------+-------------+
You have selected the following JobId: 3

Building directory tree for JobId(s) 3 ...  +++++++++++++++++++++++++++++++++++++++++
3,416 files inserted into the tree and marked for extraction.

You are now entering file selection mode where you add (mark) and
remove (unmark) files to be restored. No files are initially added, unless
you used the "all" keyword on the command line.
Enter "done" to leave this mode.

cwd is: /
$ ls
*etc/
*home/
$ done
Bootstrap records written to /var/lib/bacula/debian9-dir.restore.1.bsr
Bootstrap records written to /var/lib/bacula/debian9-dir.restore.1.bsr

The Job will require the following (*=>InChanger):
   Volume(s)                 Storage(s)                SD Device(s)
===========================================================================
   
    Remote-0002               File1                     FileChgr1                

Volumes marked with "*" are in the Autochanger.


4,133 files selected to be restored.

Run Restore job
JobName:         RestoreLocalFiles
Bootstrap:       /var/lib/bacula/debian9-dir.restore.1.bsr
Where:           /backup/Restore
Replace:         Always
FileSet:         Full Set
Backup Client:   centos7.i2tch.loc-fd
Restore Client:  centos7.i2tch.loc-fd
Storage:         File1
When:            2019-03-02 09:38:34
Catalog:         MyCatalog
Priority:        10
Plugin Options:  
OK to run? (yes/mod/no): yes
Job queued. JobId=4
*

Consultez les jobs :

*list jobs
+-------+-------------------+---------------------+------+-------+----------+---------------+-----------+
| jobid | name              | starttime           | type | level | jobfiles | jobbytes      | jobstatus |
+-------+-------------------+---------------------+------+-------+----------+---------------+-----------+
|     1 | BackupLocalFiles  | 2019-03-01 13:42:41 | B    | F     |  105,847 | 1,201,471,625 | T         |
|     2 | RestoreLocalFiles | 2019-03-01 14:20:37 | R    | F     |  105,847 | 3,007,506,278 | T         |
|     3 | BackupClientHost  | 2019-03-02 09:29:44 | B    | F     |    4,133 |    17,055,838 | T         |
|     4 | RestoreLocalFiles | 2019-03-02 09:38:43 | R    | F     |        0 |             0 | R         |
+-------+-------------------+---------------------+------+-------+----------+---------------+-----------+
*

Consultez le statut du director :

*status director
debian9-dir Version: 7.4.4 (20 September 2016) x86_64-pc-linux-gnu debian 9.0
Daemon started 02-mars019 09:10, conf reloaded 02-mars-2019 09:10:12
 Jobs: run=1, running=1 mode=0
 Heap: heap=303,104 smbytes=88,483 max_bytes=1,684,200 bufs=326 max_bufs=328

Scheduled Jobs:
Level          Type     Pri  Scheduled          Job Name           Volume
===================================================================================
Incremental    Backup    10  02-mars019 23:05   BackupLocalFiles   backup-90
Incremental    Backup    10  02-mars019 23:05   BackupClientHost   Remote-0002
Full           Backup    11  02-mars019 23:10   BackupCatalog      backup-90
====

Running Jobs:
Console connected at 02-mars019 09:27
 JobId  Type Level     Files     Bytes  Name              Status
======================================================================
     4  Rest Rest          0         0  RestoreLocalFiles is running
====

Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name 
====================================================================
     1  Full    105,847    1.201 G  OK       01-mars019 14:05 BackupLocalFiles
     2  Restore  105,847    3.007 G  OK       01-mars019 14:23 RestoreLocalFiles
     3  Full      4,133    17.05 M  OK       02-mars019 09:30 BackupClientHost

====
*

Important - Notez que le job 4 ci-dessus est en cours d'exécution.

A l'issue de 2 minutes, exécutez la commande status director de nouveau :

*status director
debian9-dir Version: 7.4.4 (20 September 2016) x86_64-pc-linux-gnu debian 9.0
Daemon started 02-mars019 09:10, conf reloaded 02-mars-2019 09:10:12
 Jobs: run=2, running=0 mode=0
 Heap: heap=303,104 smbytes=86,967 max_bytes=1,684,200 bufs=306 max_bufs=332

Scheduled Jobs:
Level          Type     Pri  Scheduled          Job Name           Volume
===================================================================================
Incremental    Backup    10  02-mars019 23:05   BackupLocalFiles   backup-90
Incremental    Backup    10  02-mars019 23:05   BackupClientHost   Remote-0002
Full           Backup    11  02-mars019 23:10   BackupCatalog      backup-90
====

Running Jobs:
Console connected at 02-mars019 09:27
No Jobs running.
====

Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name 
====================================================================
     1  Full    105,847    1.201 G  OK       01-mars019 14:05 BackupLocalFiles
     2  Restore  105,847    3.007 G  OK       01-mars019 14:23 RestoreLocalFiles
     3  Full      4,133    17.05 M  OK       02-mars019 09:30 BackupClientHost
     4  Restore    4,133    58.99 M  OK       02-mars019 09:38 RestoreLocalFiles

====
*exit

Important - Notez que le job 4 ci-dessus a términé.

LAB #7 - AMANDA

Présentation

L'outil AMANDA (Advanced Maryland Automated Disk Archiver) est un logiciel client/serveur offrant une chaîne complète : sauvegarde, vérification et restauration. Le service AMANDA utilise les ports tcp/10080 et udp/10080. AMANDA est utilisé sur plus d'un million de serveurs dans le monde.

Installation d'AMANDA

AMANDA peut être installé à partir des dépôts en utilisant la commande yum :

[root@centos7 ~]# yum install -y amanda*

Les paquets installés sont :

[root@centos7 ~]# rpm -qa | grep amanda
amanda-server-3.3.3-21.el7.x86_64
amanda-client-3.3.3-21.el7.x86_64
amanda-3.3.3-21.el7.x86_64
amanda-libs-3.3.3-21.el7.x86_64

La version d'AMANDA peut être vérifié avec la commande suivante :

[root@centos7 ~]# amadmin --version
amadmin-3.3.3

Configuration du Serveur

Créez le répertoire ServerNetBackup :

[root@centos7 ~]# mkdir /etc/amanda/ServerNetBackup

Créez maintenant le fichier de configuration /etc/amanda/ServerNetBackup/amanda.conf :

[root@centos7 ~]# vim /etc/amanda/ServerNetBackup/amanda.conf
[root@centos7 ~]# cat /etc/amanda/ServerNetBackup/amanda.conf
org "ServerNetBackup"                 # Organization name for reports
mailto "root@localhost"               # Email address to receive reports
netusage 10000 Kbps                   # Bandwidth limit, 10M
 
dumpcycle 1 week                      # Backup cycle is 7 days
runspercycle 7                        # Run 7 times every 7 days
tapecycle 15 tapes                    # Dump to 15 different tapes during the cycle
tpchanger "chg-disk"                  # The tape-changer glue script
 
changerfile "/etc/amanda/ServerNetBackup/changer"     # The tape-changer file
 
tapedev "file://central_backup/ServerNetBackup/slots" # The no-rewind tape device to be used
tapetype HARDDISK                                     # Define the type of tape
 
infofile "/etc/amanda/ServerNetBackup/curinfo"        # Database directory
logdir "/etc/amanda/ServerNetBackup/logs"             # Log directory
indexdir "/etc/amanda/ServerNetBackup/index"          # Index directory
 
define tapetype HARDDISK {                            # Define our tape behaviour
length 100000 mbytes                                  # Every tape is 100GB in size
}
 
amrecover_changer "changer"                           # Changer for amrecover
 
define dumptype global {                              # The global dump definition
maxdumps 2                                            # The maximum number of backups run in parallel
estimate calcsize                                     # Estimate the backup size before dump
holdingdisk yes                                       # Dump to temp disk (holdingdisk) before backup to tape
index yes                                             # Generate index. For restoration usage
}
 
define dumptype root-tar {                            # How to dump root's directory
global                                                # Include global (as above)
program "GNUTAR"                                      # Program name for compress
comment "root partitions dumped with tar"
compress none                                         # No compress
index                                                 # Index this dump
priority low                                          # Priority level
}
 
define dumptype user-tar {                            # How to dump user's directory
root-tar                                              # Include root-tar (as above)
comment "user partitions dumped with tar"
priority medium                                       # Priority level
}
 
define dumptype comp-user-tar {                       # How to dump & compress user's directory
user-tar                                              # Include user-tar (as above)
compress client fast                                  # Compress in client side with less CPU (fast)
}

define dumptype simple-gnutar-local {
auth "local"
compress none
program "GNUTAR"
}

Créez ensuite le répertoire pour contenir les sauvegardes :

[root@centos7 ~]# mkdir -p /central_backup/ServerNetBackup/slots

L'utilisateur chargé des sauvegardes est amandabackup. Modifiez donc les permissions sur les répertoires créés :

[root@centos7 ~]# chown amandabackup.disk /central_backup -Rf
[root@centos7 ~]# chown amandabackup.disk /etc/amanda/ServerNetBackup -Rf

Devenez l'utilisateur amandabackup :

[root@centos7 ~]# su - amandabackup
-bash-4.2$

Create the virtual tape. This is where the backup files will be stored. We will need to create 15 slots as per tapecycle keyword:

-bash-4.2$ for n in `seq 1 15`; do mkdir /central_backup/ServerNetBackup/slots/slot${n}; done

We then need to label all slots:

-bash-4.2$ for n in `seq 1 15` ; do amlabel ServerNetBackup ServerNetBackup-${n} slot ${n}; done
Reading label...
Found an empty tape.
Writing label 'ServerNetBackup-1'...
Checking label...
Success!
Reading label...
Found an empty tape.
Writing label 'ServerNetBackup-2'...
Checking label...
Success!
Reading label...
Found an empty tape.
Writing label 'ServerNetBackup-3'...
Checking label...
Success!
Reading label...
Found an empty tape.
Writing label 'ServerNetBackup-4'...
Checking label...
Success!
Reading label...
Found an empty tape.
Writing label 'ServerNetBackup-5'...
Checking label...
Success!
Reading label...
Found an empty tape.
Writing label 'ServerNetBackup-6'...
Checking label...
Success!
Reading label...
Found an empty tape.
Writing label 'ServerNetBackup-7'...
Checking label...
Success!
Reading label...
Found an empty tape.
Writing label 'ServerNetBackup-8'...
Checking label...
Success!
Reading label...
Found an empty tape.
Writing label 'ServerNetBackup-9'...
Checking label...
Success!
Reading label...
Found an empty tape.
Writing label 'ServerNetBackup-10'...
Checking label...
Success!
Reading label...
Found an empty tape.
Writing label 'ServerNetBackup-11'...
Checking label...
Success!
Reading label...
Found an empty tape.
Writing label 'ServerNetBackup-12'...
Checking label...
Success!
Reading label...
Found an empty tape.
Writing label 'ServerNetBackup-13'...
Checking label...
Success!
Reading label...
Found an empty tape.
Writing label 'ServerNetBackup-14'...
Checking label...
Success!
Reading label...
Found an empty tape.
Writing label 'ServerNetBackup-15'...
Checking label...
Success!

Créez les répertoires référencés dans le fichier de configuration amanda.conf :

-bash-4.2$ mkdir /etc/amanda/ServerNetBackup/curinfo
-bash-4.2$ mkdir /etc/amanda/ServerNetBackup/logs
-bash-4.2$ mkdir /etc/amanda/ServerNetBackup/index

We need to define what to backup in a file called disklist. As user amandabackup, create this file:

-bash-4.2$ vim /etc/amanda/ServerNetBackup/disklist
-bash-4.2$ cat /etc/amanda/ServerNetBackup/disklist
debian9.i2tch.loc /home   comp-user-tar
debian9.i2tch.loc /etc    root-tar
# localhost /etc simple-gnutar-local
-bash-4.2$ exit

Configuration du Client

root@debian9:~# apt-get install amanda-client

As user amandabackup, add following line into /var/lib/amanda/.amandahosts to specify where is Amanda backup server:

root@debian9:~# vi /var/backups/.amandahosts 
root@debian9:~# cat /var/backups/.amandahosts 
localhost backup
centos7.i2tch.loc amandabackup amdump

Devenez l'utilisateur amandabackup :

[root@centos7 ~]# su - amandabackup
-bash-4.2$

Exécutez la commande amcheck :

-bash-4.2$ amcheck ServerNetBackup
Amanda Tape Server Host Check
-----------------------------
slot 15: volume 'ServerNetBackup-15'
Will write to volume 'ServerNetBackup-15' in slot 15.
NOTE: skipping tape-writable test
NOTE: host info dir /etc/amanda/ServerNetBackup/curinfo/debian9.i2tch.loc does not exist
NOTE: it will be created on the next run.
NOTE: index dir /etc/amanda/ServerNetBackup/index/debian9.i2tch.loc does not exist
NOTE: it will be created on the next run.
Server check took 0.609 seconds

Amanda Backup Client Hosts Check
--------------------------------
Client check: 1 host checked in 2.546 seconds.  0 problems found.

(brought to you by Amanda 3.3.3)

Lancez la sauvegarde su serveur :

-bash-4.2$ amdump ServerNetBackup

Vérifiez la sauvegarde :

-bash-4.2$ amreport ServerNetBackup
Hostname: centos7.fenestros.loc
Org     : ServerNetBackup
Config  : ServerNetBackup
Date    : March 1, 2019

These dumps were to tape ServerNetBackup-15.
The next tape Amanda expects to use is: 1 new tape.
The next new tape already labelled is: ServerNetBackup-1.


STATISTICS:
                          Total       Full      Incr.   Level:#
                        --------   --------   --------  --------
Estimate Time (hrs:min)     0:00
Run Time (hrs:min)          0:00
Dump Time (hrs:min)         0:00       0:00       0:00
Output Size (meg)            4.3        4.3        0.0
Original Size (meg)          4.7        4.7        0.0
Avg Compressed Size (%)     91.7       91.7        --
DLEs Dumped                    2          2          0
Avg Dump Rate (k/s)        690.0      690.0        --

Tape Time (hrs:min)         0:00       0:00       0:00
Tape Size (meg)              4.3        4.3        0.0
Tape Used (%)                0.0        0.0        0.0
DLEs Taped                     2          2          0
Parts Taped                    2          2          0
Avg Tp Write Rate (k/s)    876.8      876.8        --

USAGE BY TAPE:
  Label               Time         Size      %  DLEs Parts
  ServerNetBackup-15  0:00        4384k    0.0     2     2

NOTES:
  planner: Adding new disk debian9.i2tch.loc:/home.
  planner: Adding new disk debian9.i2tch.loc:/etc.
  taper: Slot 15 with label ServerNetBackup-15 is usable
  taper: tape ServerNetBackup-15 kb 4384 fm 2 [OK]


DUMP SUMMARY:
                                            DUMPER STATS               TAPER STATS
HOSTNAME          DISK        L ORIG-kB  OUT-kB  COMP%  MMM:SS   KB/s MMM:SS   KB/s
------------------------------- ------------------------------------- -------------
debian9.i2tch.loc /etc        0    4320    4320     --    0:05  856.1   0:04 1080.0
debian9.i2tch.loc /home       0     460      64   13.9    0:01   49.6   0:01   64.0

(brought to you by Amanda version 3.3.3)

Constatez la présence des sauvegardes :

[root@centos7 ~]# ls -l /central_backup/ServerNetBackup/slots/slot15
total 4484
-rw-------. 1 amandabackup disk   32768 Mar  1 19:00 00000.ServerNetBackup-15
-rw-------. 1 amandabackup disk   98554 Mar  1 19:00 00001.debian9.i2tch.loc._home.0
-rw-------. 1 amandabackup disk 4456448 Mar  1 19:00 00002.debian9.i2tch.loc._etc.0

Automatiser les sauvegardes

[root@centos7 ~]# vi /root/backup.sh
[root@centos7 ~]# cat /root/backup.sh
#!/bin/bash
su - amandabackup -c "/usr/sbin/amdump ServerNetBackup"
[root@centos7 ~]# vi /root/verif.sh
[root@centos7 ~]# cat /root/verif.sh
#!/bin/bash
su - amandabackup -c "/usr/sbin/amcheck ServerNetBackup"
[root@centos7 ~]# vi /etc/cron.d/backup
[root@centos7 ~]# cat /etc/cron.d/backup
00 0 * * 1-5 /root/backup.sh
00 8 * * 1-5 /root/verif.sh
[root@centos7 ~]# chmod u+x backup.sh 
[root@centos7 ~]# chmod u+x verif.sh 

<html>

Copyright © 2020 Hugh NORRIS.<br><br>

</html>


Menu