Ekzekutuesit në distancë
Jepni një agjenti një kompjuter të vërtetë për të punuar — në Linux, macOS ose Windows.
Çfarë është një ekzekutues në distancë
Një agjent në Nessie nuk ka kompjuter. Ai mund të lexojë atë që është në Nessie, të flasë me njerëzit dhe të thërrasë mjete të lidhura përmes rrjetit — por nuk mund të hapë një skedar në një laptop, të ekzekutojë një komandë ose të shikojë një faqe që ekziston vetëm pas hyrjes së dikujt. Një ekzekutues në distancë është mënyra si i jepni një makinë për të punuar.
Një ekzekutues është një daemon i vogël që instaloni në një kompjuter që kontrolloni ju. Ai çiftohet me instancën tuaj të Nessie-t duke nisur vetë lidhjen, dëshmon cila makinë është me një çelës që nuk del kurrë nga hosti, dhe pastaj ofron një grup të fiksuar e të emërtuar operacionesh — asgjë tjetër. Puna arrin si komanda të nënshkruara një nga një; rezultatet kthehen si konfirmime të kufizuara dhe të strukturuara. Makina nuk pranon kurrë një lidhje hyrëse nga Nessie.
Ia vlen të jeni të saktë për atë që një ekzekutues nuk është, sepse shumica e mjeteve të aksesit në distancë janë një nga këto gjëra, dhe një ekzekutues me qëllim nuk është asnjëra prej tyre. Nuk ka SSH, nuk ka shell të përgjithshëm në distancë, nuk ka lidhje me një multiplekser terminali që keni hapur tashmë, nuk ka hyrje standarde në cloud dhe nuk ka proxy të përgjithshëm të rrjetit lokal. Nuk është një server MCP, dhe nuk është një container ose një mjedis ekzekutimi në cloud — Nessie i ka këto tashmë, dhe janë diçka tjetër. Një ekzekutues është një pikë fundore me aftësi, me një listë të mbyllur operacionesh, dhe kjo listë është e gjithë sipërfaqja e tij.
Kujt i përket një ekzekutues
Çdo ekzekutues krijohet me saktësisht një fushëveprim, dhe ai fushëveprim nuk mund të ndryshohet më pas. Ai përcakton kush mund ta thërrasë ekzekutuesin dhe kush mund ta administrojë atë.
| Fushëveprimi | Kush mund ta thërrasë | Kush menaxhon aksesin |
|---|---|---|
| Privat | Personi që kërkon dhe agjenti i thirrur saktë duhet të jenë të dy të emërtuar si marrës të detyrës. Asnjëri nga të dy vetëm nuk mjafton. | Një administrator njerëzor i caktuar. Agjentët mund të përdorin vetëm një ekzekutues privat, kurrë ta administrojnë. |
| Projekt | Një person i autorizuar për atë projekt të saktë, dhe vetëm nga një ekzekutim brenda atij projekti. | Një menaxher i organizatës, ose një pronar ose administrator i projektit. |
| Organizatë | Një person me të drejtë organizative. | Një menaxher i organizatës. |
Një ekzekutues privat duhet të ketë gjithmonë të paktën një administrator njerëzor aktiv. Heqja e të fundit dështon drejtpërdrejt; nëse një transaksion largimi do të linte asnjë, ekzekutuesi ndalon pranimin e punës së re, përfundon punën që ka dhe shfuqizohet vetë. Një pronar i organizatës ka një rrugë të jashtëzakonshme vetëm për shfuqizim, që mbyll një ekzekutues që nuk e menaxhon ndryshe, pa i treguar listën e tij private, sesionet ose përmbajtjen. Aksesi privat nuk transferohet kurrë në heshtje te dikush tjetër.
Çfarë mund të bëjë në të vërtetë një agjent me të
Fjalori i operacioneve është i fiksuar në kod, jo i konfiguruar për çdo instalim. Ai ndahet në dy: disa operacione daemon-i i shërben nga direktoriumi i vet i përkohshëm pa asnjë makinë virtuale fare, dhe të tjerat kërkojnë një VM mysafire për çdo sesion në host. Kjo ndarje përcakton çfarë duhet të instaloni.
| Operacioni | Çfarë bën | VM mysafire |
|---|---|---|
file.list, file.read | Liston dhe lexon skedarë vetëm brenda rrënjës së hapësirës së punës të zgjedhur gjatë çiftimit. | Jo |
file.write | Shkruan në një draft copy-on-write të asaj hapësire pune. Nuk e hap kurrë rrënjën reale për shkrim. | Jo |
workspace.review | Raporton ç’ka ndryshuar drafti — deri në 100 shtigje relative me llojin dhe madhësinë në bajt, plus një digest të manifestit. Nuk përmban përmbajtjen e skedarëve. | Jo |
sandbox.stop | Ndërpret sesionin që e zotëron ekzekutimi. | Jo |
command.run | Ekzekuton një komandë të vetme si vektor argumentesh pa shell, në një VM mysafire pa dalje rrjeti. Nuk ka asnjë varg shell kudo në këtë rrugë. | Po |
browser.open, browser.observe, browser.act | Drejton një shfletues brenda VM-së mysafire kundrejt një liste origjinash të konfiguruar në makinë. Vëzhgimi kthen një pemë aksesueshmërie të kufizuar dhe një imazh opsional të zvogëluar; veprimet janë navigim, klikim, shkrim, shtypje tastesh dhe lëvizje, kundrejt një nyjeje që agjenti e ka vëzhguar sapo — kurrë një selektor, koordinatë ose skript. | Po |
coding.launch, coding.observe | Nis një sesion të menaxhuar Codex brenda VM-së mysafire dhe lexon gjendjen e tipizuar të ciklit jetësor. Nuk ka lidhje terminali dhe nuk ka kanal kërkesash: agjenti mëson nëse sesioni po punon, jo çfarë ka në ekranin e tij. | Po |
workspace.promote | Zbaton një draft të rishikuar në hapësirën reale të punës. Ky është i vetmi operacion që shkruan në host, dhe qëllimisht nuk u ofrohet modeleve fare. | Jo |
Operacionet që nuk kanë nevojë për mysafir janë paketa e hapësirës së punës. Një host që nuk mund të nisë një mysafir nuk është një ekzekutues i prishur: ai çiftohet normalisht, raporton backend-in e sandbox-it si none dhe shpall vetëm paketën e hapësirës së punës, asgjë tjetër. Kjo është gjendja në të cilën përfundon një edicion Windows pa Hyper-V, ose një makinë Linux ku përdoruesi nuk mund të përdorë /dev/kvm, dhe ndërfaqja e emëron atë në vend që të dështojë në mënyrë të paqartë.
Puna me shfletues nuk fillohet kurrë nga një agjent me iniciativën e vet. Rruga e zakonshme e lidhjes me një operacion të vetëm refuzon browser.open dhe browser.observe pa përjashtim; një ekzekutim shfletuesi niset nga një person nga një kanal, si një paketë prej katër operacionesh në një ekzekutim të ri, dhe asnjë lidhje tjetër nuk mund t’i shtohet më pas. Sesionet e menaxhuara të kodimit funksionojnë në të njëjtën mënyrë.
Ekzistojnë edhe dy grupe të tjera operacionesh në kod, dhe ato qëllimisht nuk janë në dispozicion. Operacionet për drejtimin e një skede Chrome në të cilën keni hyrë tashmë kanë një implementim lokal të plotë dhe një shtesë native-messaging, por kontrolli nuk i reklamon derisa serveri të mund të vërtetojë se biseda që i dha origjinë ishte private dhe të regjistrojë kush çfarë ka zbuluar — themeli është qëllimisht joaktiv, dhe shtesa nuk dërgohet në asnjë nga instaluesit. Dhe disa operacione kodimi — attach, prompt, interrupt dhe close — emërtohen në skemë, por nuk kanë implementim, kështu që nuk mund të jepen.
Si funksionon
Lidhja gjithmonë del jashtë makinës
Daemon-i bën lidhje dalëse HTTPS dhe WSS me API-n tuaj të Nessie-t dhe asgjë tjetër. Nessie nuk thërret kurrë një laptop, nuk mban kurrë një adresë për të, dhe nuk e trajton kurrë ndonjë endpoint katalogu si transport makine. Kjo është arsyeja që një ekzekutues punon nga një rrjet shtëpie, pas NAT, në një VPN korporate, pa port forward dhe pa rregull firewall hyrës — dhe kjo është arsyeja që ndalimi i daemon-it është një shkëputje e plotë dhe e menjëhershme.
Origjina e API-t duhet të jetë HTTPS. Përjashtimi i vetëm është një adresë loopback për personat që e përdorin Nessie në makinën e tyre, nëpërmjet një ndryshoreje mjedisi të veçantë; asnjë flamur i zakonshëm nuk e kthen një origjinë prodhimi në HTTP të thjeshtë.
Çiftimi vërteton një makinë, dhe një person e konfirmon atë
Çiftimi është një dëshmi me dy anë. Një person i autorizuar krijon ekzekutuesin në Nessie me fushëveprimin e tij, dhe Nessie lëshon një regjistrim: një sfidë e rastësishme 256-bit, prej të cilës ruan vetëm një verifikues SHA-256, e vlefshme për dhjetë minuta dhe e përdorshme vetëm një herë.
Në makinë, daemon-i gjeneron një çift çelësash Ed25519, e ruan në një depozitë të mbrojtur nga sistemi operativ, e lexueshme vetëm nga pronari, dhe e shkruan kërkesën e saktë të nënshkruar në disk para se të bëjë ndonjë thirrje rrjeti — kështu që një përgjigje e humbur mund të riprovohet me të njëjtin çelës të përgatitur, dhe jo të çiftohet dy herë pa dashje. Pastaj dorëzon ID-në e regjistrimit, sfidën, çelësin e saj publik dhe një nënshkrim dëshmie. Nessie ruan çelësin publik dhe gjurmën e tij. Kurrë nuk e ruan çelësin privat.
Nessie pastaj i tregon atë gjurmë një personi, i cili e konfirmon. Derisa të ketë atë konfirmim dhe një dëshmi të mëvonshme të posedimit të çelësit, ekzekutuesi mbetet jashtë linje. Çiftimi nuk mund të përfundojë kurrë nga teksti i një bisede ose nga një transkript terminali: kërkon një veprim të qëllimshëm njerëzor në ndërfaqen web ose desktop.
Një makinë që humb çelësin e saj nuk mund ta rimarrë regjistrimin e ekzekutuesit të vet. Ai shfuqizohet dhe regjistrohet sërish si një ekzekutues i ri. Rotacioni i çelësit, përkundrazi, është një transaksion i vetëm, i nënshkruar si nga çelësi i vjetër ashtu edhe nga ai i ri.
Përshkruesi është pretendimi i nënshkruar i makinës për vetveten
Një daemon i çiftuar publikon një përshkrues: një deklaratë e nënshkruar, e rishikuar në mënyrë monotone, vetëm për fakte strukturore — cilat skema operacionesh mbështet, kufijtë e saj të burimeve dhe rrjetit, platforma e saj dhe një digest i politikës së saj lokale. Ai nuk mban shtigje hosti dhe nuk krijon autoritet në cloud.
Një revizion i ri nuk aktivizohet kurrë me mbërritjen. Ruhet në pritje të rishikimit, dhe një person i autorizuar duhet ta shohë dhe ta konfirmojë para se të ndikojë në atë që është e disponueshme. Kjo është ajo që ndalon një rifreskim të aftësive që t’i japë në heshtje fuqi të reja: një operacion i sapo shpallur fillon i refuzuar.
Jini të qartë për atë që vërteton nënshkrimi. Një përshkrues i nënshkruar nga një çelës ekzekutues i çiftuar vërteton se ai çelës e bëri pretendimin. Nuk vërteton se hosti nuk është i komprometuar, dhe ndërfaqja është e detyruar ta thotë këtë.
Dërgimi: kandidati, lidhja, komanda, konfirmimi
Një agjent kurrë nuk emëron një ekzekutues. Para se një ekzekutim ta përdorë, Nessie e zgjidh operacionin logjik në një kandidat disponueshmërie opak dhe jetëshkurtër. Përgjigja nuk përmban ID të ekzekutuesit; baza e të dhënave ruan vetëm një digest të dorezës, bashkë me kë dhe për çfarë u zgjidh. Modelet dhe klientët marrin një dorezë, jo një makinë të zgjedhshme.
Disponueshmëria është një zgjidhës i vetëm, i përdorur në të njëjtën mënyrë nga API-ja, worker-i, ndërfaqja dhe asistenti:
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 operationKonsumimi i kandidatit krijon një lidhje nën një bllokim të bazës së të dhënave që i kontrollon sërish të gjitha ato porta një herë të dytë dhe ngre një fence monotone. Dërgimi i kontrollon përsëri. Pasojë: një leje e tërhequr, një politikë e ngushtuar ose një ekzekutues i shfuqizuar midis dy hapave e ndalon punën, në vend që të vihet re më pas — dhe një riprovim kurrë nuk mund të bjerë në një makinë tjetër nga ajo me të cilën ekzekutimi u lidh.
Vetë komanda udhëton mbi radhën e zakonshme të punës së Nessie-t dhe mbi cikllin jetësor të thirrjes së mjetit, e jo mbi një radhë të dytë të vetën. Daemon-i kërkon punë mbi kanalin e tij të autentikuar të kontrollit; nuk shtyhet kurrë. Një komandë kalon nëpër katër konfirmime dhe asnjë tjetër:
leased → accepted → started → result-acknowledgedÇdo kornizë lidh ID-në e komandës, provenienën e ekzekutimit, fence-in e lidhjes, revizionin e aftësisë, një skadencë, një çelës idempotence dhe digest-et e argumenteve dhe të ngarkesës. Daemon-i refuzon një mospërputhje, një politikë të vjetruar, një riprodhim ose një rezultat të dytë për një komandë që ka përfunduar tashmë. Argumentet dhe rezultatet përfundimtare enkriptohen me AES-256-GCM në pushim; baza e të dhënave mban shifra të kufizuara dhe digest-e kanonike, jo përmbajtje.
Nëse një njohje humbet, Nessie nuk supozon sukses. Komanda regjistrohet si rezultat i panjohur dhe ekzekutimi ndjek rrugën normale të rikuperimit; daemon-i, që regjistron lokalisht çdo komandë të dorëzuar përpara se të fillojë punën, nuk do ta përsërisë efektin anësor. Një konfirmim i vonuar mund ta zgjidhë ende paqartësinë, me ndershmëri.
Kufiri i besimit
| Subjekti | Mund | Nuk mund |
|---|---|---|
| Personi | Të çiftojë një ekzekutues, ta menaxhojë kur është i autorizuar, dhe të konfirmojë aksesin dhe ndryshimet e politikës. | Të zgjerojë një politikë që vetë makina e refuzon, ose të veprojë pa autorizim aktual. |
| Agjenti, përfshirë asistentin personal | Të thërrasë një operacion që i është tashmë në dispozicion; të përgatitë një ndryshim të propozuar aksesi për personin që e kërkoi. | Të administrojë aksesin, të miratojë vetveten, të zgjedhë një makinë, të ndryshojë politikën lokale ose të zbatojë një ndryshim që vetë e ka përgatitur. |
| Plani i kontrollit të Nessie-t | Të zgjidhë disponueshmërinë, të lidhë një ekzekutim, të lëshojë komandat, dhe të mbajë fakte auditi të redaktuara. | Të lidhet me makinën, të zgjerojë politikën lokale, të arrijë kredencialet e hostit, ose ta trajtojë tekstin e terminalit si autorizim ose rezultat. |
| Daemon-i i ekzekutuesit | Zbaton politikën lokale, çiftohet jashtë, ekzekuton mysafirin dhe gateway-in, dhe njeh komandat. | Të zgjerojë fushëveprimin e vet, të pranojë punë të vjetruar ose të riprodhuar, të ekspozojë hapësirën e punës ose kredencialet e hostit drejtpërdrejt, ose të dërgojë të dhëna të papërpunuara lokale në gjurmën e auditimit. |
| VM mysafire dhe mjetet brenda saj | Punon në një sandbox copy-on-write, duke arritur rrjetin vetëm nëpërmjet gateway-it. | Të arrijë skedarët e hostit, kredencialet e hostit, rrjetin ose DNS-in direkt, ose të promovojë një ndryshim të hostit. |
Instalimi dhe çiftimi i një ekzekutuesi
Instaloni CLI-n për Mac me Homebrew, aplikacionet për Mac me Homebrew casks, CLI-n për Linux përmes APT ose DNF, ose ekzekutuesin për Windows përmes WinGet. Çdo ekip i çiftuar ka leje të veçanta të ruajtura në kompjuter. Nessie kontrollon aksesin brenda ekipit; nuk mund të ndryshojë burimet lokale.
Udhëzuesi i instalimit dhe çiftimit ka komandat e sakta, procedurën me dy anë të kodit tetëshifror, cilësimet lokale, nisjen, përditësimet dhe heqjen.
Sa larg është provuar çdo platformë në të vërtetë
Gjendja e tre sandbox-eve mysafire ndryshon, dhe ndryshimi është i rëndësishëm. macOS është backend-i me një rrugë mysafire të punueshme dhe të provuar. Backend-et Firecracker në Linux dhe Hyper-V në Windows janë të implementuara dhe mbulohen nga teste në anën e hostit — sekuenca e nisjes, imazhet e diskut, transportet e kontrollit dhe të daljes, protokolli i draft-it — por asnjë mysafir nuk është nisur ende në harduer real në integrimin e vazhdueshëm të këtij projekti, sepse kjo kërkon një makinë me KVM ose Hyper-V, dhe punët që do ta provonin këtë nuk e kanë pasur kurrë një. Paketa e hapësirës së punës, që nuk ka nevojë për mysafir, është e provuar nga fillimi në fund në Windows kundër një cikli kontrolli real. Konsideroni operacionet me mysafir në Linux dhe Windows si të pa provuara derisa t’i provoni në harduerin tuaj. Ekrani i çiftimit në Nessie thotë të njëjtën gjë me fjalët e veta.
Siguria dhe izolimi
Një rrënjë e vetme hapësire pune, dhe shtegu i saj mbetet në makinë
Çiftimi zgjedh saktësisht një rrënjë kanonike hapësire pune: një direktori, jo një grup dosjesh, dhe kurrë prindin e tyre më të afërt të përbashkët. Nessie-t i jepet emri bazë i rrënjës, që një person ta njohë kufirin në ndërfaqe; shtegu i plotë mbetet në gjendjen e makinës, e lexueshme vetëm nga pronari, dhe nuk ngarkohet kurrë. Ndryshimi i rrënjës është i mundur, por vetëm pasi çdo draft dhe sandbox lokal të jetë hequr, dhe prodhon një revizion të ri përshkruesi që kalon nëpër të njëjtin rishikim njerëzor si çdo ndryshim tjetër politike. Ajo nuk mund të zgjerohet kurrë në heshtje në një direktori prind.
Operacionet mbi skedarë pranojnë vetëm shtigje relative. Ato refuzojnë kalimin nëpër shtigje dhe çdo komponent lidhje simbolike, rikontrollojnë që rrënja e konfiguruar është ende një direktori e zakonshme, dhe kthejnë rezultate të kufizuara e të strukturuara që nuk përmbajnë shteg hosti.
Shkrimet shkojnë në një kopje, dhe vetëm një person i promovon ato
Një agjent nuk shkruan kurrë në skedarët tuaj. file.write krijon një pemë të kufizuar copy-on-write nën direktorinë e gjendjes së daemon-it, të lidhur me ekzekutimin, dhe leximet dhe listimet e mëvonshme për atë ekzekutim e shohin draftin. Puna mysafire, përfshirë sesionet e kodimit, përdor të njëjtin scratch copy-on-write.
Aplikimi i një drafti në hapësirën reale të punës është një operacion i vetëm — workspace.promote — dhe është i vetmi shkrim në host në të gjithë sistemin. Nuk ka asnjë skemë të ekspozuar ndaj modelit: asnjë agjent, asnjë asistent dhe asnjë shteg i dhënë nga thirrësi nuk mund ta kthejë një draft në shkrim në host. Në vend të kësaj, një person hap Draftet tuaja të rishikuara, klikon mbi Rishikoni promovimin dhe konfirmon me fjalëkalimin e tij aktual. Serveri pastaj rikontrollon digest-in e rishikimit të njohur, digest-in e manifestit, ekzekutimin burimor, përdoruesin dhe agjentin, revizionin e autorizimit, lejen e operacionit dhe politikën lokale aktive, përpara se të krijojë komandën. Në makinë, daemon-i e rindërton vetë manifestin dhe refuzon një digest që ka ndryshuar — kështu që një redaktim i bërë pas rishikimit nuk mund të hyjë me miratimin e rishikimit.
Vetë aplikimi është i bazuar në përshkrues dhe i regjistruar. Ndihmësi native merr rrënjën e hapësirës së punës dhe draftin si përshkrues direktorish tashmë të hapur, kurrë si shtigje; e validon çdo komponent me operacione pa ndjekje lidhjesh, refuzon lidhjet simbolike, lidhjet e forta, skedarët speciale dhe kalimet e montimeve, dhe mban një regjistër të plotë-ose-rikuperim, kështu që një rrëzim ose përfundon manifestin e validuar ose rikthen origjinalin para çdo gjëje tjetër.
Mysafiri nuk ka rrjet, dhe dalja detyrohet
Kur një operacion ka nevojë për mysafir, ai është një mikro-VM Linux për çdo sesion, pa shtëpi hosti, pa socket Docker, pa agjent SSH, pa mjedis të trashëguar dhe pa asnjë montim hosti tjetër përveç ndarjes së hapësirës së punës. Montimi i ekzekutueshëm i kohës është vetëm për lexim; montimi i shkrueshëm i hapësirës së punës ndalon ekzekutimin, kështu që çdo gjë që ekzekutohet vjen nga ngarkesa e verifikuar e kohës së ekzekutimit dhe jo nga diçka që një agjent e shkroi. Mysafiri zbret në një identitet pa privilegje para se të hapë ndonjë socket, dhe një ndarje e zotëruar nga root dështon nisjen, në vend që të lërë një punë të privilegjuar që vazhdon.
Më e rëndësishmja: mysafiri nuk ka ndërfaqe rrjeti. Në Linux sekuenca e nisjes qëllimisht nuk konfiguron asnjë dhe nuk krijohet asnjë pajisje TAP; në Windows karta virtuale e rrjetit që Hyper-V shton si parazgjedhje hiqet gjatë instalimit. Rruga e vetme e mysafirit jashtë makinës është një proxy loopback brenda tij, i tunelizuar mbi një socket virtual drejt një ure në host, që ia dorëzon bajtët gateway-it të daemon-it — një dëgjues socket lokal, i zotëruar vetëm nga pronari, pa dëgjues TCP dhe pa modalitet të përgjithshëm përcjelljeje. Ky gateway është vendi ku zbatohet politika për HTTP, CONNECT, WebSocket, ridrejtimin, origjinën, shkarkimin dhe ngarkimin, duke përdorur mekanizmin ekzistues pinned-fetch të Nessie-t dhe jo një implementim të dytë të të njëjtave rregulla. Nuk ka urë NAT dhe nuk ka zgjidhës DNS direkt: DNS alternativ, TCP i papërpunuar, QUIC dhe anashkalimi i proxy-t janë të gjitha të refuzuara.
Lista e origjinave që zbaton ai gateway konfigurohet në makinë, nga pronari i saj, dhe qëllimisht nuk ngarkohet kurrë. Ndërfaqja e emëron këtë mungesë, në vend që të pretendojë se Nessie është një redaktor i politikës së origjinave: për të ditur çfarë mund të arrijë një ekzekutues shfletuesi, pyesni personin që zotëron makinën.
Kredencialet
Asnjë depozitë kredencialesh e hostit nuk montohet kurrë në një mysafir. As keychain, as ~/.codex, as ~/.claude, as një token global i CLI-së, as një ndryshore mjedisi që mban një çelës API. I vetmi login i mbështetur për një sesion të menaxhuar kodimi është një skedar autentikimi privat i pronarit, përmbajtja e të cilit lexohet vetëm nga ndërtuesi i initrd-së i kontrolluar nga pronari — kurrë nga Nessie, nga përshkruesi, nga një regjistër ose nga një argument komande — dhe zhvendoset një herë në një shtëpi private brenda mysafirit, e cila shkatërrohet bashkë me VM-në. Ai mysafir mund të arrijë saktësisht një origjinë.
Ekzekutuesi i shfletuesit është edhe më i rreptë: çdo sesion merr një profil privat të ri shfletuesi dhe refuzon një profil të përgatitur nga hapësira e punës, kështu që fillon pa cookies, pa zgjerime dhe pa asnjë gjendje hyrjeje të trashëguar.
Të dhënat e papërpunuara lokale mund të arrijnë një ofrues modeli vetëm brenda një ekzekutimi të qartë dhe të kufizuar. Ajo që Nessie ruan janë manifeste të redaktuara, digest-e argumentesh dhe politikash, digest-e rezultatesh dhe status të strukturuar. Përmbajtja e skedarëve, dalja e terminalit, DOM-i i shfletuesit, kredencialet dhe faktorët e autentikimit ndalohen nga regjistrat e bazës së të dhënave, zërat e auditimit, log-et, ngjarjet në kohë reale dhe raportet e gabimeve.
Çfarë jep një operator, dhe si e tërheq përsëri
Leja për të përdorur një ekzekutues nuk është një çelës i vetëm. Një agjent mund të thërrasë një operacion vetëm kur mban një lejë për atë ekzekutues të saktë dhe atë operacion të saktë, dhe politika e zakonshme logjike e mjetit e lejon, dhe fushëveprimi i ekzekutimit përputhet, dhe politika lokale e makinës e lejon. Dhënia e një operacioni një ekzekutuesi, pra, nuk autorizon asgjë në një tjetër, dhe një rifreskim aftësish nuk mund të zgjerojë asgjë, sepse operacionet e reja mbërrijnë të refuzuara.
Aksesi i agjentëve dhe ndarja hyjnë në fuqi menjëherë në vetë faqen, pa vazhdim miratimi, pa kërkesë fjalëkalimi ose hap të ri autentikimi. Në skedën Agjentët të ekzekutuesit, një menaxher e ndez ose e fik drejtpërdrejt aksesin e një agjenti te makina; te Ndarja ata i japin një personi të drejtën «Mund ta përdorë» ose «Administrator», ose e zgjerojnë përdorimin te një projekt ose te të gjithë në ekipin aktual, në të njëjtën mënyrë. Në bisedën tuaj personale me asistentin — vetëm atje, kurrë në një kanal të përbashkët, një punë të planifikuar ose një ekzekutim tjetër agjenti — asistenti mund të përgatitë në vend të kësaj një ndryshim të aksesit të agjentit ose të caktimit, që shfaq një kartë konfirmimi në atë bisedë; asgjë nuk ndryshon derisa ta shtypni Lejo aksesin mbi të, dhe teksti i bisedës nuk është kurrë konfirmim.
Tre ndryshime kërkojnë ende që ju të rishkruani fjalëkalimin tuaj aktual në çastin e konfirmimit: aktivizimi i një revizioni përshkruesi; një caktim i përgatitur nga asistenti që i jep një personi, jo një agjenti, makinën; dhe një politikë e përhershme që lejon kolegët të nisin komanda mbi të si pronar, politika e punës me detyra pa mbikëqyrje. Shkëputja ose fshirja e një makine qëllimisht nuk kërkon asnjërin, sepse një çelës ndalimi nuk duhet të jetë kurrë më i vështirë për t’u arritur sesa ajo që ndalon. Promovimi i një drafti të rishikuar kërkon gjithmonë. Gjurma e auditimit regjistron personin që vepron dhe pjesëmarrjen e asistentit veçmas.
Një ekzekutues kalon nëpër një grup të vogël, të qartë gjendjesh:
pending_pairing → online ↔ offline
│ ↓
└──────────→ draining → revoked
↓
errorMenyja Kompjuter në kokën e faqes është ku një menaxher përgatit çdo ndryshim të ciklit jetësor: ta pauzojë, ta rifillojë kur është në pauzë, ta shkëpusë ose ta fshijë. Pauza e lë ekzekutuesin në linjë, por ndalon pranimin e komandave. Shkëputja shfuqizon certifikatat e tij të klientit dhe çdo dorezë kandidate të pambaruar, dhe nuk mund të zhbëhet — një ekzekutues i shkëputur çiftohet sërish si një i ri. Fshirja bën të njëjtën gjë dhe e heq edhe ekzekutuesin nga lista; ndryshe nga shkëputja, ofrohet pavarësisht gjendjes së ekzekutuesit, duke përfshirë çiftimin në pritje dhe atë tashmë të shkëputur, sepse është e vetmja mënyrë për ta lënë listën. Zbrazja — përfundimi i punës që ka tashmë përpara se të ndalojë marrjen e më shumë — është një gjendje e vërtetë e tretë në protokoll, dhe ndërfaqja mund ta shfaqë një kompjuter në të, por asgjë këtu nuk e nis atë: vetëm një thirrje direkte në API e bën këtë. Çdo ndryshim i konfirmuar aksesi, rishikim përshkruesi dhe tranzicion i ciklit jetësor, përfshirë zbrazjen, rrit gjithashtu epokën e lidhjes së daemon-it, kështu që sondimi i tij i ardhshëm i kontrollit — jo më shumë se një sekondë më vonë — dështon i mbyllur dhe ndalon çdo mysafir të gjallë përpara se të mund të rilidhet. Revokimi nuk është një kërkesë që makina mund ta shpërfillë.
Përdorimi i një ekzekutuesi
Kontrollimi i shëndetit
Përgjigja e vetë Nessie-t është gjallëria. Një daemon nënshkruan një sinjal gjallërie (heartbeat), dhe një ekzekutues, aktiviteti i autentikuar i të cilit i fundit është më i vjetër se gjashtëdhjetë sekonda, shënohet në mënyrë të qëndrueshme jashtë linje përpara se të mund të listohet, të zgjidhet ose t’i dërgohet punë. Një ekzekutues që shfaqet si në linjë ka vërtetuar veten brenda minutës së fundit.
Në makinë nuk ka endpoint shëndeti — daemon-i nuk dëgjon në asnjë port të ekspozuar për operatorin, qëllimisht. Në macOS dhe Linux, pyesni CLI-n drejtpërdrejt:
nessie-executor status # every paired executor, plus linger state
nessie-executor status <executorId>
systemctl --user status nessie-executor@<executorId>Në macOS, statusi raporton agjentin launchd të çdo ekipi. Komanda systemctl është vetëm për Linux. Në Windows, ikona në tabaka është përgjigja e shpejtë; menyja e saj emëron arsyen, dhe log-u i shërbimit mban detajet. Në secilën platformë, skeda Përmbledhja e ekzekutuesit në Nessie tregon profilet e tij të miratuara, kufirin e të dhënave, kur u pa së fundmi dhe çdo propozim lokal politike që pret rishikim.
Regjistrat
| Platforma | Vendndodhja |
|---|---|
| Linux | journalctl --user -u nessie-executor@<executorId>; daemon-i nuk mban asnjë skedar log të vetin |
| Windows | %ProgramData%\Nessie Executor\logs\service.log, të cilin e hap Hap dosjen e regjistrave nga tabaka |
Çdo refuzim që një person mund ta trajtojë shkon atje: një runtime i pa nënshkruar ose i prekur, një direktori e gjendjes që nuk do të sigurohej, një ekzekutues që nuk u nis në fillim. Ajo që nuk shkon kurrë atje është një sfidë çiftimi, një çelës ose dalja e një procesi fëmijë. Nuk ka cilësim niveli log-u për t’u ngritur, sepse nuk ka asgjë më të detajuar për të ndezur.
CLI-ja për Mac e shkruan log-un e shërbimit të çdo ekipi te ~/Library/Logs/NessieExecutor/<executorId>.log.
Përditësimi
Përditësoni CLI-n përmes Homebrew, APT ose DNF, pastaj rinisni shërbimin e çdo ekipi me disable e më pas enable. WinGet përditëson ekzekutuesin e Windows. Instaluesit direkt të Nessie Desktop ofrojnë përditësime të nënshkruara brenda aplikacionit; instalimet MSI dhe Debian përdorin menaxherin e paketave. Çiftimet dhe lejet lokale i mbijetojnë përditësimeve.
Ndalimi dhe heqja
Ndalimi është një rrugë e butë që daemon-i e zotëron, jo një kill. Ai merr një sinjal ndërprerjeje, ndalon çdo sesion mysafir, e liron lease-in e vet dhe del. Në Linux njësia pret pesëmbëdhjetë sekonda për një buxhet përfundimi prej dhjetë sekondash, dhe qëllimisht nuk ngre kurrë në një kill që nuk kapet — sepse një daemon i vrarë në mes të përfundimit lë një mikro-VM dhe një mbivendosje të hapësirës së punës pa asnjë proces që t’i pastrojë. Një ndalim që zgjat është prandaj i dukshëm në systemctl --user status dhe jo i heshtur, dhe ngritja në kill është një vendim i qartë njerëzor.
Për të hequr paketën për Linux:
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 tooNë Windows, msiexec /x ndalon dhe heq shërbimin, hyrjet e tij në regjistër dhe hyrjen e nisjes të tabakës. Në të dyja platformat, gjendja e çiftuar qëllimisht mbetet — ~/.local/state/nessie-executor/ në Linux dhe %ProgramData%\Nessie Executor në Windows. Një çiftim është një çelës makine dhe një revizion i nënshkruar politike, dhe çinstalimi i një programi nuk është kërkesë për t’i shkatërruar ato; rinstalimi i gjen aty ku ishin. Fshini dosjen me dorë për të harruar një çiftim, dhe shfuqizojeni ekzekutuesin në Nessie për ta përfunduar nga ana tjetër.
Tabaka e Windows dhe companion-i i desktopit ofrojnë Harroni çiftimin në këtë kompjuter si veprim të parë klasë: ndalon daemon-in lokal, heq çelësin e makinës dhe zgjedhjen e dosjes, dhe fshin përgjithmonë kopjet lokale të draft-eve pas një konfirmimi native — ndërsa e lë ekzekutuesin në server dhe historinë e tij të auditimit që një pronar ta mbajë ose ta shfuqizojë.
Dështimet e zakonshme
| Simptoma | Çfarë do të thotë |
|---|---|
| Ekzekutuesi çiftohet, por ofron vetëm operacione skedarësh | Hosti nuk raportoi një backend sandbox të përdorshëm. Në Linux, kontrolloni nëse mund ta lexoni dhe shkruani /dev/kvm dhe nëse jeni në grupin kvm — dilni dhe hyni sërish pasi të shtoheni. Në Windows, edicioni nuk ka Hyper-V; është një edicion, jo një cilësim. |
| Kontrollet e ekzekutuesit mungojnë plotësisht | Ndërtimi nuk është i verifikueshëm nga botuesi i pritur. Në Linux runtime-i duhet të jetë i zotëruar nga root, pa bit shkrimi për grupin ose për të tjerët; në Windows dhe macOS nënshkrimi duhet të përputhet me botuesin ose ekipin e fiksuar në ndërtim. Secili prej këtyre refuzon me fjalë dhe emëron zgjidhjen, në vend që t’i fshehë kontrollet. |
| Shërbimi punon, por nuk nis asnjë daemon dhe refuzon çdo komandë | Diçka në instalim u zëvendësua pas paketimit. Kjo është sjellja e synuar: një instalim i prishur përgjigjet me arsyen në vend që të zhdukej, sepse një shërbim i ndalur do ta bënte tabakën të emërtonte zgjidhjen e gabuar. |
| Një ekzekutim përfundon me rezultat të panjohur | Një njohje përfundimtare u humb. Nessie nuk do të raportojë një rezultat që nuk e ka marrë: komanda shënohet si e panjohur, ekzekutimi merr rrugën e rikuperimit dhe efekti anësor nuk përsëritet. Një konfirmim i vonuar nga daemon-i mund ta zgjidhë ende. |
| Një operacion që funksiononte dje refuzohet sot | Një portë ndryshoi midis lidhjes dhe dërgimit, dhe kontrollet përsëriten në çdo hap: një leje e tërhequr, një revizion përshkruesi në pritje rishikimi, një politikë lokale e ngushtuar, një fushëveprim që nuk përputhet më me ekzekutimin, ose një shfuqizim. Refuzimi emëron cilin prej tyre. |
| Një agjent kërkon një shfletues dhe i thuhet se nuk mund ta marrë | Puna me shfletues dhe kodim nisen nga një person nga një kanal si një paketë e plotë në një ekzekutim të ri. Rruga e zakonshme e lidhjes i refuzon me qëllim, dhe asnjë operacion shfletuesi nuk mund t’i shtohet një ekzekutimi që tashmë bën diçka tjetër. |