On peut installer le serveur via le gestionnaire de paquets apt :
apt install -y restic-rest-server
Le service n'est pas immédiatement démarré après l'installation. Il faut faire quelques paramétrages.
Dans le fichier /etc/default/restic-rest-server définir la variable BACKUP_DIR
... # Directory to store backups. # Note: the server will not start unless this variable is defined. BACKUP_DIR = /srv/restic/backups/ ...
Créer le répertoire et donner les droits d'écriture à l'utilisateur exécutant le service :
mkdir -p /srv/restic/backups chown -R restic-rest-server:restic-rest-server /srv/restic/ chmod -R g-w,o-rwx /srv/restic/
Ajouter un utilisateur. L'authentification auprès du serveur REST est gérée via les entrées dans le fichier .htpasswd /etc/restic-rest-server/users.htpasswd.
Pour ajouter des entrées dans le fichier, utiliser la commande htpasswd du paquet apache2-utils :
apt install -y apache2-utils # Créer un nouvel enregistrement dans le fichier htpasswd -B /etc/restic-rest-server/users.htpasswd myUserName
On peut maintenant démarrer le service :
systemctl enable restic-rest-server.service --now
Si firewalld :
# Autoriser les connexions entrantes sur le port TCP 8000 firewall-cmd --add-port=8000/tcp
export RESTIC_REPOSITORY="rest:http://user:pass@host:8000/my-test-repo/" restic init
Les échanges entre le serveur REST HTTP et les clients restic peuvent être chiffrés. Pour cela il faudra générer un certificat TLS pour le serveur puis paramétrer le service pour utiliser la clé privée et le certificat.
# Déplacer la clé privée et le certificat mv rstore01.kvm.internal.key rstore01.kvm.internal.pem /etc/restic-rest-server/ chown restic-rest-server: /etc/restic-rest-server/rstore01.kvm.internal.*
Modifier le fichier de configuration du service /etc/default/restic-rest-server
# TCP or UNIX listen address. #LISTEN = unix:/run/restic-rest-server LISTEN = :8000 # Directory to store backups. # Note: the server will not start unless this variable is defined. BACKUP_DIR = /srv/restic/backups/ # Extra arguments to pass to the server. Run `restic-rest-server --help` to see # available options. By default, basic authentication is enabled. ARGS = "\ --htpasswd-file /etc/restic-rest-server/users.htpasswd \ --tls --tls-key /etc/restic-rest-server/rstore01.kvm.internal.key \ --tls-cert /etc/restic-rest-server/rstore01.kvm.internal.cert.pem \ "
Redémarrer le service :
systemctl restart restic-rest-server.service
Depuis un poste client, valider la connexion :
export RESTIC_REPOSITORY="rest:https://user:pass@host:8000/my-test-repo/" export RESTIC_CACERT="/absolute/path/to/ca-chain.cert" restic init
Pour éviter que les identifiants apparaissent sur la ligne de commande ou les variables d'environnement, on peut utiliser des fichiers avec accès restreint.
mkdir -p ~/.config/restic chmod a-rwx,u+rwx ~/.config/restic echo "rest:https://user:pass@server.fqdn:8000/my-repo/" > ~/.config/restic/repo echo "my-repo-password" > ~/.config/restic/pass # Lecture seule pour l' utilisateur propriétaire chmod a-rwx,u+r ~/.config/restic/repo ~/.config/restic/pass export RESTIC_REPOSITORY_FILE="/absolute/path/to/.config/restic/repo" export RESTIC_PASSWORD_FILE="/absolute/path/to/.config/restic/pass"
Impossible de démarrer le service en utilisant un port réservé (comme 80 ou 443).
Après modification du fichier de configuration et redémarrage du service on obtient une erreur du type :
Aug 08 12:01:00 rstore01 restic-rest-server[974]: error: unable to listen: listen on :443 failed: listen tcp :443: bind: permission denied
Plusieurs solutions ont été testées :
setcap 'cap_net_bind_service=+ep' /usr/bin/restic-rest-server pour autoriser le binaire : KO ;Avec firewalld :
# Déterminer les zones actives et par celle par défaut firewall-cmd --get-active-zones firewall-cmd --get-default-zone # Dans cette exemple, l'interface du serveur est dans la zone public firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toport=8000 # Une fois la configuration validée firewall-cmd --runtime-to-permanent