Der Sammler-User — nichts Schwammiges mehr 🐾

Wer greift eigentlich die alten Nodes ab? Hier ist er, präzise definiert.

Wer er ist

Ein eigener, unprivilegierter Systemnutzer auf jedem Ziel-Node (Default-Name
sammler). Kein Mensch, kein Admin — ein read-only Dienstkonto für den rostigen
Sammler auf dem Jetson.

Eigenschaft Wert Warum
Login nur SSH-Key (Passwort gesperrt) kein ratbares Geheimnis auf alten Nodes
Shell /bin/bash SSH-exec braucht eine Shell fĂźr die Probe-Kommandos
root-Rechte keine — außer der engen dmidecode-Allowlist Passkante = geringste Rechte
Netz optional an die Jetson-IP gebunden (from=) der Sammler kommt nur von einem Ort
Schreibrechte auf dem Node keine er liest, er schreibt nie. raw.json entsteht auf dem Jetson

Warum Ăźberhaupt sudo?

Fast alle Probes laufen unprivilegiert: cat /etc/os-release, uname,
/proc/cpuinfo, /proc/meminfo, lsblk -J, ip -j addr, pveversion.

Nur dmidecode (Hersteller, Serial, Chassis, RAM-DIMMs) braucht root — es
liest SMBIOS. Deshalb bekommt der Sammler-User eine NOPASSWD-Allowlist fĂźr
genau dieses eine read-only Werkzeug
und sonst nichts. collect ruft es als
sudo -n dmidecode … und degradiert sauber auf leer, wenn die Erlaubnis fehlt
(dann sieht der Node aus wie eine VM — eine Beobachtung, kein Fehler).

Die Allowlist: provisioning/sammler.sudoers.

Einrichten (Stufe 0)

Auf dem Jetson einmal den Sammler-Key erzeugen:

ssh-keygen -t ed25519 -f ~/.ssh/crumb_sammler -C "crumbcollector@jetpack" -N ""

Auf jedem Ziel-Node (als root) den User anlegen und den Public-Key einspielen:

# provisioning/ auf den Node kopieren, dann:
bash sammler-user.sh sammler ~/.ssh/crumb_sammler.pub <jetson-ip>

Danach vom Jetson lesen:

crumbcollector collect crumbzero01 22 sammler ~/.ssh/crumb_sammler

FreeBSD (die ältere Schlange)

sammler-user.sh ist Linux (useradd/sudoers.d). Auf FreeBSD von Hand:

pw useradd sammler -m -s /bin/sh
# Key nach ~sammler/.ssh/authorized_keys, chmod 600
# dmidecode aus ports; sudo aus ports, /usr/local/etc/sudoers.d/

Der Sammler selbst kennt den Unterschied nicht — er schickt nur read-only
Kommandos. Fehlt eines, wird es geloggt, nicht erzwungen.