* 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.
10 KiB
CLI Machine-ID Token (Norsk)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 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 · 🇮🇳 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
Oversikt
OmniRoute CLI-kommandoer autentiseres mot det lokale administrasjons-API-et ved hjelp av et
HMAC-SHA256(machine-id, salt)-token som sendes via forespørselshodet
x-omniroute-cli-token.
Dette gjør at CLI-underkommandoer (omniroute status, omniroute providers osv.)
kan kalle administrasjonsendepunkter uten at brukeren må oppgi et JWT eller
passord ved hver kjøring.
Slik fungerer det
getMachineTokenSync()leser maskinens maskinvare-ID vianode-machine-id(går tilbake til en tom streng ved feil, noe som deaktiverer CLI-autentisering).- Den beregner
HMAC-SHA256(machine_id, salt)og returnerer hele den 64 tegn lange heksadesimale kontrollsummen – et deterministisk, ikke-reversibelt token knyttet til denne maskinen. - CLI-et sender tokenet som
x-omniroute-cli-tokenbare når det fastsatte målet er en eksplisitt loopback-URL (localhost,127.0.0.0/8eller loopback-IPv6). Forespørsler som inneholder tokenet, brukerredirect: error, slik at en lokal omdirigering ikke kan videresende det til en annen opprinnelse. Eksterne kontekster bruker avgrensede tilgangstokener i stedet. Hvis avledningen ikke er tilgjengelig, utelater CLI-et hodet, ogomniroute doctorrapporterer feilen i stedet for å behandle et tomt token som gyldig. - Serveren (
src/server/authz/policies/management.ts) beregner det forventede tokenet på nytt med samme salt og sammenligner ved hjelp avtimingSafeEqualfor å forhindre tidsbasert uthenting.
Sikkerhetsegenskaper
| Egenskap | Detalj |
|---|---|
| Bare loopback | Godtas bare når serverens klarerte stempel for motpartens lokalitet (utledet fra den faktiske TCP-adressen til motparten) angir loopback. Det klientkontrollerte Host-hodet brukes aldri som grunnlag for lokalitet. |
| Sammenligning med konstant kjøretid | crypto.timingSafeEqual forhindrer tidsangrep. |
| Ikke-reversibelt | Maskin-ID-en kan ikke utledes fra HMAC-resultatet. |
Ingen omgåelse av always-beskyttelse |
isAlwaysProtectedPath() evalueres før CLI-tokenkontrollen. /api/shutdown og /api/settings/database krever alltid JWT. |
| Ikke-eksporterbart | Tokenet skrives aldri til disk eller logges. |
Standardsalt (tilfeldig per installasjon)
Når OMNIROUTE_CLI_SALT ikke er angitt, er saltet en tilfeldig heksadesimal streng på 64 tegn
som genereres én gang og lagres i <DATA_DIR>/cli-token-salt.json (modus 0600) –
ikke den innsjekkede literalen omniroute-cli-auth-v1. Både getActiveSalt() i
src/lib/machineToken.ts og speilimplementasjonen i bin/cli/utils/cliToken.mjs leser den
samme filen, slik at serveren og hver CLI-kjøring i denne installasjonen ender opp med den
samme verdien. Den innsjekkede literalen brukes bare som en siste utvei når verken et
lagret salt eller et salt fra miljøet ennå kan etableres (for eksempel i en ny installasjon med bare CLI-et
før serveren noen gang har kjørt). Dette lukker en svakhet ved den gamle, faste standardliteralen:
/etc/machine-id er vanligvis lesbar for alle, slik at enhver lokal bruker ellers kunne
utlede det samme tokenet for hver installasjon der OMNIROUTE_CLI_SALT aldri ble angitt.
Saltrotasjon
Angi OMNIROUTE_CLI_SALT for å rotere det avledede tokenet uten kodeendringer — den
har alltid prioritet over det lagrede saltet per installasjon. Etter rotasjon vil alle CLI-
prosesser på denne maskinen automatisk bruke det nye tokenet. Nyttig etter en lekkasje
av prosesslisten som kan ha eksponert den forrige avledede verdien.
# Vedvarende rotasjon (legg til i skallprofilen)
export OMNIROUTE_CLI_SALT="my-secret-salt-2026"
# Kontroller at det nye tokenet er i bruk
omniroute status
Eldre format (SHA-256, 32 tegn) — godtas fortsatt
Før HMAC-formatet ovenfor avledet CLI-en tokenet som
SHA-256(machineId + salt).hex[0..32] (et prefiks på 32 tegn) i
bin/cli/utils/cliToken.mjs (getLegacyCliTokenSync i src/lib/machineToken.ts).
For bakoverkompatibilitet godtar serveren begge formatene: Verifikatoren bygger
expectedTokens = [getMachineTokenSync(), getLegacyCliTokenSync()] og sammenligner
den innkommende headeren med hvert av dem ved hjelp av timingSafeEqual
(src/server/authz/policies/management.ts og src/lib/middleware/cliTokenAuth.ts).
Et token er derfor gyldig hvis det samsvarer med enten HMAC-digesten på 64 tegn
eller det eldre SHA-256-prefikset på 32 tegn.
Deaktivering: Angi OMNIROUTE_DISABLE_CLI_TOKEN=true (miljøvariabel eller .env) for å deaktivere CLI-
tokenmekanismen fullstendig. All tilgang krever da en eksplisitt API-nøkkel. På flerbruker-
verter anbefales dette, siden machine-id gjelder per enhet (ikke per bruker), og en annen
bruker på samme vert kan beregne det samme tokenet.
Filer
| Fil | Formål |
|---|---|
src/lib/machineToken.ts |
Tokenavledning (getMachineTokenSync) |
bin/cli/utils/cliToken.mjs |
CLI-kopi av den samme avledningen |
<DATA_DIR>/cli-token-salt.json |
Lagret tilfeldig salt per installasjon |
src/server/authz/headers.ts |
Konstanten CLI_TOKEN_HEADER |
src/server/authz/policies/management.ts |
Verifisering på serversiden |
src/server/authz/routeGuard.ts |
Kontroll av loopback-vert (isLoopbackHost) |
Se også
docs/security/ROUTE_GUARD_TIERS.md— nivåer for rutebeskyttelsedocs/architecture/AUTHZ_GUIDE.md— fullstendig autorisasjonsflyt