Heute mal was Zeit gehabt um das erlernte Wissen über einen Rest-Server, praktisch mal umzusetzen.
Schnappen wir uns einen virtuellen Server mit installiertem Debian Buster. Wie einige wissen, setze ich seit längerem auf die Hetzner Cloud.
Gut, Debian Buster 10.4 haben sie noch nicht, also als erstes nach der Installation ein
apt update && apt upgrade
Danach neustarten!
Download Rest-Server und installieren
Im Github Repositorie den aktuellen Release suchen. Hier am Beispiel der aktuellen Version 0.12.0 (29.04.2023) Datei herunterladen
wget https://github.com/restic/rest-server/releases/download/v0.12.0/rest-server_0.12.0_linux_amd64.tar.gz
Die Datei entpacken
tar -xf rest-server_0.12.0_linux_amd64.tar.gz
Ins Verzeichnis wechseln
cd rest-server_0.12.0_linux_amd64
cp rest-server /usr/local/bin
Danch kann man den Rest-Server benutzen
rest-server -h
Run a REST server for use with restic
Usage:
rest-server [flags]
Flags:
--append-only enable append only mode
--cpu-profile string write CPU profile to file
--debug output debug messages
-h, --help help for rest-server
--htpasswd-file string location of .htpasswd file (default: "<data directory>/.htpasswd)"
--listen string listen address (default ":8000")
--log filename write HTTP requests in the combined log format to the specified filename
--max-size int the maximum size of the repository in bytes
--no-auth disable .htpasswd authentication
--no-verify-upload do not verify the integrity of uploaded data. DO NOT enable unless the rest-server runs on a very low-power device
--path string data directory (default "/tmp/restic")
--private-repos users can only access their private repo
--prometheus enable Prometheus metrics
--prometheus-no-auth disable auth for Prometheus /metrics endpoint
--tls turn on TLS support
--tls-cert string TLS certificate path
--tls-key string TLS key path
-v, --version version for rest-server
Installation rest-server (selbst bauen!)
apt install git
apt install golang-go
git clone https://github.com/restic/rest-server.git
cd rest-server
go run build.go
cp rest-server /usr/local/bin
Danach können wir mit dem rest-server arbeiten.
root@rest-server:~# rest-server -h
Run a REST server for use with restic
Usage:
rest-server [flags]
Flags:
--append-only enable append only mode
--cpu-profile string write CPU profile to file
--debug output debug messages
-h, --help help for rest-server
--listen string listen address (default ":8000")
--log string log HTTP requests in the combined log format
--max-size int the maximum size of the repository in bytes
--no-auth disable .htpasswd authentication
--path string data directory (default "/tmp/restic")
--private-repos users can only access their private repo
--prometheus enable Prometheus metrics
--tls turn on TLS support
--tls-cert string TLS certificate path
--tls-key string TLS key path
-V, --version output version and exit
Ich möchte einen User habe, unter dem der rest-server später läuft.
useradd rest-server -M
Sollte selbst erklärend sein.
SystemD
Damit der Server auch ordentlich gestartet wird usw. legen wir einen systemd Dienst an.
nano /etc/systemd/system/rest-server.service
Inhalt der Datei
[Unit]
Description=Rest Server
After=syslog.target
After=network.target
[Service]
Type=simple
User=rest-server
Group=rest-server
ExecStart=/usr/local/bin/rest-server --private-repos --tls --tls-cert /etc/letsencrypt/live/DOMAIN/fullchain.pem --tls-key /etc/letsencrypt/live/DOMAIN/privkey.pem --path /home/rest-server
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Aktivieren
chmod +x rest-server.service
systemctl enable rest-server.service
Noch können wir den Server nicht starten. Uns fehlt noch das Zertifikat. Aber hiermit würde man das dann machen.
systemctl start rest-server.service
systemctl status rest-server.service
systemctl stop rest-server.service
Letsencrypt
Installation
apt install letsencrypt
Zertifikat erstellen
certbot certonly --standalone -d DOMAIN
Crontab
# m h dom mon dow command
* 3 1 * * certbot renew --post-hook "chown -R rest-server:root /etc/letsencrypt/"
Problem, der User rest-server konnte die Zertifikate nicht lesen!
Die Zertifikate liegen in /etc/letsencrypt/live/DOMAIN
Nach
chown -R rest-server:root /etc/letsencrypt/
war das Problem gelöst, da der User rest-server jetzt die Zertifikate lesen kann und der Server damit startet! Um bei einer Erneuerung der Zertifikate keine Probleme zu bekommen, habe ich im crontab folgendes ergänzt.
--post-hook "chown -R rest-server:root /etc/letsencrypt/"
Nach dem Aktualisieren, sollten die Benutzerrechte wieder angepasst werden. Sollte man das eleganter lösen können, oder ich hier einen Denkfehler haben, bitte ich um einen Kommentar. Danke!
User Verwaltung
Ich möchte einzelne User haben, die ein eigenes Verzeichnis haben. Denkt an einzelne Server, die ihren eigenen Platz haben und ihren eigenen Login!
Beispiel
- User: server1
- PW: PASSWORD
- Pfad: /home/rest-server/server1
Verzeichnis erstellen
mkdir /home/rest-server/server1
chown rest-server:rest-server /home/rest-server/server1
Im Verzeichnis /home/rest-server liegt eine .htpasswd zur Verwaltung der Benutzer.
Installation
apt install apache2-utils
User anlegen
Beim ersten Mal!
htpasswd -B -c .htpasswd server1
Beim zweiten User das -c weglassen!
-c
Create the passwdfile. If passwdfile already exists, it is rewritten and truncated.
Zugriff auf den Rest-Server
restic -r rest:https://USER:PASSWORD@DOMAIN:8000/server1 init
Sicherheit
Denkt an die grundlegenden Dinge wie
Viel Spaß mit dem zentralen Ablageort für Eure verschlüsselten Backups!
Quellen
https://restic.net/
https://restic.readthedocs.io/en/latest/030_preparing_a_new_repo.html#rest-server
https://github.com/restic/rest-server