Užduotis paleidžiama prisijungus, žurnale matomas kliento paleidimas, bet tunelis niekada neįsijungia. Arba įsijungia ir po kelių sekundžių dingsta. Abiem atvejais ypatybių sąrašas greičiausiai buvo tvarkingas. launchd priimdama užduotį davė du pažadus: prižiūrės procesą ir tas procesas veiks toliau. VPN reikia abiejų, o taisyklingas XML failas nesuteikia nė vieno.

Galiojantis ypatybių sąrašas dar nėra veikianti paslauga

plutil -lint tikrina struktūrą. Jis negali pasakyti, ar dvejetainis failas egzistuoja, ar argumentus palaiko ši kliento versija, ar užduotis paleidžiama aplinkoje, kurioje prieinami kredencialai. Tai semantiniai klausimai, ir jie paaiškina daugumą gedimų, kurie atrodo kaip launchd problemos.

plutil -lint /Library/LaunchDaemons/com.example.vpn.plist
launchctl print system/com.example.vpn

Skaitykite antrosios komandos išvestį, o ne manykite, kad užduotis įkelta. Ji nurodo paskutinę išėjimo būseną ir ar paslauga veikia, o tai leidžia prieš liesdami profilį atskirti „niekada nepaleista“ nuo „paleista ir mirė“.

Agentai paveldi vartotojo sesiją, demonai — ne

„Apple“ launchd dokumentacija atskiria kiekvieno vartotojo agentus nuo sisteminių demonų. Agentas veikia prisijungusio vartotojo aplinkoje, su to vartotojo raktine ir aplinka. Demonas veikia be tos sesijos, o užduoties perkėlimas į sisteminį katalogą neatkuria vartotojo interaktyvių kredencialų.

Būtent šis skirtumas lemia projektą. Jei ryšiui reikia, kad žmogus prisijungtų arba patvirtintų MFA užklausą, palaikoma schema yra vartotojo sesijos užduotis, paleidžiama po prisijungimo. Jei ji turi veikti be jokio prisijungusio vartotojo, klientui reikia patvirtintos be priežiūros tapatybės su savo atnaujinimo ir atšaukimo procesu. Pasirinkus netinkamą eilutę gaunama užduotis, kuri paleidžiama švariai ir žlunga pirmame autentifikavimo žingsnyje.

Neuždengite šio skirtumo slaptažodžiu argumentų masyve arba išjungdami sertifikatų patikras. Abu paverčia autentifikavimo reikalavimą nuolatine paslaptimi skaitomame faile, o antrasis reiškia, kad tunelis autentifikuoja viską, kas atsako.

Priežiūra veikia tik tada, kai procesas lieka priekyje

Klientas, kuris pats tampa demonu, iš karto grąžina valdymą launchd, o prižiūrėtojas tada stebi jau pasibaigusį procesą. Tunelis gali būti įjungtas, bet launchd mano, kad užduotis nepavyko, ir jo perkrovimo politika padarys tai, ko nenorėjote.

Naudokite kliento dokumentuotą priekinį arba paslaugos režimą. Jei produktas turi savo palaikomą paleidimo funkciją, ji jau žino, kaip likti priekyje ir kaip perduoti tinklelio kamienui; pasirinktinė užduotis yra atskiras projektas, o ne jos patobulinimas.

Suteikite užduočiai unikalų žymą, numatytą vykdomąjį failą ir apgalvotą argumentų masyvą. Masyvas nėra shell komandų eilutė, todėl vamzdžiai ir peradresavimai ten neveikia, o kabučių elgsena kitokia. Komanda, kuri pavyksta administratoriaus terminale, geriausiu atveju yra preliminari patikra.

Kredencialai turi veikti be užklausos

Darbas be priežiūros nepašalina kredencialų problemos, o ją perkelia. Kažkas turi valdyti tapatybę, nuspręsti, kiek ji gyvuos, ir dokumentuoti, kaip ji keičiama. Sertifikatas be galiojimo stebėsenos tampa sutrikimu su data kalendoriuje.

Laikykite paslaptis už argumentų ir už užduoties standartinės išvesties ribų. Jei klientas palaiko kredencialo skaitymą iš apsaugotos saugyklos, naudokite tą kelią ir patikrinkite, ar užduoties vykdymo aplinka pasiekia saugyklą. Demonas, veikiantis kaip root, paprastai negali perskaityti prisijungimo raktinės elemento, ir tai yra tokia detalė, kuri pasirodo tik sisteminėje aplinkoje.

Apibrėžkite, ką reiškia pasiruošęs, ir tikrinkite ten

Sėkmingas paleidimas įrodo, kad procesas prasidėjo. Tai neįrodo, kad tinklas veikia, kad šliuzas priėmė tapatybę ar kad privati programėlė pasiekiama. Jei kažkas kitas priklauso nuo tunelio, jam reikia pasirengimo signalo, atspindinčio ryšį, o ne užduoties paleidimo laiką.

Pakartotiniai bandymai turi būti riboti ir turi atskirti trūkstamą tinklą nuo atmestų kredencialų. Paleidimas iš naujo po kiekvienos klaidos nepataisys pasibaigusio sertifikato ir sukurs žurnalą, pilną identiškų bandymų, kuris paslepia tikrąjį.

Priimkite užduotį toje aplinkoje, kurioje ji iš tikrųjų veiks: be tinklo įkrovimo metu, įprasto prisijungimo, pabudimo iš miego ir kontroliuojamo sustabdymo. Tada kartu užrašykite užduoties žymą, kliento versiją ir profilio pataisą, kad kitas žmogus paveldėtų priskiriamą paslaugą, o ne failą, kuris kadaise veikė.

Susiję straipsniai