Table des matières
Borgmatic
Mettre en place un serveur accessible en ssh
et disposant d'un espace de stockage qui pourra accueillir les sauvegardes de différentes machines appartenant à l'un ou l'autre compte.
Les sauvegardes seront réalisées avec borgmatic qui facilite la mise en place de borg.
NOM_DU_COMPTE = Une personne ou une assoss NOM_DE_MACHINE = Une machine appartenant à NOM_DU_COMPTE SERVEUR_BORG = Le serveur qui accueillera les sauvegarder STOCKAGE_BORG = L'espace disque prévu pour les sauvegardes sur SERVEUR_BORG PHRASE_DE_PASSE = La phrase de passe pour chiffrer et déchiffrer les sauvegardes d'une NOM_DE_MACHINE CLE_SSH = Chemin vers une clé privée SSH
Serveur
Le serveur peut-être un Debian récent disposant d'un accès ssh
. Merci de veiller à ce que root
ne puisse pas se connecter directement et de mettre en place un utilisateur qui aura un accès par clé ssh (ed25519 si possible ou RSA4096). Cet utilisateur n'aura pas d'accès par mot de passe et n'aura pas le droit d'utiliser sudo
.
Installation
Borg est disponible dans les dépôts sur Debian.
apt install borgmatic
Créer un compte
Le dossier home
de chaque nouveau compte devrait se trouver sur STORAGE
.
adduser --home /media/STORAGE/NOM_DU_COMPTE NOM_DU_COMPTE
R/W sur storage pour l'utilisateur uniquement
Pour limiter les accès au STORAGE
de NOM_DU_COMPTE
.
chmod 700 /media/STORAGE/NOM_DU_COMPTE
Machine
Un NOM_DU_COMPTE
peut avoir plusieurs NOM_DE_MACHINE
virtuelles ou non dont les sauvegardes seraient envoyées sur NOM_DU_COMPTE@SERVEUR_BORG:/media/STORAGE/NOM_DU_COMPTE/NOM_DE_MACHINE
. Chacune de ces destinations /(repository ou repo)/ étant initiée avec son propre mot de passe et sa propre clé de chiffrement.
Depuis chaque NOM_DE_MACHINE
c'est root
qui se connectera sur NOM_DE_COMPTE@SERVEUR_BORG
et il est donc nécessaire de générer une clé ssh /(ed25519 de préférence ou bien RSA 4096)* qui sera copiée sur le SERVEUR_BORG
pour son NOM_DE_COMPTE
.
Faire une clé ecd25219 sans mot de passe
ssh-keygen -t ed25519 -C "" et ne pas mettre de phrase de passe
La copier sur le serveur borg
ssh-copy-id NOM_DU_COMPTE@SERVEUR_BORG
Configurer le client SSH
Pour indiquer à SSH comment se connecter à SERVEUR_BORG
# nano ~/.ssh/config Host SERVEUR_BORG User NOM_DU_COMPTE IdentityFile ~/.ssh/CLE_SSH PreferredAuthentications publickey,password
Installer borgmatic
apt install borgmatic
Générer une config de base
generate-borgmatic-config
Initier le repo sur le serveur
Sans chiffrement
Déconseillé.
Avec chiffrement
Voir la documentation
# borg init --encryption=repokey-blake2 SERVEUR_BORG:/media/STORAGE/NOM_DU_COMPTE/NOM_MACHINE Passe phrase : PHRASE_DE_PASSE
# borg key export SERVEUR_BORG:/media/STORAGE/NOM_DU_COMPTE/NOM_MACHINE /dev/stdout BORG_KEY f6dc3da161fa259ad8c79380b2593d4996e4fb3c3efd802c88d996dd93b5f250 hqlhbGdvcml0aG2mc2hhMjU2pGRhdGHaAZ6DIeXAqvfULdYvWU6QooZHvmEaUvP3yzjQj9 l2I7xiDA/5rOjlP8kUFpefFtlMgo0gVcG8NQzqlZu8LQ/yFE3y52ldLc692D9Hr/rmrF+t 9wo7gvy33BaQmh+MrmbabipuJfm6p+u0lso11OJOwoX/GBXghL1lpazQnlERU1PqZZfiDe ct6R1B67vdvQZXhVOuuYuLH9BNDMpq0eSc+9VHV3M/wFygmQtXfpcPTW2GekuQfSp9sk3D a2pSFZs+wOMSZrx432DG5l/dbMXZgwmYgsMuixR2b+d/dNjSheMPy8tju2qCWL+ChbAm9A oETPxAAOdBWUzxGgXPpnmuLxrjHf+XMpnt8E0fW6cqd/hdi2yuZJ0f7daZTVSM0KphHcP2 61JM+elY+xBFur8ibVekYllMC3Ot94DU/SYdAATxv8+X99tyB2UreGYxlwhCXUHNGba2XO WWaDVNciAc1xc3sAX1gBVihEpZV4EbTPWkNj9DD3sWks9O0OeqTHdnhMVD1fpkKw2GDhfs qb77w6DSwVZRnpgK58QwYDiTogukaGFzaNoAIIjMp6rDyIGoH+kxvLmOMq7w7/vzIL7PfO wQvKVucuWuqml0ZXJhdGlvbnPOAAGGoKRzYWx02gAg0tq+i2wceA8guVTmn4AzKJsJRDb8 ueHXWCC+xBNhDNKndmVyc2lvbgE=
Et la coller dans le password-store
du NOMDUCOMPTE dans borgsurSERVEUR en tant que commentaire repokey-blake2 = “coller la clé”.
Éditer la config
nano /etc/borgmatic/config.yaml # ceci est un exemple location: source_directories: - / repositories: - SERVEUR_BORG:/media/STORAGE/NOM_DU_COMPTE/NOM_MACHINE exclude_patterns: - /dev - /proc - /sys - /tmp - /run - /lost+found - /swapfile - /var/cache/apt - /mnt/mmcboot storage: encryption_passcommand: secret-tool lookup borg-repository repo-name encryption_passphrase: "PHRASE_DE_PASSE" compression: lz4 retention: keep_daily: 7 keep_monthly: 2
Borg info
Depuis le client
borg info SERVEUR_BORG:/media/STORAGE/NOM_DU_COMPTE/NOM_MACHINE Et donner la PHRASE_DE_PASSE
Depuis le serveur
borg info /media/STORAGE/NOM_DU_COMPTE/NOM_MACHINE Et donner la PHRASE_DE_PASSE
Borg mount
Depuis le serveur
mkdir /tmp/test borg mount /media/STORAGE/NOM_DU_COMPTE/NOM_MACHINE
Cron
nano /etc/cron.d/borgmatic Et mettre : 42 0 * * * root /usr/bin/borgmatic --create --prune 42 1 * * 0 root /usr/bin/borgmatic --check
Pour tator et les briques
Pour mettre en pratique ce qui est expliqué plus haut, voici ce qui se fait pour un cas particulier de mabrique et de tator qui sont deux Olimex LIME1 dans une cave connectées à Internet.
mabrique dispose d'une IP publique grâce à un vpn de Neutrinet et tator est sur le même réseaulocal (LAN).
D'autre briques internet viennent déposer leur sauvegardes borgmatic
en passant (jump) par mabrique pour atteindre tator.
Sur mon ordi
Créer un password-store
avec GoPass.
pass init --store NOM_DU_COMPTE
Et dans ce password-store
:
- créer un mot de passe pour
NOM_DU_COMPTE_sur_mabrique
dansmisc
avec comme commentaireusername = NOM_DU_COMPTE
. - créer un mot de passe pour
NOM_DU_COMPTE_sur_tator
dansmisc
avec comme commentaireusername = NOM_DU_COMPTE
. - créer un mot de passe pour
NOM_DEMACHINE_sur_tator
dansmisc
avec comme commentairerepokey-blake2 = comming soon
pour y coller plus tard la clé obtenue depuisNOM_DE_MACHINE
avec la commandeborg key export NOM_DU_COMPTE@SERVEUR_BORG:/media/STORAGE/NOM_DU_COMPTE/NOM_MACHINE FICHIER_TEMP
/(voir plus haut)/.
Sur mabrique
Créer un utilisateur pour NOM_DU_COMPTE
avec le mot de passe créé précédemment.
adduser NOM_DU_COMPTE
Ce NOM_DU_COMPTE
recevra la clé publique de root
d'une NOM_DE_MACHINE
/(cf. plus haut)/ qui devra envoyer ses sauvegardes.
Modifier la configuration de ssh
pour autoriser le saut ssh
vers tator
. Yunohost gère la configuration de ssh
, donc cela va lever un warning pour le diagnostic automatique de Yunohost qui signalera que la configuration a changé.
nano /etc/ssh/sshd_config … Match User admin,root,NOM_DU_COMPTE, AUTRE_NOM_DU_COMPTE, etc. AllowTcpForwarding yes AllowStreamLocalForwarding yes PermitUserRC yes … service ssh reload
Sur tator
Il faut créer un utilisateur NOM_DU_COMPTE
pour accueillir la clé de root
de chaque NOM_DE_MACHINE
ce qui permettra un accès ssh
sans mot de passe.
adduser --home /media/STORAGE/NOM_DU_COMPTE NOM_DU_COMPTE
Et changer les droits du home
pour ce NOMDUCOMPTE.
chmod 700 /media/STORAGE/NOM_DU_COMPTE
Sur une machine
Faire une clé ssh pour root
sans mot de passe sur NOM_DE_MACHINE
qui sera sauvegardée.
root@NOM_DE_MACHINE:/root# ssh-keygen -t ed25519 Generating public/private ed25519 key pair. Enter file in which to save the key (/root/.ssh/id_ed25519): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): -ne rien mettre- Enter same passphrase again: -ne rien mettre-
Ajouter tator
et mabrique
dans le /root/.ssh/config
pour le proxy jump ssh.
# nano /root/.ssh/config Host tierce Hostname tierce.nohost.me User NOM_DU_COMPTE Host tator Hostname 192.168.1.9 User NOM_DU_COMPTE ProxyJump tierce
Copier la clé de root
sur ma brique.
ssh-copy-id tierce
Copier la clé de root
sur tator.
ssh-copy-id tator
Installer borgmatic
.
apt install borgmatic
Créer une config de base pour borgmatic.
generate-borgmatic-config
Vérifier ce qui est monté pour éventuellement l'exclure des sauvegardes puisque ce qui sera sauvegardé c'est /
/(tout le système)/ et que parfois, pour les briques qui sont sur un disque SATA ou USB par exemple, la carte SD avec l'ancien système est montée sur /media/mmcboot
.
mount et/ou bien: df et/ou bien: ls /mnt et/ou bien: ls /media
Modifier le fichier de config de borgmatic.
nano /etc/borgmatic/config.yaml #voir exemple plus haut
Initier le repo borg pour NOMDEMACHINE.
borg init --encryption=repokey-blake2 tator:/media/STORAGE/NOM_DU_COMPTE/NOM_DE_MACHINE
Copier la clé de chiffrement dans le password store du client sur mon ordinateur.
# borg key export tator:/media/STORAGE/NOM_DU_COMPTE/NOM_MACHINE /dev/stdout BORG_KEY f6dc3da161fa259ad8c79380b2593d4996e4fb3c3efd802c88d996dd93b5f250 hqlhbGdvcml0aG2mc2hhMjU2pGRhdGHaAZ6DIeXAqvfULdYvWU6QooZHvmEaUvP3yzjQj9 l2I7xiDA/5rOjlP8kUFpefFtlMgo0gVcG8NQzqlZu8LQ/yFE3y52ldLc692D9Hr/rmrF+t 9wo7gvy33BaQmh+MrmbabipuJfm6p+u0lso11OJOwoX/GBXghL1lpazQnlERU1PqZZfiDe ct6R1B67vdvQZXhVOuuYuLH9BNDMpq0eSc+9VHV3M/wFygmQtXfpcPTW2GekuQfSp9sk3D a2pSFZs+wOMSZrx432DG5l/dbMXZgwmYgsMuixR2b+d/dNjSheMPy8tju2qCWL+ChbAm9A oETPxAAOdBWUzxGgXPpnmuLxrjHf+XMpnt8E0fW6cqd/hdi2yuZJ0f7daZTVSM0KphHcP2 61JM+elY+xBFur8ibVekYllMC3Ot94DU/SYdAATxv8+X99tyB2UreGYxlwhCXUHNGba2XO WWaDVNciAc1xc3sAX1gBVihEpZV4EbTPWkNj9DD3sWks9O0OeqTHdnhMVD1fpkKw2GDhfs qb77w6DSwVZRnpgK58QwYDiTogukaGFzaNoAIIjMp6rDyIGoH+kxvLmOMq7w7/vzIL7PfO wQvKVucuWuqml0ZXJhdGlvbnPOAAGGoKRzYWx02gAg0tq+i2wceA8guVTmn4AzKJsJRDb8 ueHXWCC+xBNhDNKndmVyc2lvbgE=
Simuler une sauvegarde
borgmatic -n -v2
Planifier la sauvegarde.
nano /etc/cron.d/borgmatic et coller: 42 0 * * * root /usr/bin/borgmatic --create --prune #ou 42 est la minute et 00 l'heure de début * * * étant chaque jour, chaque mois, chaque jour de la semaine 42 1 * * 0 root /usr/bin/borgmatic --check
À suivre
?? stockage chiffré monté au boot
?? postgress
?? mysql
?? alertes
?? log / cron
Ça va avec les alertes.
?? accès sans terminal
Actuellement un NOMDUCOMPTE dispose d'un accès ssh
au serveur de sauvegardes.