nessie

Nuotoliniai vykdytojai

Suteikite agentui tikrą kompiuterį darbui — Linux, macOS ar Windows sistemoje.

Kas yra nuotolinis vykdytojas

Agentas Nessie neturi kompiuterio. Jis gali skaityti tai, kas yra Nessie, kalbėtis su žmonėmis ir kviesti prijungtus įrankius per tinklą, bet negali atidaryti failo nešiojamajame kompiuteryje, paleisti komandos ar pažiūrėti puslapio, kuris egzistuoja tik už kieno nors prisijungimo. Nuotolinis vykdytojas yra būdas suteikti agentui mašiną, su kuria jis gali dirbti.

Vykdytojas yra nedidelis demonas, kurį įdiegiate kompiuteryje, kuriuo valdote. Jis išeinančiu ryšiu susiejamas su jūsų Nessie egzemplioriumi, raktu, kuris niekada nepalieka kompiuterio, įrodo, kokia tai mašina, ir tada siūlo fiksuotą, pavadinimais įvardytą operacijų rinkinį, ir nieko daugiau. Darbas ateina kaip atskiros pasirašytos komandos, o rezultatai grįžta kaip ribotos, struktūrizuotos patvirtinimų ataskaitos. Mašina niekada nepriima įeinančio ryšio iš Nessie.

Verta būti tiksliems, ką vykdytojas nėra, nes dauguma nuotolinės prieigos įrankių yra vienas iš šių dalykų, o vykdytojas tyčia nėra nė vienas iš jų. Čia nėra SSH, nėra bendros nuotolinės apvalkalo aplinkos, nėra prisijungimo prie jau atidaryto terminalo multiplekserio, nėra debesies įvesties ir nėra bendro vietinio tinklo tarpinio serverio. Tai nėra MCP serveris, ir tai nėra konteineris ar debesies vykdymo aplinka. Nessie tokias aplinkas jau turi, ir jos yra kas kita. Vykdytojas yra galinis taškas su galimybėmis ir uždaru operacijų sąrašu, o šis sąrašas yra visas jo paviršius.

Kam priklauso vykdytojas

Kiekvienas vykdytojas sukuriamas tik su viena apimtimi, kurios vėliau pakeisti negalima. Ji nusako, kas gali jį naudoti ir kas jį administruoja.

ApimtisKas gali jį naudotiKas valdo prieigą
PrivatiPrašantis asmuo ir tiksliai iškviestas agentas abu turi būti įvardyti priskirtais asmenimis. Vieno jų nepakanka.Priskirtas žmogus administratorius. Agentai gali naudoti privatų vykdytoją, bet negali juo administruoti.
ProjektasAsmuo, turintis teisę į tą konkretų projektą, ir tik iš vykdymo tame projekte.Organizacijos valdytojas arba projekto savininkas ar administratorius.
OrganizacijaAsmuo su organizacijos teisėmis.Organizacijos valdytojas.

Privatus vykdytojas visada turi turėti bent vieną aktyvų žmogų administratorių. Paskutinio administratoriaus pašalinimas tiesiogiai nepavyksta; jei atleidimo procesas paliktų nė vieno, vykdytojas nebepriima naujo darbo, baigia tai, ką jau turi, ir pats save atšaukia. Organizacijos savininkas turi tik atšaukimo avarinį kelią, kuris užbaigia vykdytoją, kurio kitaip nevaldo, nerodydamas jam nei privataus sąrašo, nei sesijų, nei turinio. Privati prieiga niekada tyliai nepersikelia kitam asmeniui.

Ką agentas iš tikrųjų gali daryti su juo

Operacijų vokabuliaras yra fiksuotas kode, o ne konfigūruojamas kiekviename diegime. Jis skirstomas į dvi dalis, ir ši dalis lemia, ką reikia įdiegti: kai kurias operacijas demonas teikia iš savo laikinojo katalogo be jokios virtualios mašinos, o likusioms reikia vienos sesijos svečio VM ant pagrindinės mašinos.

