Mac VPN pri podizanju: launchd nadzire posao, a ne tunel
Čist plist ne dokazuje ništa o vjerodajnicama ili spremnosti. Uskladite posao s njegovom sesijom, držite klijent u prvom planu i testirajte u tom kontekstu.
Posao se pokreće pri prijavi, zapis pokazuje da se klijent pokreće, a tunel se nikada ne podiže. Ili se podigne i nestane nekoliko sekundi kasnije. U oba slučaja lista svojstava vjerojatno je bila ispravna. launchd je dao dva obećanja kada je prihvatio posao: nadziraće proces i taj proces će nastaviti raditi. VPN treba oboje, a ispravna XML datoteka ne pruža ni jedno.
Ispravna lista svojstava nije usluga koja radi
plutil -lint provjerava strukturu. Ne može vam reći postoji li izvršna datoteka, podržava li ova verzija klijenta argumente ili počinje li posao u kontekstu u kojem su vjerodajnice dostupne. To su semantička pitanja i objašnjavaju većinu kvarova koji izgledaju kao problemi s launchd.
plutil -lint /Library/LaunchDaemons/com.example.vpn.plist
launchctl print system/com.example.vpn
Pročitajte izlaz druge naredbe umjesto da pretpostavljate da je posao učitan. Prikazuje posljednji status izlaza i radi li usluga, što razlikuje “nikad nije pokrenut” od “pokrenuo se i umro” prije nego što dirnete profil.
Agenti nasljeđuju korisničku sesiju, demoni ne
Appleova dokumentacija za launchd razdvaja agente po korisniku od sustavskih demona. Agent radi u kontekstu prijavljenog korisnika, s njegovim privjeskom ključeva i okruženjem. Demon radi bez te sesije, a premještanje posla u sustavski direktorij ne vraća interaktivne vjerodajnice korisnika.
Ta razlika određuje dizajn. Ako veza zahtijeva da se osoba prijavi ili odobri MFA upit, podržani raspored je posao u korisničkoj sesiji koji se pokreće nakon prijave. Ako mora raditi bez ikoga prijavljenog, klijent treba odobreni identitet bez nadzora s vlastitim procesom obnove i opoziva. Odabir pogrešnog retka daje posao koji se čisto pokreće i pada na prvom koraku autentifikacije.
Ne prekrivajte razliku lozinkom u polju argumenata ili isključivanjem provjera certifikata. Oboje pretvara zahtjev za autentifikacijom u trajnu tajnu u čitljivoj datoteci, a drugo znači da tunel autentificira sve što odgovori.
Nadzor radi samo ako proces ostane sprijeda
Klijent koji sam sebe pretvori u demon odmah vraća kontrolu launchd-u, a nadzornik tada gleda proces koji je već izašao. Tunel može biti podignut, ali launchd misli da je posao neuspješan i njegova politika ponovnog pokretanja učinit će nešto što niste namjeravali.
Koristite dokumentirani način rada u prvom planu ili način usluge koji klijent podržava. Ako proizvod ima vlastitu podržanu funkciju pokretanja, ona već zna kako ostati u prvom planu i kako predati mrežnom stogu; prilagođeni posao je zaseban dizajn, a ne poboljšanje toga.
Dajte poslu jedinstvenu oznaku, namjeravanu izvršnu datoteku i promišljeno polje argumenata. Polje nije naredbeni redak ljuske, pa cijevi i preusmjeravanja tamo ne rade, a navodnici se ponašaju drugačije. Naredba koja uspijeva u terminalu administratora u najboljem je slučaju preliminarna provjera.
Vjerodajnice moraju raditi bez upita
Rad bez nadzora premješta problem vjerodajnica umjesto da ga uklanja. Netko mora posjedovati identitet, odlučiti koliko dugo živi i dokumentirati kako se zamjenjuje. Certifikat bez praćenja isteka postaje prekid s datumom u kalendaru.
Držite tajne izvan argumenata i izvan standardnog izlaza posla. Ako klijent podržava čitanje vjerodajnice iz zaštićenog spremišta, koristite taj put i provjerite može li izvršni kontekst posla doći do spremišta. Demon koji radi kao root obično ne može pročitati stavku privjeska ključeva za prijavu, a to je detalj koji se pojavljuje samo u sustavskom kontekstu.
Definirajte što znači spremnost, pa to testirajte tamo
Uspješno pokretanje dokazuje da je proces počeo. Ne dokazuje da je mreža podignuta, da je pristupnik prihvatio identitet ili da je privatna aplikacija dostupna. Ako nešto drugo ovisi o tunelu, treba signal spremnosti koji odražava vezu, a ne vrijeme početka posla.
Ponovni pokušaji trebaju biti ograničeni i razlikovati mrežu koja nedostaje od odbijenih vjerodajnica. Ponovno pokretanje pri svakom neuspjehu ne može popraviti istekao certifikat i stvara zapis pun identičnih pokušaja koji skriva pravi.
Prihvatite posao u kontekstu u kojem će stvarno raditi: bez mreže pri podizanju, pri normalnoj prijavi, pri buđenju iz sna i pri kontroliranom zaustavljanju. Zatim zabilježite oznaku posla, verziju klijenta i reviziju profila zajedno, da sljedeća osoba naslijedi uslugu s jasnim podrijetlom umjesto datoteke koja je nekad radila.