🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇧🇦 bs · 🇨🇿 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 · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
Ukazi OmniRoute CLI se overjajo pri lokalnem upravljalnem API-ju z uporabo žetona
HMAC-SHA256(machine-id, salt), poslanega prek glave zahteve
x-omniroute-cli-token.
To podukazom CLI (omniroute status, omniroute providers itd.) omogoča
klicanje upravljalnih končnih točk, ne da bi moral uporabnik ob vsakem klicu
vnesti JWT ali geslo.
getMachineTokenSync()prebere strojni ID naprave preknode-machine-id(ob napaki uporabi prazen niz, s čimer onemogoči overjanje CLI).- Izračuna
HMAC-SHA256(machine_id, salt)in vrne celoten 64-mestni šestnajstiški izvleček — determinističen, nepovraten žeton, vezan na to napravo. - CLI pošlje žeton kot
x-omniroute-cli-tokensamo, kadar je razrešeni cilj izrecni povratnozančni URL (localhost,127.0.0.0/8ali povratnozančni IPv6). Zahteve, ki vsebujejo žeton, uporabljajoredirect: error, zato ga lokalna preusmeritev ne more posredovati drugemu izvoru. Oddaljeni konteksti namesto tega uporabljajo žetone za dostop z omejenim obsegom. Če izpeljava ni na voljo, CLI izpusti glavo,omniroute doctorpa sporoči napako, namesto da bi prazen žeton obravnaval kot veljaven. - Strežnik (
src/server/authz/policies/management.ts) z isto soljo znova izračuna pričakovani žeton in ga primerja z uporabotimingSafeEqual, da prepreči pridobivanje na podlagi časovnih razlik.
| Lastnost | Podrobnosti |
|---|---|
| Samo povratna zanka | Sprejeto samo, kadar strežnikov zaupanja vreden zaznamek lokalnosti vrstnika (izpeljan iz dejanskega naslova vrstnika TCP) kaže povratno zanko. Glavi Host, ki jo nadzoruje odjemalec, se za določanje lokalnosti nikoli ne zaupa. |
| Primerjava v konstantnem času | crypto.timingSafeEqual preprečuje časovne napade. |
| Nepovratno | Iz izhoda HMAC ni mogoče pridobiti ID-ja naprave. |
Brez obhoda zaščite always |
isAlwaysProtectedPath() se ovrednoti pred preverjanjem žetona CLI. /api/shutdown in /api/settings/database vedno zahtevata JWT. |
| Ni mogoče izvoziti | Žeton se nikoli ne zapiše na disk ali v dnevnike. |
Kadar OMNIROUTE_CLI_SALT ni nastavljen, je sol naključni 64-mestni
šestnajstiški niz, ustvarjen enkrat in trajno shranjen v
<DATA_DIR>/cli-token-salt.json (način 0600) — in ne v repozitorij vključeni
literal omniroute-cli-auth-v1. Tako getActiveSalt() v
src/lib/machineToken.ts kot njegova zrcalna implementacija v
bin/cli/utils/cliToken.mjs bereta isto datoteko, zato strežnik in vsak klic CLI
v tej namestitvi uporabljata isto vrednost; v repozitorij vključeni literal se
uporabi le kot skrajna rezerva, kadar še ni mogoče določiti trajno shranjene soli
ali soli iz okolja (na primer pri sveži namestitvi samo za CLI, preden je bil
strežnik sploh kdaj zagnan). S tem je odpravljena šibkost stare privzete fiksne
literalne vrednosti: /etc/machine-id je pogosto berljiv vsem uporabnikom, zato
bi lahko sicer kateri koli lokalni uporabnik izpeljal isti žeton za vsako
namestitev, v kateri OMNIROUTE_CLI_SALT ni bil nikoli nastavljen.
Nastavite OMNIROUTE_CLI_SALT, da spremenite izpeljani žeton brez sprememb kode — ta
ima vedno prednost pred shranjeno soljo posamezne namestitve. Po rotaciji bodo vsi procesi
CLI v tem računalniku samodejno uporabljali novi žeton. To je uporabno po razkritju seznama
procesov, ki je morda razkril prejšnjo izpeljano vrednost.
# Trajna rotacija (dodajte v profil lupine)
export OMNIROUTE_CLI_SALT="my-secret-salt-2026"
# Preverite, ali se uporablja novi žeton
omniroute statusPred zgornjo obliko HMAC je CLI svoj žeton izpeljal kot
SHA-256(machineId + salt).hex[0..32] (32-znakovna predpona) v
bin/cli/utils/cliToken.mjs (getLegacyCliTokenSync v src/lib/machineToken.ts).
Zaradi združljivosti za nazaj strežnik sprejema obe obliki: preverjevalnik ustvari
expectedTokens = [getMachineTokenSync(), getLegacyCliTokenSync()] in primerja
prejeto glavo z vsako vrednostjo s funkcijo timingSafeEqual
(src/server/authz/policies/management.ts in src/lib/middleware/cliTokenAuth.ts).
Žeton je torej veljaven, če se ujema bodisi s 64-znakovnim izvlečkom HMAC bodisi z
32-znakovno podedovano predpono SHA-256.
Onemogočanje: nastavite OMNIROUTE_DISABLE_CLI_TOKEN=true (v okolju ali datoteki .env),
da v celoti onemogočite mehanizem žetonov CLI; ves dostop nato zahteva izrecni ključ API.
To je priporočljivo na gostiteljih z več uporabniki, saj je machine-id vezan na napravo
(in ne na uporabnika), zato bi lahko drug uporabnik na istem gostitelju izračunal isti žeton.
| Datoteka | Namen |
|---|---|
src/lib/machineToken.ts |
Izpeljava žetona (getMachineTokenSync) |
bin/cli/utils/cliToken.mjs |
Zrcalna izvedba iste izpeljave na strani CLI |
<DATA_DIR>/cli-token-salt.json |
Shranjena naključna sol posamezne namestitve |
src/server/authz/headers.ts |
Konstanta CLI_TOKEN_HEADER |
src/server/authz/policies/management.ts |
Preverjanje na strani strežnika |
src/server/authz/routeGuard.ts |
Preverjanje gostitelja povratne zanke (isLoopbackHost) |
docs/security/ROUTE_GUARD_TIERS.md— ravni zaščite potidocs/architecture/AUTHZ_GUIDE.md— celoten postopek avtorizacije