OperacijaKą daroSvečio VM
file.list, file.readIšvardija ir skaito failus po viena darbo srities šaknimi, pasirinkta susiejant.Ne
file.writeRašo į kopijuojamą rašymo metu darbo srities juodraštį. Realios šaknies rašymui niekada neatveria.Ne
workspace.reviewPateikia, ką juodraštis pakeitė: iki 100 santykinių kelių su tipu ir baitų skaičiumi bei manifesto santrauką. Turinio nėra.Ne
sandbox.stopSustabdo sesiją, kurią valdo šis paleidimas.Ne
command.runPaleidžia vieną komandą kaip be apvalkalo argumentų vektorių svečio VM be išeinančio srauto. Šiame kelyje nėra jokios apvalkalo eilutės.Taip
browser.open, browser.observe, browser.actValdo naršyklę svečio VM prieš kilmės sąrašą, sukonfigūruotą mašinoje. Stebėjimas grąžina ribotą prieinamumo medį ir pasirinktinai sumažintą vaizdą. Veiksmai yra naršyti, spustelėti, įvesti, paspausti ir slinkti, taikomi mazgui, kurį agentas ką tik stebėjo, niekada selektoriui, koordinatėms ar scenarijui.Taip
coding.launch, coding.observePaleidžia valdomą Codex sesiją svečio VM ir nuskaito tipizuotą gyvavimo ciklo būseną. Terminalo prijungimo ir užklausų kanalo nėra: agentas sužino, ar sesija veikia, bet ne tai, kas rodoma jos ekrane.Taip
workspace.promotePritaiko peržiūrėtą juodraštį realiai darbo sričiai. Tai vienintelė operacija, kuri rašo į pagrindinę mašiną, ir ji tyčia nesiūloma modeliams visai.Ne

Operacijos, kurioms nereikia svečio, sudaro darbo srities paketą. Pagrindinė mašina, kuri negali paleisti svečio, nėra sugedęs vykdytojas: ji normaliai susiejama, praneša savo smėlio dėžės variantą kaip none ir siūlo tik darbo srities paketą. Būtent į tokią būseną patenka Windows leidimas be Hyper-V arba Linux mašina, kurios naudotojas negali naudoti /dev/kvm. Sąsaja tai pasako, o ne nepavyksta neaiškiai.

Naršymo darbą agentas niekada nepradeda savo iniciatyva. Įprastas vienos operacijos priskyrimo kelias griežtai atmeta browser.open ir browser.observe. Naršyklės paleidimą pradeda žmogus iš kanalo kaip vieną keturių operacijų paketą naujame paleidime, ir prie to paleidimo vėliau negalima pridėti jokio papildomo priskyrimo. Valdomos kodavimo sesijos veikia taip pat.

Dar dvi grupės egzistuoja kode ir tyčia nepasiekiamos. Operacijos, skirtos valdyti Chrome skirtuką, prie kurio jau esate prisijungę, turi pilną vietinį įgyvendinimą ir natyvios žinutės (native messaging) plėtinį, bet valdymo plokštuma jų neskelbia, kol serveris nepajėgs įrodyti, kad kilęs pokalbis buvo privatus, ir įrašyti, kas ką atskleidė. Pamatas tyčia neveikia, o plėtinys nėra pateiktas nė viename diegimo pakete. Be to, kelios kodavimo operacijos (attach, prompt, interrupt ir close) yra nurodytos schemoje, bet neturi įgyvendinimo, todėl negali būti suteiktos.

Kaip tai veikia

Ryšys visada išeinantis

Demonas kuria išeinančius HTTPS ir WSS ryšius tik su jūsų Nessie API ir su niekuo kitu. Nessie niekada nesikreipia į nešiojamąjį kompiuterį, niekada nesaugo jo adreso ir niekada nelaiko jokio katalogo galinio taško mašinos transportu. Todėl vykdytojas veikia iš namų tinklo, už NAT, korporatyviniame VPN, be prievado peradresavimo ir be įeinančios ugniasienės taisyklės. Dėl to demono sustabdymas yra pilnas ir nedelsiamas atjungimas.

API kilmė turi būti HTTPS. Vienintelė išimtis yra loopback adresas žmonėms, kurie Nessie paleidžia savo kompiuteryje, valdomas atskiru aplinkos kintamuoju. Jokia įprasta vėliava produkcinės kilmės nepaverčia paprastu HTTP.

Susiejimas patvirtina mašiną, o žmogus ją patvirtina

Susiejimas yra dvipusis įrodymas. Įgaliotas asmuo sukuria vykdytoją Nessie su jo apimtimi, o Nessie išduoda registraciją: 256 bitų atsitiktinį iššūkį, kurio Nessie saugo tik SHA-256 patikrinimo reikšmę. Registracija galioja dešimt minučių ir naudojama vieną kartą.

Mašinoje demonas sukuria Ed25519 raktų porą, saugo ją savininkui prieinamoje, OS apsaugotoje saugykloje ir įrašo tikslią pasirašytą užklausą į diską prieš bet kokį tinklo kvietimą. Tai daroma tam, kad prarastas atsakymas galėtų būti pakartotas su tuo pačiu paruoštu raktu, o ne tyliai susietas du kartus. Tada jis pateikia registracijos ID, iššūkį, savo viešąjį raktą ir parašo įrodymą. Nessie saugo viešąjį raktą ir jo pirštų atspaudą. Privataus rakto niekada neišsaugo.

