Files
OmniRoute/docs/i18n/da/docs/security/CLI_TOKEN.md
Diego Rodrigues de Sa e Souza 8feea123bb feat(docs): mirror every docs/ page in all 65 locales (#14106)
* feat(docs): mirror every docs/ page in all 65 locales

Extends the documentation mirrors from the 22-page core set (#13940) to
every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors
(6,208 new), language bars rewritten for the full locale list, state
adopted so the blocking drift gate now covers all 152 pages.

run-translation.mjs: an oversized block made only of table rows or list
items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is
cut at item boundaries and rejoined without a blank line — the single
16-40 KB request outlived the backend socket for verbose scripts. 48
older mirrors whose tables had lost rows were retranslated with --force.

* docs(i18n): refresh mirrors for the sources the base changed since the branch cut

Section-level retranslation of the 29 docs (and README.md) whose source
or mirrors moved on release/v3.8.51 during the run, then state adoption;
the drift gate is green again on the merged tree.
2026-09-18 13:16:46 -03:00

11 KiB

CLI Machine-ID Token (Dansk)

🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW


Oversigt

OmniRoute CLI-kommandoer godkendes mod den lokale administrations-API ved hjælp af et HMAC-SHA256(machine-id, salt)-token, der sendes via request-headeren x-omniroute-cli-token.

Dette gør det muligt for CLI-underkommandoer (omniroute status, omniroute providers osv.) at kalde administrationsendpoints, uden at brugeren skal angive et JWT eller en adgangskode ved hver kørsel.

Sådan fungerer det

  1. getMachineTokenSync() læser maskinens hardware-id via node-machine-id (falder tilbage til en tom streng ved fejl, hvilket deaktiverer CLI-godkendelse).
  2. Funktionen beregner HMAC-SHA256(machine_id, salt) og returnerer det fulde hex-digest på 64 tegn — et deterministisk, ikke-reversibelt token, der er knyttet til denne maskine.
  3. CLI'en sender kun tokenet som x-omniroute-cli-token, når den fastlagte destination er en eksplicit loopback-URL (localhost, 127.0.0.0/8 eller loopback-IPv6). Requests, der indeholder tokenet, bruger redirect: error, så en lokal omdirigering ikke kan videresende det til en anden origin. Fjernkontekster bruger i stedet adgangstokens med begrænset anvendelsesområde. Hvis afledningen ikke er tilgængelig, udelader CLI'en headeren, og omniroute doctor rapporterer fejlen i stedet for at behandle et tomt token som gyldigt.
  4. Serveren (src/server/authz/policies/management.ts) genberegner det forventede token med det samme salt og sammenligner via timingSafeEqual for at forhindre tidsbaseret udtrækning.

Sikkerhedsegenskaber

Egenskab Detalje
Kun loopback Accepteres kun, når serverens pålidelige lokalitetsstempel for peer'en (afledt af den faktiske TCP-peeradresse) angiver loopback. Den klientkontrollerede Host-header betragtes aldrig som pålidelig til bestemmelse af lokalitet.
Sammenligning i konstant tid crypto.timingSafeEqual forhindrer timingangreb.
Ikke-reversibel HMAC-outputtet kan ikke bruges til at gendanne maskin-id'et.
Ingen omgåelse af always-beskyttelse isAlwaysProtectedPath() evalueres før kontrollen af CLI-tokenet. /api/shutdown og /api/settings/database kræver altid JWT.
Kan ikke eksporteres Tokenet skrives aldrig til disken eller logges.

Standardsalt (tilfældigt pr. installation)

Når OMNIROUTE_CLI_SALT ikke er angivet, er saltet en tilfældig hex-streng på 64 tegn, som genereres én gang og gemmes i <DATA_DIR>/cli-token-salt.json (tilstand 0600) — ikke den literal, der er checket ind, omniroute-cli-auth-v1. Både getActiveSalt() i src/lib/machineToken.ts og dens tilsvarende implementering i bin/cli/utils/cliToken.mjs læser den samme fil, så serveren og hver CLI-kørsel i denne installation ender med at bruge den samme værdi. Den indcheckede literal bruges kun som en sidste reserve, når der endnu ikke kan etableres et gemt salt eller et salt fra miljøet (for eksempel i en ny installation, der kun indeholder CLI'en, før serveren nogensinde er blevet kørt). Dette lukker en svaghed ved den gamle faste standardliteral: /etc/machine-id kan almindeligvis læses af alle, så enhver lokal bruger kunne ellers aflede det samme token for hver installation, hvor OMNIROUTE_CLI_SALT aldrig blev angivet.

Rotation af salt

Angiv OMNIROUTE_CLI_SALT for at rotere det afledte token uden kodeændringer — det har altid prioritet over det gemte installationsspecifikke salt. Efter rotationen vil alle CLI- processer på denne maskine automatisk bruge det nye token. Nyttigt efter en lækage af proceslisten, som kan have afsløret den tidligere afledte værdi.

# Permanent rotation (føj til shell-profilen)
export OMNIROUTE_CLI_SALT="my-secret-salt-2026"

# Kontrollér, at det nye token er i brug
omniroute status

Ældre format (SHA-256, 32 tegn) — accepteres stadig

Før HMAC-formatet ovenfor afledte CLI'en sit token som SHA-256(machineId + salt).hex[0..32] (et præfiks på 32 tegn) i bin/cli/utils/cliToken.mjs (getLegacyCliTokenSync i src/lib/machineToken.ts).

Af hensyn til bagudkompatibilitet accepterer serveren begge formater: Verifikatoren opbygger expectedTokens = [getMachineTokenSync(), getLegacyCliTokenSync()] og sammenligner den indgående header med hver af dem ved hjælp af timingSafeEqual (src/server/authz/policies/management.ts og src/lib/middleware/cliTokenAuth.ts). Et token er således gyldigt, hvis det matcher enten HMAC-digesten på 64 tegn eller det ældre SHA-256-præfiks på 32 tegn.

Fravalg: Angiv OMNIROUTE_DISABLE_CLI_TOKEN=true (miljøvariabel eller .env) for at deaktivere CLI- tokenmekanismen fuldstændigt. Al adgang kræver derefter en eksplicit API-nøgle. På værter med flere brugere anbefales dette, da machine-id gælder pr. enhed (ikke pr. bruger), og en anden bruger på samme vært derfor kan beregne det samme token.

Filer

Fil Formål
src/lib/machineToken.ts Tokenafledning (getMachineTokenSync)
bin/cli/utils/cliToken.mjs CLI-sideækvivalent af samme afledning
<DATA_DIR>/cli-token-salt.json Gemt tilfældigt installationsspecifikt salt
src/server/authz/headers.ts Konstanten CLI_TOKEN_HEADER
src/server/authz/policies/management.ts Verifikation på serversiden
src/server/authz/routeGuard.ts Kontrol af loopback-vært (isLoopbackHost)

Se også

  • docs/security/ROUTE_GUARD_TIERS.md — niveauer for rutebeskyttelse
  • docs/architecture/AUTHZ_GUIDE.md — komplet autorisationspipeline