LXC Enrollment
Interaktives Skript fuer einen Proxmox-Host. Es installiert fehlende Tailscale-
und Wazuh-Komponenten in ausgewaehlten LXCs, verbindet neue Tailscale-Clients mit
Headscale und kann Tailscale SSH samt Linux-Nutzer und Sudo einrichten.
Alle interaktiven Abfragen verwenden eine Dialogoberflaeche mit whiptail
oder alternativ dialog: LXC-Checkliste, Ja/Nein-Schaltflaechen, Eingabefelder
und verdeckte Felder fuer Schluessel und Passwoerter.
Starten
Als root auf dem Proxmox-Host, nicht innerhalb eines LXC:
curl --fail --silent --show-error --location \
https://code.faboi.cloud/fabio/lxc-enroll/raw/branch/main/lxc-enroll.sh \
-o /run/lxc-enroll.sh && bash /run/lxc-enroll.sh
Alternativ herunterladen und zuerst die Auswahl pruefen:
curl --fail --silent --show-error --location \
https://code.faboi.cloud/fabio/lxc-enroll/raw/branch/main/lxc-enroll.sh \
-o /run/lxc-enroll.sh
bash /run/lxc-enroll.sh --list
bash /run/lxc-enroll.sh
--list liest nur den aktuellen Bestand; --dry-run zeigt nach der Auswahl die
geplanten Aenderungen. Beide installieren nichts, starten nichts neu und speichern
keine Einstellungen. Fuer interaktive Eingaben muss ein Terminal vorhanden sein;
die Eingaben werden ueber /dev/tty gelesen, auch beim Start per curl.
Bedienung der Dialoge
- Pfeiltasten: zwischen Containern oder Optionen wechseln.
- Leertaste: einen LXC markieren oder abwaehlen; mehrere sind moeglich.
- Tab: zwischen Liste/Eingabe und Schaltflaechen wechseln.
- Enter: die aktuelle Auswahl oder Schaltflaeche bestaetigen.
- Abbrechen/Escape: den Ablauf abbrechen. Beim Ja/Nein-Dialog bedeutet Nein nur die Ablehnung dieser Einstellung; Escape bricht ab.
Die Checkliste zeigt CTID, Namen und vorhandene/fehlende Komponenten. Zunaechst
ist kein Container markiert. Vollstaendig installierte Container bleiben
ausgeblendet. Gespeicherte Ja/Nein-Vorgaben werden als Standard ausgewaehlt;
ein vorhandener SSH-Nutzername ist im Eingabefeld vorbelegt. Vor der Installation
erscheint eine Uebersicht der geplanten Aenderungen. INSTALL und gegebenenfalls
NEUSTART muessen weiterhin ausdruecklich eingetippt werden.
Wenn beide Dialogprogramme fehlen, TERM=dumb gesetzt oder das Terminal kleiner
als 60 Spalten / 16 Zeilen ist, verwendet das Skript die bisherige Texteingabe.
Es installiert dafuer keine Pakete auf dem Host. Fuer die Dialogoberflaeche bei
fehlendem Werkzeug auf dem Proxmox-Host einmal apt-get install whiptail nutzen.
--select 'CTID CTID' ueberspringt nur die Checkliste; die anderen Abfragen bleiben
Dialoge. --list bleibt eine reine Textausgabe ohne Abfragen.
Nach einer unterbrochenen Tailscale-Anmeldung
Wenn Tailscale bereits installiert wurde, die erste Anmeldung aber scheiterte, die aktuelle Datei erneut herunterladen und fuer den betroffenen Container starten:
bash /run/lxc-enroll.sh --resume-tailscale --select CTID
Dieser ausdrueckliche Wiederaufnahme-Modus meldet vorhandene Clients nur im
Zustand NeedsLogin oder NoState an. Clients im Zustand Running behalten
ihre Registrierung; andere Zustaende werden zur manuellen Pruefung gemeldet.
Tailscale wird nicht erneut installiert. Fehlendes Wazuh und die gewaehlte
SSH-Einrichtung folgen danach. Einstellungen koennen aus .vars geladen
werden; benoetigte Schluessel und Passwoerter werden erneut verdeckt abgefragt.
Vollstaendig installierte Container bleiben aus der normalen Auswahl ausgeblendet.
Ablauf
- Laufende Debian-/Ubuntu-LXCs mit systemd erkennen. Gestoppte, gesperrte und nicht unterstuetzte Container werden uebersprungen.
- Vollstaendig installierte Container aus der Auswahl ausblenden. Bei teilweise installierten Containern nur die fehlende Komponente installieren.
- Vorherige Einstellungen auf Wunsch laden. Tailscale SSH ist beim ersten Lauf standardmaessig aktiviert. Linux-Nutzername, Sudo und optional passwortloses Sudo werden abgefragt. Es wird kein OpenSSH-Server installiert.
- LXCs in der Checkliste mit der Leertaste auswaehlen und bestaetigen. Nur diese Container werden bearbeitet.
- Wazuh-Manager-Adresse und Headscale-HTTPS-URL abfragen. Falls genau ein laufender lokaler Wazuh-Manager gefunden wird, dessen Paketversion automatisch verwenden; andernfalls die exakte Manager-Paketversion abfragen. Bei einer Manager- Adresse als Hostname wird fuer neue Einstellungen die Uebernahme von Headscale-DNS/MagicDNS standardmaessig vorgeschlagen; sie wird separat abgefragt.
- Installation mit
INSTALLbestaetigen. Fehlender TUN-Zugriff wird separat aufgelistet; erst nach Eingabe vonNEUSTARTwerden diese Container sauber heruntergefahren und neu gestartet. Bestehende Device-Slots bleiben erhalten. - Headscale-Preauth-Key verdeckt abfragen. Fuer mehrere neue Clients einen wiederverwendbaren, kurz gueltigen, nicht-ephemeren Key verwenden. Kein Headscale-API-Key. Optionales Wazuh-Enrollment-Passwort ebenfalls verdeckt eingeben, falls der Manager es verlangt.
- Fehlende Pakete aus signierten offiziellen APT-Quellen installieren und die Verbindungen neuer Clients pruefen. Fehler werden pro LXC ausgewiesen.
Tailscale SSH und Sudo
Das Skript legt den gewaehlten Linux-Nutzer bei Bedarf an und aktiviert
tailscale set --ssh=true. Vorhandene Nutzer werden nicht geloescht und vorhandene
Passwoerter nicht ersetzt. Bei Wahl von Sudo wird der Nutzer zur Gruppe sudo
hinzugefuegt. Fuer neu angelegte Nutzer mit passwortpflichtigem Sudo wird ein
Passwort verdeckt abgefragt. Alternativ kann explizit passwortloses Sudo erlaubt
werden. Die Auswahl „kein Sudo“ entzieht keinem bestehenden Nutzer Rechte.
Damit die Anmeldung funktioniert, muss die aktive Headscale-Policy sowohl die
Netzwerkverbindung auf Port 22 als auch eine passende SSH-Regel fuer Quelle,
Ziel und Linux-Nutzer erlauben. Das Skript aendert die zentrale Policy nicht und
kann ohne einen echten Loginversuch keine SSH-Anmeldung bestaetigen. Bei
Headscale wird normalerweise eine passende SSH-Regel mit action: accept
verwendet; die Regel muss zu den tatsaechlichen Benutzern und Tags passen.
Nach Einrichtung von einem zugelassenen Geraet testen:
ssh LINUX_NUTZER@TAILSCALE_IP
Beim Aktivieren koennen vorhandene SSH-Sitzungen ueber die Tailscale-Adresse
unterbrochen werden. Die Containerkonsole bleibt der Zugang fuer diesen Lauf.
Weder Subnet-Routing noch Exit-Node, Tailscale-Operator oder privilegierte
Container werden eingerichtet. Headscale-DNS/MagicDNS wird ausdruecklich
abgefragt. Bei Zustimmung verwenden neue Clients --accept-dns=true; bei
vorhandenen Clients wird nur diese Einstellung aktiviert, ohne Neuanmeldung.
Bei Ablehnung behalten neue Clients lokales DNS bei (--accept-dns=false);
vorhandene Clients behalten ihre DNS-Einstellung. MagicDNS-Namen sind dann nur
verwendbar, wenn der bestehende Resolver sie aufloesen kann. Die Headscale-
DNS-Einstellungen muessen auch die benoetigten lokalen Namen aufloesen koennen.
Gespeicherte Einstellungen
Auf Wunsch speichert das Skript nur auf dem Proxmox-Host:
/etc/lxc-enroll/.vars
Diese Datei ist JSON, kein ausfuehrbares Shellskript. Verzeichnisrechte 700,
Dateirechte 600, Eigentuemer root. Gespeichert werden Manager-Adresse,
Agent-Paketversion, Headscale-URL, Tailscale-SSH-Auswahl, Nutzername und
Sudo- und MagicDNS-Einstellungen. Die CT-Auswahl wird jedes Mal neu getroffen. Headscale-Keys,
Enrollment- und Nutzerpasswoerter werden nicht gespeichert. Sie werden bei
Bedarf erneut abgefragt, in temporaeren Dateien mit Modus 600 uebertragen und
bei regulaerem Ende oder abgefangenem Abbruch entfernt. Ein harter Prozessabbruch
kann temporaere Dateien in /run/lxc-enroll.* hinterlassen; dann entfernen.
Grenzen und Wartung
- Unterstuetzt native APT-/systemd-Installationen in Debian und Ubuntu. Alpine, VMs, weitere Hosts und gestoppte Container sind nicht enthalten.
- Der Proxmox-Host selbst bekommt durch dieses Skript keinen Wazuh-Agent.
- Vorhandene Tailscale-/Wazuh-Registrierungen werden nicht ersetzt. Fuer noch
nicht angemeldetes Tailscale gibt es
--resume-tailscale; andere Fehler, insbesondere bei vorhandenen Wazuh-Agents, brauchen separate Reparatur. - Ein Wazuh-Manager-LXC bekommt niemals zusaetzlich einen Wazuh-Agent; es kann bei fehlendem Tailscale fuer die Tailscale-Einrichtung ausgewaehlt werden.
- Die Manager-Adresse muss von den jeweiligen LXCs auf TCP 1514 und 1515 erreichbar sein. Eine Headscale-URL ist nicht automatisch die Manager-Adresse.
- Neue Wazuh-Agents werden auf die Manager-Paketversion installiert und danach
auf
holdgesetzt, damit sie den Manager nicht durch ein eigenstaendiges Upgrade ueberholen. Bei Manager-Upgrades die Agents bewusst mit aktualisieren. - Containerkonfigurationen werden vor TUN-Ergaenzungen unter
/var/backups/lxc-enroll/gesichert. Ein fehlgeschlagener sauberer Shutdown wird nicht durch gewaltsames Stoppen erzwungen. Installationen sind nicht transaktional; erfolgreiche Teilschritte bleiben bei einem spaeteren Fehler. - Enrollment allein konfiguriert keine Discord-Sicherheitsregeln und garantiert keine Erkennung aller Angriffe oder App-/Kernel-Schwachstellen.
Quellen und Pruefung
- Wazuh Linux-Deployment und Versionskompatibilitaet
- Tailscale in Proxmox-LXCs
- Headscale-Registrierung
- Tailscale SSH und Zugriffsregeln
Syntax und simulierte Auswahl-/Installationsablaeufe sind lokal geprueft, einschliesslich Debian-Systemdaten und Wiederaufnahme nach fehlgeschlagener Anmeldung. Ein echter Enrollment-Lauf samt Tailscale SSH wurde bestaetigt. Die neue Dialogoberflaeche ist mit simulierten Dialogaufrufen geprueft; Darstellung und Tastaturbedienung auf dem Proxmox-Terminal stehen noch aus.