Tada Nessie parodo tą pirštų atspaudą žmogui, kuris jį patvirtina. Kol nevyksta šis patvirtinimas ir vėlesnis valdymo įrodymas, vykdytojas lieka neprisijungęs. Susiejimo negalima užbaigti iš pokalbio teksto ar terminalo įrašo. Reikia sąmoningo žmogaus veiksmo webo arba darbalaukio sąsajoje.

Mašina, kuri praranda savo raktą, negali atgauti savo vykdytojo įrašo. Jis atšaukiamas ir registruojamas iš naujo kaip naujas vykdytojas. Rakto keitimas, priešingai, yra vienas sandoris, pasirašytas ir senuoju, ir nauju raktu.

Aprašas yra mašinos pasirašytas teiginys apie save

Susietas demonas skelbia aprašą: pasirašytą, monotoniškai peržiūrimą teiginį tik apie struktūrinius faktus. Jame nurodoma, kurias operacijų schemas jis palaiko, kokios yra jo išteklių ir tinklo ribos, kokia platforma ir kokia jo vietinės politikos santrauka. Aprašas nenurodo jokių kelių iš mašinos ir nesukuria jokių įgaliojimų debesyje.

Nauja revizija niekada neaktyvuojama atvykusi. Ji laukia peržiūros, ir įgaliotas asmuo turi ją pamatyti ir patvirtinti, kol ji gali paveikti, kas yra prieinama. Būtent tai neleidžia prieinamumo atnaujinimui tyliai suteikti naujų galių: naujai paskelbta operacija iš pradžių uždrausta.

Būkite aiškūs, ką įrodo parašas. Aprašas, pasirašytas susieto vykdytojo raktu, įrodo, kad tą teiginį pateikė tas raktas. Jis neįrodo, kad pagrindinė mašina nepažeista, ir sąsaja privalo tai pasakyti.

Siuntimas: kandidatas, priskyrimas, komanda, patvirtinimas

Agentas niekada nenurodo vykdytojo. Prieš tai, kai paleidimas gali jį naudoti, Nessie loginę operaciją paverčia trumpalaikiu, nepermatomu prieinamumo kandidatu. Atsakyme nėra vykdytojo ID. Duomenų bazė saugo tik kandidato rankenos santrauką kartu su tuo, kas ir kam ji buvo išspręsta. Modeliai ir klientai gauna rankeną, o ne pasirenkamą mašiną.

Prieinamumą sprendžia vienas sprendiklis, vienodai naudojamas API, darbuotojo, sąsajos ir asistento:

available(operation, human, agent, immutableRunContext) =
  human may discover executor
  ∩ exact executor-agent-operation grant allows operation
  ∩ stable logical tool grant allows operation
  ∩ scope matches immutable run context
  ∩ executor is online and descriptor is approved
  ∩ local policy permits operation

Panaudojus kandidatą, pagal duomenų bazės užraktą sukuriamas priskyrimas. Jis dar kartą patikrina visus šiuos vartus ir padidina monotoniškai didėjantį barjerą. Siuntimas juos tikrina dar kartą. Pasekmė: atšauktas leidimas, sumažinta politika ar panaikintas vykdytojas tarp dviejų žingsnių sustabdo darbą, o ne būna pastebėtas vėliau. Pakartojimas niekada negali atsidurti kitoje mašinoje nei ta, su kuria paleidimas buvo susietas.

Pati komanda važiuoja įprastu Nessie eilės darbu ir įrankio iškvietimo gyvavimo ciklu, o ne atskiru savu. Demonas apklausia darbą per autentifikuotą valdymo kanalą; jam niekada nesiunčiama. Komanda pereina per keturis patvirtinimus ir jokių kitų:

leased → accepted → started → result-acknowledged

Kiekvienas kadras susieja komandos ID, paleidimo kilmę, priskyrimo barjerą, galimybių reviziją, galiojimo laiką, idempotencijos raktą ir argumentų bei naudingosios apkrovos santraukas. Demonas atmeta neatitikimą, pasenusią politiką, pakartojimą ar antrą rezultatą komandai, kurią jau užbaigė. Argumentai ir galutiniai rezultatai saugomi šifruoti AES-256-GCM. Duomenų bazėje laikomas ribotas šifruotas tekstas ir kanoninės santraukos, o ne turinys.

