VPN på Mac ved oppstart: launchd overvåker jobben, ikke tunnelen
En plist som består lint beviser ingenting om legitimasjon eller beredskap. Tilpass jobben til økten sin, hold klienten i forgrunnen og test i den sammenhengen.
Jobben kjører ved innlogging, loggen viser at klienten starter, men tunnelen kommer aldri opp. Eller den kommer opp og forsvinner noen sekunder senere. I begge tilfeller var egenskapslisten sannsynligvis i orden. launchd ga to løfter da den tok imot jobben: den skal overvåke en prosess, og den prosessen skal fortsette å kjøre. VPN trenger begge, og en korrekt XML-fil gir ingen av dem.
En gyldig egenskapsliste er ikke en fungerende tjeneste
plutil -lint kontrollerer strukturen. Den kan ikke fortelle deg om binæren finnes, om argumentene støttes av denne klientversjonen, eller om jobben starter i en sammenheng der legitimasjonen er tilgjengelig. Dette er semantiske spørsmål, og de forklarer de fleste feilene som ser ut som launchd-problemer.
plutil -lint /Library/LaunchDaemons/com.example.vpn.plist
launchctl print system/com.example.vpn
Les utdataene fra den andre kommandoen i stedet for å anta at jobben er lastet. Den rapporterer siste utgangsstatus og om tjenesten kjører, noe som skiller «startet aldri» fra «startet og døde» før du rører profilen.
Agenter arver en brukerøkt, daemoner gjør det ikke
Apples launchd-dokumentasjon skiller agenter per bruker fra systemdaemoner. En agent kjører i den innloggede brukerens sammenheng, med brukerens nøkkelring og miljø. En daemon kjører uten den økten, og å flytte en jobb til en systemkatalog gjenoppretter ikke brukerens interaktive legitimasjon.
Det er denne forskjellen som avgjør utformingen. Hvis tilkoblingen krever at en person logger inn eller godkjenner en MFA-melding, er den støttede ordningen en jobb i brukerøkten som kjører etter innlogging. Hvis den må fungere uten at noen er innlogget, trenger klienten en godkjent ubetjent identitet med sin egen fornyelses- og tilbakekallingsprosess. Å velge feil rad gir en jobb som starter rent og feiler på første autentiseringstrinn.
Ikke skjul forskjellen med et passord i argumentmatrisen eller ved å slå av sertifikatkontroller. Begge gjør et autentiseringskrav om til en permanent hemmelighet i en lesbar fil, og det siste betyr at tunnelen autentiserer alt som svarer.
Overvåking virker bare hvis prosessen blir værende i forgrunnen
En klient som gjør seg selv til en daemon, gir kontrollen tilbake til launchd med en gang, og overvåkeren ser da på en prosess som allerede er avsluttet. Tunnelen kan være oppe, men launchd mener jobben feilet, og omstartspolicyen vil gjøre noe du ikke hadde tenkt.
Bruk klientens dokumenterte forgrunns- eller tjenestemodus. Hvis produktet har sin egen støttede oppstartsfunksjon, vet den allerede hvordan den skal bli i forgrunnen og hvordan den overleverer til nettverksstakken; en tilpasset jobb er en separat utforming, ikke en forbedring av den.
Gi jobben en unik etikett, den tiltenkte kjørbare filen og en bevisst argumentmatrise. En matrise er ikke en skallkommandolinje, så rør og omdirigeringer virker ikke der, og sitatving oppfører seg annerledes. En kommando som lykkes i en administratorteminal er i beste fall en foreløpig kontroll.
Legitimasjon må virke uten en melding
Ubetjent drift flytter legitimasjonsproblemet i stedet for å fjerne det. Noen må eie identiteten, bestemme hvor lenge den lever og dokumentere hvordan den erstattes. Et sertifikat uten overvåking av utløp blir et avbrudd med en dato i kalenderen.
Hold hemmeligheter utenfor argumentene og utenfor jobbens standardutdata. Hvis klienten støtter lesing av legitimasjon fra et beskyttet lager, bruk den veien, og kontroller at jobbens kjøretidssammenheng kan nå lageret. En daemon som kjører som root kan vanligvis ikke lese et element i innloggingsnøkkelringen, og det er den typen detalj som bare dukker opp i systemsammenheng.
Definer hva klar betyr, og test der
En vellykket oppstart beviser at prosessen startet. Den beviser ikke at nettverket er oppe, at gatewayen godtok identiteten, eller at den private applikasjonen er tilgjengelig. Hvis noe annet avhenger av tunnelen, trenger det et beredskapssignal som gjenspeiler tilkoblingen, ikke jobbens starttid.
Nye forsøk bør være begrenset og bør skille et manglende nettverk fra en avvist legitimasjon. Å starte på nytt ved hver feil kan ikke reparere et utløpt sertifikat og gir en logg full av identiske forsøk som skjuler det virkelige.
Godta jobben i den sammenhengen den faktisk skal kjøre i: ingen nettverk ved oppstart, en normal innlogging, en oppvåkning fra dvale og en kontrollert stopp. Noter deretter jobbetiketten, klientversjonen og profilrevisjonen sammen, slik at neste person arver en sporbar tjeneste i stedet for en fil som en gang virket.