5.0 KiB
Vorschlag: Client-Kommunikation und spätere Softwareverteilung
Zielbild
Ein kleiner Windows-Client („AssetManager Agent“) läuft auf jedem verwalteten Rechner. Das Netlogon-/GPO-Startskript installiert oder aktualisiert nur diesen Agenten. Die eigentlichen Inventur- und Softwareaufträge werden anschließend über eine abgesicherte HTTPS-API gesteuert.
Warum nicht jeden Befehl direkt im Netlogon-Skript ausführen?
Ein Startskript ist gut für Bootstrap und Reparatur, aber ungeeignet für eine dauerhafte Auftragssteuerung:
- Benutzer- und Computerstart verzögern sich.
- Rückmeldungen und Wiederholungen sind schwer nachzuvollziehen.
- Ein Netzlaufwerk oder DC kann beim Start noch nicht erreichbar sein.
- Softwareinstallationen benötigen Status, Timeout, Exitcode und Neustartlogik.
- Passwörter oder globale API-Schlüssel dürfen nicht im Skript stehen.
Empfohlene Komponenten
1. Bootstrap per GPO/Netlogon
Das bestehende Startskript:
- legt
C:\ProgramData\AssetManager\agentan, - lädt eine signierte Agent-Version von einer internen HTTPS-Adresse,
- installiert einen Windows-Dienst,
- schreibt nur Server-URL und eine einmalige Registrierungskennung,
- startet den Dienst.
2. Geräteidentität
Beim ersten Start registriert sich der Agent mit:
- Computername,
- AD-Domäne,
- BIOS-Seriennummer,
- Windows MachineGuid,
- optional MeshCentral Node-ID.
Der Server erstellt danach ein gerätespezifisches Token. Dieses Token wird lokal mit Windows-DPAPI geschützt. Kein gemeinsamer API-Schlüssel für alle Clients.
3. Agent-Polling
Der Client fragt beispielsweise alle 5 Minuten per HTTPS ab:
GET /api/agent/v1/jobs/next
Antwort bei keinem Auftrag:
{"job": null, "next_poll_seconds": 300}
Antwort bei einem Auftrag:
{
"job": {
"id": 4711,
"type": "software_inventory",
"expires_at": "2026-07-22T23:00:00Z",
"payload": {}
}
}
Der Client bestätigt zuerst die Übernahme und meldet später Ergebnis, Exitcode, Logauszug und Zeitstempel zurück.
4. Softwareinventur
Erste Funktion des Agenten:
- installierte MSI-Programme aus 32- und 64-Bit-Registry auslesen,
- optional AppX-Pakete,
- Name, Version, Hersteller, Installationsdatum und UninstallString erfassen,
- Ergebnis komprimiert an AssetManager senden,
- serverseitig pro Asset versioniert speichern.
Nicht Win32_Product verwenden, da diese WMI-Klasse MSI-Reparaturen auslösen
und sehr langsam sein kann.
5. Softwarekatalog für spätere Verteilung
Serverseitige Tabellen:
software_packagessoftware_package_versionssoftware_jobssoftware_job_resultsagent_devicesagent_tokensagent_inventory_runs
Ein Softwarepaket enthält:
- Name und Version,
- Installationsquelle,
- SHA-256-Hash,
- Installationsbefehl,
- Deinstallationsbefehl,
- Erkennungsregel,
- erlaubte Exitcodes,
- Neustartverhalten,
- Timeout,
- Zielarchitektur.
6. Installationsquelle
Pakete können zunächst weiter auf dem DC liegen, zum Beispiel:
\\fileserver\software\packages\ExampleApp\1.0\
Der Auftrag enthält aber nicht beliebigen PowerShell-Code, sondern verweist auf eine freigegebene Paketdefinition. Der Agent prüft:
- Paket ist serverseitig freigegeben,
- Quelle liegt in einem erlaubten UNC-Basispfad,
- Datei-Hash stimmt,
- Installationsbefehl entspricht der Paketdefinition.
Langfristig ist ein interner HTTPS-Paketdownload robuster als UNC, weil er ohne Maschinenzugriff auf die Freigabe funktioniert und leichter protokolliert werden kann.
7. Sicherheitsregeln
- ausschließlich HTTPS mit intern vertrauenswürdigem Zertifikat,
- pro Gerät eigenes widerrufbares Token,
- Jobs serverseitig signieren oder über authentisierte TLS-Verbindung liefern,
- keine freie Shell-/PowerShell-Eingabe über die Weboberfläche,
- Befehle nur aus fest definierten Jobtypen,
- Paketdateien mit SHA-256 prüfen,
- vollständiges Auditlog,
- Rollen/Berechtigungen für Freigabe und Ausführung,
- maximale Joblaufzeit und Wiederholungsgrenze,
- Agent nur als SYSTEM, wenn der konkrete Job dies benötigt.
Sinnvolle Ausbaustufen
Phase 1 – Inventur
- Agent registrieren
- Heartbeat und letzter Kontakt
- Betriebssystem- und Softwareinventur
- Anzeige im Assetdetail
- manueller Inventurauftrag
Phase 2 – Auftragsmodell
- generische Jobwarteschlange
- Status: pending, claimed, running, success, failed, expired
- Exitcodes, Logs, Timeout und Wiederholung
- Live-Anzeige im AssetManager
Phase 3 – Softwarekatalog
- Paketdefinitionen
- Erkennungsregeln
- Installation und Deinstallation
- Einzelgerät und Gerätegruppe
- Wartungsfenster
Phase 4 – Rollout-Sicherheit
- Pilotgruppen
- Genehmigungsworkflow
- gestaffelte Verteilung
- Abbruch bei Fehlerquote
- Neustartkoordination
Empfehlung für den nächsten Entwicklungsschritt
Zuerst nur Phase 1 umsetzen. Der Agent sollte noch keine beliebigen Befehle ausführen. Wenn Registrierung, Heartbeat und Softwareinventur stabil laufen, kann dieselbe gesicherte Kommunikation für die Jobwarteschlange und später die Softwareverteilung verwendet werden.