Jei patvirtinimas prarandamas, Nessie nedaro prielaidos apie sėkmę. Komanda įrašoma kaip nežinomas rezultatas, o paleidimas eina įprastu atkūrimo keliu. Demonas kiekvieną pristatytą komandą prieš pradėdamas darbą įrašo vietiniame žurnale, todėl šalutinio poveikio nekartos. Vėlesnis patvirtinimas vis dar gali šią neaiškumą išspręsti sąžiningai.

Pasitikėjimo riba

DalyvisGaliNegali
AsmuoSusieti vykdytoją, jį valdyti, kai turi teisę, patvirtinti prieigą ir politikos pakeitimus.Išplėsti politikos, kurią pati mašina uždraudžia, ar veikti be galiojančio įgaliojimo.
Agentas, įskaitant asmeninį asistentąIškviesti operaciją, kuri jam jau prieinama; paruošti siūlomą prieigos pakeitimą asmeniui, kuris paprašė.Administruoti prieigos, patvirtinti pats save, pasirinkti mašinos, keisti vietinės politikos ar pritaikyti pakeitimą, kurį pats paruošė.
Nessie valdymo plokštumaSpręsti prieinamumą, susieti paleidimą, išduoti komandas nuomai, saugoti redaguotus audito faktus.Skambinti mašinai, išplėsti vietinę politiką, pasiekti pagrindinės mašinos prisijungimo duomenų ar traktuoti terminalo tekstą kaip įgaliojimą ar rezultatą.
Vykdytojo demonasVykdyti vietinę politiką, susieti išeinančiu ryšiu, paleisti svečią ir šliuzą, patvirtinti komandas.Išplėsti savo apimties, priimti pasenusio ar pakartoto darbo, tiesiogiai atskleisti pagrindinės mašinos darbo srities ar prisijungimo duomenų arba siųsti neapdorotus vietinius duomenis į audito įrašus.
Svečio VM ir jame esantys įrankiaiDirbti kopijuojamos rašymo metu smėlio dėžėje, pasiekiant tinklą tik per šliuzą.Pasiekti pagrindinės mašinos failų, prisijungimo duomenų, tiesioginio tinklo ar DNS arba pritaikyti pagrindinės mašinos pakeitimo.

Vykdytojo diegimas ir susiejimas

Mac CLI diegiate per Homebrew, Mac programas per Homebrew casks, Linux CLI per APT arba DNF, o Windows vykdytoją per WinGet. Kiekviena susieta komanda turi atskirus leidimus, saugomus kompiuteryje. Nessie valdo prieigą komandoje; vietinių išteklių pakeisti ji negali.

Diegimo ir susiejimo vadovas pateikia tikslias komandas, dviejų pusių aštuonių skaitmenų kodo procesą, vietinius nustatymus, paleidimą, atnaujinimus ir pašalinimą.

Kiek kiekviena platforma iš tikrųjų patikrinta

Trijų svečio smėlio dėžių būsena skiriasi, ir skirtumas esminis. macOS yra variantas su veikiančiu, išbandytu svečio keliu. Linux Firecracker variantas ir Windows Hyper-V variantas yra įgyvendinti ir aprėpti pagrindinės mašinos testais: paleidimo seka, diskų vaizdai, valdymo ir išėjimo transportai, juodraščių protokolas. Tačiau nė vienas svečias dar nebuvo paleistas tikrame įrenginyje šiame projekte nuolatinėje integracijoje, nes tam reikia mašinos su KVM arba Hyper-V, o darbai, kurie tai įrodytų, tokios mašinos niekada neturėjo. Darbo srities paketas, kuriam svečio nereikia, visiškai išbandytas Windows sistemoje su tikru valdymo ciklu. Operacijas Linux ir Windows sistemose, kurioms reikia svečio, laikykite neįrodytomis, kol jų neįrodysite savo aparatinėje įrangoje. Nessie susiejimo ekranas sako tą patį savais žodžiais.

Saugumas ir izoliacija

Viena darbo srities šaknis, o jos kelias lieka mašinoje

Susiejimas pasirenka tiksliai vieną kanoninę darbo srities šaknį: vieną katalogą, o ne aplankų rinkinį ir niekada jų artimiausią bendrą tėvinį katalogą. Nessie sakoma šaknies pavadinimas, kad asmuo sąsajoje galėtų atpažinti ribą. Visas kelias lieka tik savininkui prieinamoje mašinos būsenoje ir niekada neįkeliamas. Šaknį keisti galima, bet tik panaikinus visus vietinius juodraščius ir smėlio dėžes. Tai sukuria naują aprašo reviziją, einančią per tą pačią žmogaus peržiūrą kaip ir bet koks kitas politikos pakeitimas. Ji niekada tyliai neišsiplečia iki tėvinio katalogo.

