Benutzer auf der Quelle per command= auf zsync-Befehle beschränken #39

Open
opened 2026-10-16 00:04:29 +02:00 by thorsten.spille · 0 comments

Folgeschritt zu #11: Seit #11 läuft zsync auf Backupserver und Quelle ohne root, der Benutzer auf der Quelle darf per zfs allow nur senden, Snapshots anlegen/löschen, halten und Bookmarks setzen. Über ssh kann er aber noch beliebige Shell-Befehle als dieser Benutzer ausführen.

Ziel

Ein Wrapper per command= in authorized_keys auf der Quelle, der nur die Befehle zulässt, die zsync braucht.

Voraussetzung: einfache Befehle

zsync führt auf der Quelle heute auch Shell-Konstrukte aus (Schleifen für hold/release, if beim Bookmark, grep/tail-Pipelines, which … ; zfs-auto-snapshot, mkdir/mv und scp für den Spool, die Cipher-Erkennung über /etc/os-release und /proc/cpuinfo), remote-snapshot-manager hat eine eigene ssh-Verbindung mit ssh … exit. Für eine Prüfung per Allowlist müssen das einzelne, einfache Befehle werden (Filtern lokal), z. B. zfs hold <tag> <snap>… statt Schleife.

Umsetzung (Skizze)

  • Wrapper bashclub-zsync-remote im Paket, wertet SSH_ORIGINAL_COMMAND aus: nur zfs list|get|send|snapshot|destroy <snapshot>|hold|release|bookmark mit erlaubten Optionen, keine Shell-Metazeichen
  • README: Zeile für authorized_keys (restrict,command="…", from=), kopierbar aus der Config abgeleitet
  • Integrationstest: erlaubte Befehle laufen, alles andere wird abgewiesen
Folgeschritt zu #11: Seit #11 läuft zsync auf Backupserver und Quelle ohne root, der Benutzer auf der Quelle darf per `zfs allow` nur senden, Snapshots anlegen/löschen, halten und Bookmarks setzen. Über ssh kann er aber noch beliebige Shell-Befehle als dieser Benutzer ausführen. ## Ziel Ein Wrapper per `command=` in `authorized_keys` auf der Quelle, der nur die Befehle zulässt, die zsync braucht. ## Voraussetzung: einfache Befehle zsync führt auf der Quelle heute auch Shell-Konstrukte aus (Schleifen für hold/release, `if` beim Bookmark, `grep`/`tail`-Pipelines, `which … ; zfs-auto-snapshot`, `mkdir`/`mv` und `scp` für den Spool, die Cipher-Erkennung über `/etc/os-release` und `/proc/cpuinfo`), `remote-snapshot-manager` hat eine eigene ssh-Verbindung mit `ssh … exit`. Für eine Prüfung per Allowlist müssen das einzelne, einfache Befehle werden (Filtern lokal), z. B. `zfs hold <tag> <snap>…` statt Schleife. ## Umsetzung (Skizze) - Wrapper `bashclub-zsync-remote` im Paket, wertet `SSH_ORIGINAL_COMMAND` aus: nur `zfs list|get|send|snapshot|destroy <snapshot>|hold|release|bookmark` mit erlaubten Optionen, keine Shell-Metazeichen - README: Zeile für `authorized_keys` (`restrict,command="…"`, `from=`), kopierbar aus der Config abgeleitet - Integrationstest: erlaubte Befehle laufen, alles andere wird abgewiesen
thorsten.spille added this to the 2.0.0 milestone 2026-10-16 00:04:29 +02:00
Sign in to join this conversation.
No labels
bug
enhancement
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
bashclub/zsync#39
No description provided.