VPN på Mac ved oppstart: launchd overvakar jobben, ikkje tunnelen
Ein plist som består lint provar ingenting om påloggingsdata eller beredskap. Tilpass jobben til økta si, hald klienten i framgrunnen og test i den samanhengen.
Jobben køyrer ved innlogging, loggen viser at klienten startar, men tunnelen kjem aldri opp. Eller han kjem opp og forsvinn nokre sekund seinare. I begge tilfelle var eigenskapslista truleg i orden. launchd gav to lovnader då han tok imot jobben: han skal overvake ein prosess, og den prosessen skal halde fram med å køyre. VPN treng begge, og ei korrekt XML-fil gir ingen av dei.
Ei gyldig eigenskapsliste er ikkje ei fungerande teneste
plutil -lint kontrollerer strukturen. Han kan ikkje fortelje deg om binæren finst, om argumenta er støtta av denne klientversjonen, eller om jobben startar i ein samanheng der påloggingsdataa er tilgjengelege. Dette er semantiske spørsmål, og dei forklarer dei fleste feila som ser ut som launchd-problem.
plutil -lint /Library/LaunchDaemons/com.example.vpn.plist
launchctl print system/com.example.vpn
Les utdataa frå den andre kommandoen i staden for å anta at jobben er lasta. Han rapporterer siste utgangsstatus og om tenesta køyrer, noko som skil «starta aldri» frå «starta og døydde» før du rører profilen.
Agentar arvar ei brukarøkt, daemonar gjer det ikkje
Apples launchd-dokumentasjon skil agentar per brukar frå systemdaemonar. Ein agent køyrer i samanhengen til den innlogga brukaren, med brukaren sin nykelring og miljø. Ein daemon køyrer utan den økta, og å flytte ein jobb til ein systemkatalog gjenopprettar ikkje dei interaktive påloggingsdataa til brukaren.
Det er denne skilnaden som avgjer utforminga. Viss tilkoplinga krev at ein person loggar inn eller godkjenner ei MFA-melding, er den støtta ordninga ein jobb i brukarøkta som køyrer etter innlogging. Viss han må fungere utan at nokon er innlogga, treng klienten ein godkjend ubetent identitet med sin eigen fornyings- og tilbakekallingsprosess. Å velje feil rad gir ein jobb som startar reint og feilar på første autentiseringstrinn.
Ikkje skjul skilnaden med eit passord i argumentmatrisa eller ved å slå av sertifikatkontrollar. Begge gjer eit autentiseringskrav om til ein permanent løyndom i ei lesbar fil, og det siste betyr at tunnelen autentiserer alt som svarar.
Overvaking verkar berre viss prosessen blir verande i framgrunnen
Ein klient som gjer seg sjølv til ein daemon, gir kontrollen tilbake til launchd med ein gong, og overvakaren ser då på ein prosess som allereie er avslutta. Tunnelen kan vere oppe, men launchd meiner jobben feila, og omstartspolicyen vil gjere noko du ikkje hadde tenkt.
Bruk den dokumenterte framgrunns- eller tenestemodusen til klienten. Viss produktet har sin eigen støtta oppstartsfunksjon, veit han allereie korleis han skal bli i framgrunnen og korleis han overleverer til nettverksstakken; ein tilpassa jobb er ei separat utforming, ikkje ei forbetring av han.
Gi jobben ein unik etikett, den tiltenkte køyrbare fila og ei medviten argumentmatrise. Ei matrise er ikkje ei skallkommandolinje, så røyr og omdirigeringar verkar ikkje der, og sitatving oppfører seg annleis. Ein kommando som lukkast i ein administratørterminal er i beste fall ein førebels kontroll.
Påloggingsdata må verke utan ei melding
Ubetent drift flyttar påloggingsproblemet i staden for å fjerne det. Nokon må eige identiteten, avgjere kor lenge han lever og dokumentere korleis han blir erstatta. Eit sertifikat utan overvaking av utløp blir eit avbrot med ein dato i kalenderen.
Hald løyndomar utanfor argumenta og utanfor standardutdataa til jobben. Viss klienten støttar lesing av påloggingsdata frå eit verna lager, bruk den vegen, og kontroller at køyretidssamanhengen til jobben kan nå lageret. Ein daemon som køyrer som root kan vanlegvis ikkje lese eit element i innloggingsnykelringen, og det er den typen detalj som berre dukkar opp i systemsamanheng.
Definer kva klar betyr, og test der
Ein vellukka oppstart provar at prosessen starta. Det provar ikkje at nettverket er oppe, at gatewayen godtok identiteten, eller at den private applikasjonen er tilgjengeleg. Viss noko anna er avhengig av tunnelen, treng det eit beredskapssignal som speglar tilkoplinga, ikkje starttida til jobben.
Nye forsøk bør vere avgrensa og bør skilje eit manglande nettverk frå ei avvist pålogging. Å starte på nytt ved kvar feil kan ikkje reparere eit utløpt sertifikat og gir ein logg full av identiske forsøk som skjuler det verkelege.
Godta jobben i den samanhengen han faktisk skal køyre i: ingen nettverk ved oppstart, ei normal innlogging, ei oppvakning frå dvale og ein kontrollert stopp. Noter deretter jobbetiketten, klientversjonen og profilrevisjonen saman, slik at neste person arvar ei sporbar teneste i staden for ei fil som ein gong verka.