Failų operacijos priima tik santykinius kelius. Jos atmeta krypties perėjimus ir visus simbolinių nuorodų komponentus, iš naujo patikrina, ar sukonfigūruota šaknis vis dar yra paprastas katalogas, ir grąžina ribotus struktūrizuotus rezultatus, kuriuose nėra pagrindinės mašinos kelio.

Rašymai eina į kopiją, o pritaiko tik žmogus

Agentas niekada nerašo į jūsų failus. file.write sukuria ribotą kopijuojamą rašymo metu medį demono savame būsenos kataloge, susietą su paleidimu, ir vėlesni skaitymai bei sąrašai tam paleidimui mato juodraštį. Svečio darbas, įskaitant kodavimo sesijas, naudoja tą pačią kopijuojamą rašymo metu laikinąją sritį.

Juodraščio pritaikymas darbo sričiai yra vienas veiksmas (workspace.promote), ir tai vienintelis įrašymas į pagrindinę mašiną sistemoje. Jis neturi jokios modeliams skirtos schemos: nei agentas, nei asistentas, nei iškvietėjo pateiktas kelias negali paversti juodraščio įrašymu į mašiną. Vietoj to asmuo atidaro Jūsų peržiūrėti juodraščiai, paspaudžia Peržiūrėti pritaikymą ir patvirtina dabartiniu slaptažodžiu. Tada serveris dar kartą patikrina patvirtintą peržiūros santrauką, manifesto santrauką, kilmės paleidimą, naudotoją ir agentą, autorizacijos reviziją, operacijos leidimą ir aktyvią vietinę politiką, ir tik tada sukuria komandą. Mašinoje demonas pats perkuria manifestą ir atmeta pasikeitusią santrauką, todėl redagavimas po peržiūros negali patekti su peržiūros patvirtinimu.

Pats pritaikymas yra pagrįstas aprašais ir įrašytas žurnale. Vietinis pagalbinis įrankis gauna darbo srities šaknį ir juodraštį kaip jau atidarytus katalogų deskriptorius, o ne kaip kelius. Kiekvieną komponentą jis tikrina operacijomis, kurios neseka nuorodų, atmeta simbolines nuorodas, kietąsias nuorodas, specialius failus ir montavimo kirtimus, ir turi visa arba atkūrimo žurnalą. Todėl gedimas arba užbaigia patikrintą manifestą, arba prieš bet ką kita paleidžiant atkuria pradinę būseną.

Svečias neturi tinklo, o išeinantis srautas yra priverstinis

Kai operacijai reikia svečio, tai vienai sesijai skirta Linux mikro-VM be pagrindinio namų katalogo, be Docker socket, be SSH agento, be paveldėtos aplinkos ir be jokio pagrindinės mašinos montavimo, išskyrus darbo srities bendrinimą. Vykdomoji aplinka montuojama tik skaitymui, o rašoma darbo sritis draudžia vykdymą. Todėl viskas, kas paleidžiama, ateina iš patikrintos vykdomosios aplinkos, o ne iš to, ką parašė agentas. Svečias nuleidžia privilegijas iki neprivilegijuoto tapatumo prieš atidarydamas bet kurį lizdą, o bendrinimas, priklausantis root, nepavyksta paleidžiant, o ne palieka privilegijuotą darbą veikiantį.

Svarbiausia, kad svečias neturi tinklo sąsajos. Linux sistemoje paleidimo seka tyčia niekada jos nekonfigūruoja ir TAP įrenginys nesukuriamas. Windows sistemoje virtualus tinklo adapteris, kurį Hyper-V prideda pagal numatytuosius nustatymus, pašalinamas diegimo metu. Vienintelis svečio kelias iš mašinos yra loopback tarpinis serveris viduje, tunelizuotas per virtualų lizdą į pagrindinės mašinos tiltą. Tiltas baitus perduoda demono savam šliuzui, vietiniam savininko lizdo klausytojui be TCP klausytojo ir be bendrojo peradresavimo režimo. Būtent šiame šliuze taikoma HTTP, CONNECT, WebSocket, peradresavimo, kilmės, atsisiuntimo ir įkėlimo politika, naudojant esamą Nessie fiksuoto išsiuntimo (pinned-fetch) mechanizmą, o ne antrą tų pačių taisyklių įgyvendinimą. NAT tilto ir tiesioginio DNS sprendiklio nėra: alternatyvus DNS, neapdorotas TCP, QUIC ir apėjimas per tarpinį serverį visi uždrausti.

