Das Setup
Ich will meinen Ubuntu-24.04-Desktop auf meinen Proxmox Backup Server sichern. PBS läuft auf einem lokalen Homelab-Host (pbs-tatooine, 192.168.66.4). Statt root-Passwort im Backup-Script hinterlegen zu wollen, soll ein API-Token mit minimalen Rechten ran.
Klingt simpel. Ist es auch — wenn man zwei Gotchas kennt.
Installation
Proxmox liefert ein dediziertes pbs-client-Repository. Das funktioniert auch auf Ubuntu 24.04 mit dem Debian-Bookworm-Repo:
# GPG-Key
wget -q https://enterprise.proxmox.com/debian/proxmox-archive-keyring-trixie.gpg \
-O /usr/share/keyrings/proxmox-archive-keyring.gpg
# Prüfsumme verifizieren
sha256sum /usr/share/keyrings/proxmox-archive-keyring.gpg
# Erwartet: 136673be77aba35dcce385b28737689ad64fd785a797e57897589aed08db6e45
# Repo eintragen
echo "deb [signed-by=/usr/share/keyrings/proxmox-archive-keyring.gpg] \
http://download.proxmox.com/debian/pbs-client bookworm main" \
> /etc/apt/sources.list.d/pbs-client.list
apt update && apt install proxmox-backup-client
Ubuntu 24.04 (Noble) mit dem Bookworm-Repo: funktioniert problemlos.
API-Token erstellen
Auf dem PBS-Host einen Token für den gewünschten User anlegen:
proxmox-backup-manager user generate-token backup@pbs mein-client
Ausgabe:
Result: {
"tokenid": "backup@pbs!mein-client",
"value": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
Den Token-Wert jetzt kopieren — er wird nur einmal angezeigt.
Die ACL-Falle
Hier stolpert man: Der Token backup@pbs!mein-client hat keine Rechte, auch wenn backup@pbs bereits Admin auf dem Datastore ist.
PBS API-Tokens erben Rechte nicht vom User. Punkt. Die Doku erwähnt das, aber der Fehler ist trotzdem überraschend:
Error: permission check failed - missing Datastore.Audit|Datastore.Backup
on /datastore/backups/mein-namespace
Lösung: ACL explizit für den Token setzen.
proxmox-backup-manager acl update \
/datastore/backups/mein-namespace \
DatastoreAdmin \
--auth-id "backup@pbs!mein-client"
Warum DatastoreAdmin statt DatastoreBackup? Weil DatastoreBackup nur Datastore.Backup enthält, aber kein Datastore.Audit. Ohne Audit funktionieren snapshot list und Statusabfragen nicht. Wer wirklich minimal bleiben will: DatastoreBackup + DatastoreReader kombinieren.
Namespace erstellen
proxmox-backup-manager hat kein namespace create-Subcommand. Namespace einfach als Verzeichnis anlegen:
mkdir -p /data_storage/backups/ns/mein-namespace
chown -R backup:backup /data_storage/backups/ns/mein-namespace
Backup konfigurieren
Credentials persistent ablegen:
mkdir -p /etc/proxmox-backup
cat > /etc/proxmox-backup/client.conf <<EOF
repository: backup@pbs!mein-client@192.168.66.4:backups
fingerprint: XX:XX:XX:... # von: proxmox-backup-manager cert info
EOF
echo "TOKEN-WERT" > /etc/proxmox-backup/client.password
chmod 600 /etc/proxmox-backup/client.conf /etc/proxmox-backup/client.password
PBS-Fingerprint holen:
ssh root@192.168.66.4 "proxmox-backup-manager cert info | grep Fingerprint"
Verbindungstest:
PBS_REPOSITORY="backup@pbs!mein-client@192.168.66.4:backups" \
PBS_FINGERPRINT="XX:XX:..." \
PBS_PASSWORD="$(cat /etc/proxmox-backup/client.password)" \
proxmox-backup-client snapshot list --ns mein-namespace
Leere Ausgabe = Verbindung funktioniert.
Backup-Script mit systemd-Timer
Script unter /usr/local/bin/pbs-backup.sh:
#!/bin/bash
set -euo pipefail
export PBS_REPOSITORY="backup@pbs!mein-client@192.168.66.4:backups"
export PBS_FINGERPRINT="XX:XX:..."
export PBS_PASSWORD
PBS_PASSWORD=$(cat /etc/proxmox-backup/client.password)
proxmox-backup-client backup \
home.pxar:/home \
etc.pxar:/etc \
--ns mein-namespace \
--backup-type host \
--backup-id mein-hostname \
--exclude "luke.skywalker/Downloads/tmp"
systemd-Timer für täglich 10:00:
# /etc/systemd/system/pbs-backup.timer
[Unit]
Description=Proxmox Backup — täglich ab 10:00
[Timer]
OnCalendar=*-*-* 10:00:00
Persistent=true
RandomizedDelaySec=5min
[Install]
WantedBy=timers.target
systemctl enable --now pbs-backup.timer
Manuell starten (kehrt sofort zurück, Backup läuft im Hintergrund):
systemctl start --no-block pbs-backup.service
--no-block nicht vergessen — ohne es blockiert der Terminal bis das Backup durch ist. Bei 300 GB macht das mehrere Stunden Spaß.
Verifikation
# Snapshots auf dem PBS prüfen
PBS_REPOSITORY="..." PBS_FINGERPRINT="..." PBS_PASSWORD="..." \
proxmox-backup-client snapshot list --ns mein-namespace
# Logs
journalctl -u pbs-backup.service --since today
Fazit
PBS als Backup-Ziel für Linux-Desktops und -Server funktioniert gut. Die zwei Stolperstellen:
- API-Tokens brauchen eigene ACLs — User-Rechte werden nicht vererbt
- DatastoreBackup reicht nicht für Read-Ops —
DatastoreAdminoder Kombination mitDatastoreReaderverwenden
Der Rest ist straightforward.