Lokale Sicherheit
- Normativ
- Entwurf 1.0
- Aktualisiert
- Als Markdown anzeigen
10.1 Grundlage
Das ausschließliche Lauschen auf localhost ist keine absolute Sicherheit: Eine bösartige Webseite kann trotzdem versuchen, lokale Ports zu erreichen. LMSP kombiniert deshalb mehrere Maßnahmen.
- Ein Dienst MUSS sich standardmäßig an die Loopback-Adressen binden. Er DARF NICHT auf
0.0.0.0oder einer anderen Nicht-Loopback-Adresse lauschen, solange der LAN-Modus nicht aktiviert ist (Abschnitt 10.5). - Beim ersten Start SOLLTE ein Dienst ein zufälliges Dienstgeheimnis mit hoher Entropie erzeugen und damit, statt mit einem eingebauten Standardwert, Tokens ausstellen und prüfen.
- Jede Anfrage an die Kernschnittstelle MUSS ein gültiges Bearer-Token tragen, außer bei den in Abschnitt 4.2 aufgeführten Bootstrap-Endpunkten. Von Loopback zu kommen genügt allein nie.
10.2 Kopplung und Tokens
Ein Client erhält sein eigenes Bearer-Token mit einem lokalen Kopplungscode. Der Nutzer lässt sich vom Dienst auf dessen Weise einen Kopplungscode anzeigen, und der Client reicht ihn ein:
POST /lmsp/v1/pair
Content-Type: application/json
{
"client_name": "example-client",
"pairing_code": "K7QD-4M2X",
"scopes": ["inference"]
}
| Anfragefeld | Bedeutung |
|---|---|
client_name |
Anzeigename des Clients, dem Nutzer angezeigt. |
pairing_code |
Der Code, den der Nutzer vom Dienst erhalten hat. |
scopes |
Optionale Liste der angeforderten Scopes. Standardwert ist ["inference"]. |
Der Dienst antwortet mit einem Token. Der token_type ist immer Bearer:
{
"client_id": "cli_01J8MAT3W6X9B2D5F8H1K4N7QZ",
"access_token": "lmsp_example_3f9a1c52e7d84b60",
"token_type": "Bearer",
"scopes": ["inference"]
}
Danach sendet der Client mit jeder Anfrage Authorization: Bearer <token>.
- Ein Kopplungscode MUSS nur einmal verwendbar sein und SOLLTE innerhalb von 5 Minuten ablaufen. Er SOLLTE mindestens 40 Bit Entropie enthalten. Ein Dienst MUSS fehlgeschlagene Versuche begrenzen. Ein falscher oder abgelaufener Code wird mit
401undunauthorizedbeantwortet. - Tokens sind pro Client unabhängig, sodass der Nutzer einen Client widerrufen kann, ohne die anderen zu beeinträchtigen. Ein Dienst SOLLTE dem Nutzer erlauben, gekoppelte Clients aufzulisten und zu widerrufen.
- Ein Client SOLLTE sein Token im Schlüsselbund oder in der Anmeldeinformationsverwaltung des Betriebssystems aufbewahren. Ein Dienst SOLLTE nur einen Hash jedes Tokens speichern.
- Ein fehlendes, ungültiges oder widerrufenes Token wird mit
401,unauthorizedund einemWWW-Authenticate: Bearer-Header beantwortet. Ein gültiges Token, dem der von einem Endpunkt benötigte Scope fehlt, wird mit403undforbiddenbeantwortet.
10.3 Scopes
Berechtigungen sind in getrennte Scopes aufgeteilt. Modelle herunterzuladen, Modelle zu löschen und Tools auszuführen läuft nie über den Inferenz-Scope mit.
| Scope | Erlaubt |
|---|---|
inference |
Den Modellkatalog lesen, Antworten und Aufgaben erstellen sowie die eigenen Aufgaben des Clients lesen und abbrechen. |
models:manage |
Modelle laden und entladen. |
models:install |
Reserviert. Modelle herunterladen und löschen. |
tools:execute |
Reserviert. Tools auf Dienstseite ausführen. |
Aufgaben und gespeicherte Antworten gehören dem Client, der sie erstellt hat. Ein Dienst SOLLTE auf die Anfrage eines anderen Clients antworten, als gäbe es sie nicht (task_not_found oder response_not_found).
10.4 Schutz von Browser und Netzwerk
- Ein Dienst MUSS Cross-Origin-Browseranfragen standardmäßig ablehnen und nur ausdrücklich konfigurierte
Origin-Werte zulassen. Eine Anfrage mit einer anderenOriginwird mit403undforbiddenbeantwortet. - Ist ein Origin erlaubt, beantwortet der Dienst dessen CORS-Preflight-Anfragen und sendet
Access-Control-Allow-Originmit genau diesem Origin, nie mit*. - Ein Dienst MUSS den
Host-Header validieren, um DNS-Rebinding zu verhindern. Er akzeptiert nur Hostnamen, die er bedient: die Loopback-Namen und -Adressen sowie alle für den LAN-Modus konfigurierten Namen. Jeder andere Wert wird mit403undforbiddenbeantwortet.
10.5 LAN-Modus
LAN-Modus bedeutet, über die Loopback-Adressen hinaus zu lauschen.
- Ein Dienst DARF NICHT den LAN-Modus aktivieren, es sei denn, der Nutzer schaltet ihn ausdrücklich ein.
- Im LAN-Modus MUSS ein Dienst eine Authentifizierung verlangen und SOLLTE außerdem TLS aktivieren. Ein Client SOLLTE NICHT ein Token über unverschlüsseltes HTTP an eine Nicht-Loopback-Adresse senden, es sei denn, der Nutzer erlaubt es ausdrücklich.
- Die mDNS-Ankündigung ist nur im LAN-Modus erlaubt, wenn der Nutzer außerdem die LAN-Erkennung eingeschaltet hat (Abschnitt 3.2).
10.6 Protokollierung und Datenschutz
- Modellpfade, Logs, Prompts und generierte Inhalte DÜRFEN NICHT in mDNS-Ankündigungen erscheinen.
- Standardmäßig SOLLTE ein Dienst nur Metadaten protokollieren (Zeiten, Endpunkte, Statuscodes, IDs, Token-Zahlen und Dauern). Er SOLLTE NICHT vollständige Prompts oder generierte Inhalte protokollieren.
- Health-Antworten und Fehlerdetails DÜRFEN NICHT Modellpfade, Prompts, Zugriffstokens oder andere sensible Informationen enthalten.