Kilmės sąrašą, kurį šliuzas taiko, sukonfigūruoja mašinos savininkas vietoje ir tyčia niekada jo neįkelia. Sąsaja tai neturėjimą nurodo, o ne apsimeta, kad Nessie yra kilmės politikos redaktorius. Norėdami sužinoti, ką naršyklės vykdytojas gali pasiekti, klauskite žmogaus, kuris valdo mašiną.

Prisijungimo duomenys

Jokia pagrindinės mašinos prisijungimo saugykla niekada neprijungiama prie svečio. Nei raktų saugykla, nei ~/.codex ar ~/.claude, nei bendras CLI žetonas, nei aplinkos kintamasis su API raktu. Vienintelis palaikomas prisijungimas valdomai kodavimo sesijai yra failas su autentifikacija, privatus savininkui. Jo turinį skaito tik savininko valdomas initrd kūrėjas, niekada Nessie, niekada aprašas, niekada žurnalas ar komandos argumentas. Failas vieną kartą perkeliamas į privatų namų katalogą svečio viduje, kuris sunaikinamas kartu su VM. Tas svečias gali pasiekti tiksliai vieną kilmę.

Naršyklės vykdytojas yra dar griežtesnis: kiekvienai sesijai suteikiamas naujas privatus naršyklės profilis, ir jis atmeta darbo srities paruoštą profilį. Todėl jis pradeda be slapukų, be plėtinių ir be jokios paveldėtos prisijungimo būsenos.

Neapdoroti vietiniai duomenys gali pasiekti modelio tiekėją tik aiškiame, ribotame paleidime. Nessie saugo redaguotus manifestus, argumentų ir politikos santraukas, rezultatų santraukas ir struktūrizuotą būseną. Failų turinys, terminalo išvestis, naršyklės DOM, prisijungimo duomenys ir autentifikavimo faktoriai draudžiami duomenų bazės įrašuose, audito įrašuose, žurnaluose, realaus laiko įvykiuose ir klaidų ataskaitose.

Ką operatorius suteikia ir kaip atima

Leidimas naudoti vykdytoją nėra vienas jungiklis. Agentas gali iškviesti operaciją tik tada, kai turi suteikimą tiksliai tam vykdytojui ir tiksliai tai operacijai, ir įprasta loginė įrankio politika tai leidžia, ir paleidimo sritis atitinka, ir pačios mašinos vietinė politika tai leidžia. Vieno vykdytojo operacijos suteikimas todėl nieko neleidžia kitam, o prieinamumo atnaujinimas nieko nepraplečia, nes naujos operacijos ateina uždraustos.

Agento prieiga ir bendrinimas įsigalioja iš karto pačiame puslapyje, be patvirtinimo tęsinio, slaptažodžio užklausos ar naujo tapatybės patvirtinimo žingsnio. Vykdytojo skirtuke Agentai valdytojas tiesiogiai įjungia ar išjungia agento prieigą prie mašinos. Skirtuke Bendrinimas jie tokiu pat būdu suteikia asmeniui teisę Gali naudoti arba Administratorius, arba išplečia naudojimą projektui ar visiems dabartinės komandos nariams. Tik jūsų asmeniniame asistento pokalbyje (niekada bendrame kanale, planuotoje užduotyje ar kito agento paleidime) asistentas gali vietoj to paruošti agento prieigos ar priskyrimo pakeitimą. Tai paskelbia patvirtinimo kortelę tame pokalbyje. Niekas nepasikeičia, kol nepaspausite Suteikti prieigą, o pokalbio tekstas niekada nelaikomas patvirtinimu.

Trys pakeitimai vis dar reikalauja, kad patvirtinimo metu iš naujo įvestumėte dabartinį slaptažodį: aprašo revizijos aktyvavimas; asistento paruoštas priskyrimas, kuris mašiną suteikia asmeniui, o ne agentui; ir nuolatinė politika, leidžianti kolegoms pradėti komandas jos savininko vardu, t. y. be priežiūros veikiančio užduočių darbo politika. Mašinos atjungimas ar ištrynimas tyčia nereikalauja nė vieno iš jų, nes avarinis išjungiklis niekada neturi būti sunkiau pasiekiamas nei tai, ką jis sustabdo. Peržiūrėto juodraščio pritaikymas visada reikalauja slaptažodžio. Audito įraše atskirai fiksuojamas veikiantis asmuo ir asistento dalyvavimas.

Vykdytojas pereina per mažą, aiškų būsenų rinkinį:

