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:

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.