VPN na Macu ob zagonu: launchd nadzoruje opravilo, ne tunel
Plist, ki prestane lint, ne dokaže ničesar o poverilnicah ali pripravljenosti. Uskladite opravilo z njegovo sejo, držite odjemalca v ospredju in preizkusite v tem kontekstu.
Opravilo se zažene ob prijavi, dnevnik kaže zagon odjemalca, a tunel se nikoli ne dvigne. Ali pa se dvigne in čez nekaj sekund izgine. V obeh primerih je bil seznam lastnosti verjetno v redu. launchd je ob prevzemu opravila dal dve obljubi: nadzoroval bo proces in ta proces bo še naprej tekel. VPN potrebuje oboje, pravilna datoteka XML pa ne ponuja nobenega.
Veljaven seznam lastnosti še ni delujoča storitev
plutil -lint preverja zgradbo. Ne more vam povedati, ali binarna datoteka obstaja, ali to različico odjemalca podpira argumente ali ali se opravilo zažene v kontekstu, kjer so poverilnice na voljo. To so pomenska vprašanja in pojasnjujejo večino napak, ki izgledajo kot težave z launchd.
plutil -lint /Library/LaunchDaemons/com.example.vpn.plist
launchctl print system/com.example.vpn
Preberite izhod drugega ukaza, namesto da bi domnevali, da je opravilo naloženo. Poroča zadnje stanje izhoda in ali storitev teče, kar pred posegom v profil loči »nikoli se ni zagnalo« od »zagnalo se je in umrlo«.
Agenti podedujejo uporabniško sejo, demoni ne
Applovi dokumenti o launchd ločujejo agente posameznega uporabnika od sistemskih demonov. Agent teče v kontekstu prijavljenega uporabnika, z njegovim obeskom ključev in okoljem. Demon teče brez te seje in premik opravila v sistemsko mapo ne poustvari uporabnikovih interaktivnih poverilnic.
Prav ta razlika odloča o zasnovi. Če povezava zahteva, da se oseba prijavi ali odobri poziv MFA, je podprta ureditev opravilo v uporabniški seji, ki se zažene po prijavi. Če mora delovati brez nikogar prijavljenega, odjemalec potrebuje odobreno nenadzorovano identiteto z lastnim postopkom obnove in preklica. Izbira napačne vrstice ustvari opravilo, ki se čisto zažene in spodleti na prvem koraku preverjanja pristnosti.
Razlike ne zakrivajte z geslom v polju argumentov ali z izklopom preverjanja potrdil. Oboje spremeni zahtevo po preverjanju pristnosti v trajno skrivnost v berljivi datoteki, drugo pa pomeni, da tunel preveri vse, kar odgovori.
Nadzor deluje le, če proces ostane v ospredju
Odjemalec, ki se sam spremeni v demona, takoj vrne nadzor launchd, nadzornik pa nato spremlja proces, ki se je že končal. Tunel je lahko vzpostavljen, a launchd meni, da je opravilo spodletelo, in njegova politika ponovnega zagona bo naredila nekaj, česar niste nameravali.
Uporabite dokumentirani način ospredja ali storitve, ki ga ponuja odjemalec. Če ima izdelek lastno podprto zagonsko funkcijo, ta že ve, kako ostati v ospredju in kako predati nadzor omrežnemu skladu; opravilo po meri je ločena zasnova, ne njena izboljšava.
Opravilu dajte edinstveno oznako, predvideno izvršljivo datoteko in premišljeno polje argumentov. Polje ni ukazna vrstica lupine, zato cevi in preusmeritve tam ne delujejo, narekovaji pa se obnašajo drugače. Ukaz, ki uspe v terminalu skrbnika, je kvečjemu predhodni pregled.
Poverilnice morajo delovati brez poziva
Nenadzorovano delovanje težavo s poverilnicami premakne, namesto da bi jo odpravilo. Nekdo mora imeti identiteto, določiti, kako dolgo živi, in dokumentirati, kako se zamenja. Potrdilo brez spremljanja poteka postane izpad z datumom v koledarju.
Skrivnosti hranite zunaj argumentov in zunaj standardnega izhoda opravila. Če odjemalec podpira branje poverilnice iz zaščitenega skladišča, uporabite to pot in preverite, ali kontekst izvajanja opravila doseže skladišče. Demon, ki teče kot root, običajno ne more prebrati predmeta v prijavnem obesku ključev, in to je vrsta podrobnosti, ki se pokaže le v sistemskem kontekstu.
Določite, kaj pomeni pripravljeno, in preizkusite tam
Uspešen zagon dokaže, da se je proces začel. Ne dokaže, da je omrežje vzpostavljeno, da je prehod sprejel identiteto ali da je zasebna aplikacija dosegljiva. Če je od tunela odvisno kaj drugega, potrebuje signal pripravljenosti, ki odraža povezavo, ne časa zagona opravila.
Ponovni poskusi naj bodo omejeni in naj ločijo manjkajoče omrežje od zavrnjenih poverilnic. Ponovni zagon ob vsaki napaki ne more popraviti poteklega potrdila in ustvari dnevnik, poln enakih poskusov, ki skrije pravega.
Opravilo sprejmite v kontekstu, v katerem bo resnično teklo: brez omrežja ob zagonu, ob običajni prijavi, ob prebuditvi iz spanja in ob nadzorovanem zaustavljanju. Nato zapišite oznako opravila, različico odjemalca in revizijo profila skupaj, da naslednja oseba podeduje storitev, ki jo je mogoče pripisati, in ne datoteke, ki je nekoč delovala.