pending_pairing → online ↔ offline
        │             ↓
        └──────────→ draining → revoked
                         ↓
                       error

Antraštės meniu Kompiuteris yra vieta, kur valdytojas paruošia kiekvieną gyvavimo ciklo pakeitimą: pristabdyti, atnaujinti pristabdytą, atjungti ar ištrinti. Pristabdymas palieka vykdytoją prisijungusį, bet nebeleidžia jam priimti komandų. Atjungimas panaikina jo kliento sertifikatus ir visas laukiančias kandidatų rankenas bei negali būti atšauktas: atjungtas vykdytojas susiejamas iš naujo kaip naujas. Ištrynimas daro tą patį ir dar pašalina vykdytoją iš sąrašo. Skirtingai nuo atjungimo, jis siūlomas nepriklausomai nuo vykdytojo būsenos, įskaitant laukiantį susiejimą ir jau atjungtą, nes tai vienintelis būdas, kaip vykdytojas išeina iš sąrašo. Draining (baigiama) yra tikra trečioji būsena protokole: vykdytojas užbaigia jau turimą darbą prieš nustodamas priimti daugiau. Sąsaja gali rodyti kompiuterį tokioje būsenoje, bet nieko čia jos nepradeda, tik tiesioginis API kvietimas. Kiekvienas patvirtintas prieigos pakeitimas, aprašo peržiūra ir gyvavimo ciklo perėjimas, įskaitant draining, taip pat padidina demono ryšio epochą. Todėl jo kita valdymo apklausa, ne vėliau kaip po sekundės, nepavyksta ir sustabdo visus gyvus svečius, kol jie galėtų prisijungti iš naujo. Atšaukimas yra prašymas, kurio mašina negali ignoruoti.

Vykdytojo valdymas

Sveikatos tikrinimas

Nessie pati vertina gyvybingumą. Demonas pasirašo gyvybės signalą, o vykdytojas, kurio paskutinė autentifikuota veikla senesnė nei šešiasdešimt sekundžių, tvarkingai pažymimas kaip neprisijungęs, kol gali būti išvardytas, pasirinktas ar siunčiamas darbas. Vykdytojas, rodomas kaip prisijungęs, įrodė save per paskutinę minutę.

Mašinoje sveikatos galinio taško nėra, nes demonas tyčia neklauso jokio operatoriui skirto prievado. macOS ir Linux sistemose paklauskite CLI tiesiogiai:

nessie-executor status                # every paired executor, plus linger state
nessie-executor status <executorId>
systemctl --user status nessie-executor@<executorId>

macOS sistemoje statusas rodo kiekvienos komandos launchd agentą. systemctl komanda veikia tik Linux sistemoje. Windows sistemoje pranešimų srities piktograma yra greitas atsakymas, jos meniu nurodo priežastį, o paslaugos žurnale yra detalės. Abiejose platformose vykdytojo skirtukas Apžvalga Nessie rodo patvirtintus profilius, jo duomenų ribą, kada jis paskutinį kartą buvo matytas ir bet kokį laukiantį vietinės politikos pasiūlymą, kurį reikia peržiūrėti.

Žurnalai

PlatformaKur
Linuxjournalctl --user -u nessie-executor@<executorId>; demonas pats savo žurnalo failo neturi
Windows%ProgramData%\Nessie Executor\logs\service.log, kurį atidaro pranešimų srities meniu Atidaryti žurnalų aplanką

Čia patenka kiekvienas atmetimas, kurio asmuo gali imtis veiksmų: nepasirašyta ar suklastota vykdomoji aplinka, būsenos katalogas, kurio nepavyktų apsaugoti, vykdytojas, kuris nepasileido paleidžiant sistemą. Čia niekada nepatenka susiejimo iššūkis, raktas ar vaiko proceso išvestis. Nėra žurnalo lygio nustatymo, kurį reikėtų pakelti, nes nėra nieko išsamesnio, ką įjungti.

Mac CLI kiekvienos komandos paslaugos žurnalą rašo į ~/Library/Logs/NessieExecutor/<executorId>.log.

Atnaujinimas

Atnaujinkite CLI per Homebrew, APT ar DNF, tada kiekvienos komandos paslaugą paleiskite iš naujo: pirmiausia disable, po to enable. WinGet atnaujina Windows vykdytoją. Tiesioginiai Nessie Desktop diegimo paketai siūlo pasirašytus atnaujinimus programos viduje, o MSI ir Debian diegimai naudoja savo paketų tvarkyklę. Susiejimai ir vietiniai leidimai išlieka po atnaujinimų.

Sustabdymas ir pašalinimas

Sustabdymas yra tvarkingas kelias, kurį valdo pats demonas, o ne priverstinis nutraukimas. Jis gauna nutraukimo signalą, sustabdo kiekvieną svečio sesiją, atlaisvina savo nuomą ir išeina. Linux sistemoje vienetas laukia penkiolika sekundžių dešimties sekundžių išvalymo biudžetui ir tyčia niekada neeskaluoja iki priverstinio nutraukimo. Taip yra todėl, kad demonas, priverstinai nutrauktas valymo viduryje, palieka klajojantį mikro-VM ir darbo srities perdangą be jokio likusio proceso, kuris juos išvalytų. Sustabdymas, kuris užstringa, matomas systemctl --user status, o ne tyliai, o eskalavimas yra aiškus žmogaus sprendimas.

Norėdami pašalinti Linux paketą:

nessie-executor disable <executorId>   # stops and disables the service
sudo apt remove nessie-executor
loginctl disable-linger                # only if your user manager should stop running at boot too

Windows sistemoje msiexec /x sustabdo ir pašalina paslaugą, jos registro įrašus ir pranešimų srities paleisties įrašą. Abiejose platformose susietą būseną tyčia palieka: Linux sistemoje ~/.local/state/nessie-executor/, Windows sistemoje %ProgramData%\Nessie Executor. Susiejimas yra mašinos raktas ir pasirašyta politikos revizija, o programos pašalinimas nėra prašymas juos sunaikinti. Įdiegus iš naujo jie randami ten, kur buvo. Susiejimą pamiršti galite ištrindami katalogą rankiniu būdu, o vykdytoją kitoje pusėje panaikinti Nessie.

Windows pranešimų srities programa ir darbalaukio palydovas siūlo Pamiršti susiejimą šiame kompiuteryje kaip pirmos klasės veiksmą. Jis sustabdo vietinį demoną, pašalina mašinos raktą ir aplankų pasirinkimą ir po vieno natyvaus patvirtinimo visam laikui ištrina vietines juodraščių kopijas. Serverio pusės vykdytojas ir jo audito istorija lieka savininkui, kad jis juos išlaikytų arba panaikintų.

Dažniausi gedimai

SimptomasKą tai reiškia
Vykdytojas susiejamas, bet siūlo tik failų operacijasPagrindinė mašina nepranešė jokio naudojamo smėlio dėžės varianto. Linux sistemoje patikrinkite, ar galite skaityti ir rašyti /dev/kvm ir ar esate grupėje kvm. Pridėję save, atsijunkite ir vėl prisijunkite. Windows sistemoje leidime nėra Hyper-V. Tai leidimas, o ne nustatymas.
Vykdytojo valdikliai visiškai nerodomiVersija nėra patikrinamai iš tikėtino leidėjo. Linux sistemoje vykdomoji aplinka turi priklausyti root ir neturėti grupės ar pasaulio rašymo bito. Windows ir macOS sistemose parašas turi atitikti leidėją ar komandą, prisegtą prie versijos. Kiekvienas iš šių atvejų atmetamas žodžiais ir nurodo, ką daryti, o ne slepia valdiklius.
Paslauga veikia, bet nepaleidžia demono ir atmeta kiekvieną komandąKažkas diegime buvo pakeista po supakavimo. Tai numatyta elgsena: suklastotas diegimas atsako priežastį, o ne išnyksta, nes sustabdyta paslauga priverstų dėklą nurodyti neteisingą taisymą.
Paleidimas baigiasi nežinomu rezultatuPrarastas galutinis patvirtinimas. Nessie nepraneša rezultato, kurio negavo: komanda pažymima kaip nežinoma, paleidimas eina atkūrimo keliu, o šalutinis poveikis nekartojamas. Vėlesnis demono patvirtinimas vis dar gali tai išspręsti.
Operacija, kuri vakar veikė, šiandien atmetamaVartas pasikeitė tarp priskyrimo ir siuntimo, o patikrinimai kartojami kiekviename žingsnyje: atšauktas suteikimas, aprašo revizija, laukianti peržiūros, susiaurinta vietinė politika, sritis, kuri nebeatitinka paleidimo, ar atšaukimas. Atmetimas nurodo, kuris iš jų.
Agentas prašo naršyklės ir gauna atsakymą, kad negaliNaršyklės ir kodavimo darbą paleidžia žmogus iš kanalo kaip visą paketą naujame paleidime. Įprastas priskyrimo kelias jas tyčia atmeta, o jokios naršyklės operacijos negalima pridėti prie paleidimo, kuris jau kažką daro.