Mac VPN käivitamisel: launchd valvab tööd, mitte tunnelit
Puhas plist ei tõesta midagi mandaatide ega valmisoleku kohta. Sobitage töö oma sessiooniga, hoidke klient esiplaanil ja katsetage selles kontekstis.
Töö käivitub sisselogimisel, logi näitab kliendi käivitumist ja tunnel ei tõuse kunagi. Või tõuseb ja kaob mõni sekund hiljem. Mõlemal juhul oli atribuudiloend tõenäoliselt korras. launchd andis tööd vastu võttes kaks lubadust: see valvab protsessi ja see protsess jätkab töötamist. VPN vajab mõlemat ja korrektne XML-fail ei paku kumbagi.
Kehtiv atribuudiloend ei ole töötav teenus
plutil -lint kontrollib struktuuri. See ei saa öelda, kas binaarfail on olemas, kas argumendid on selle kliendiversiooni poolt toetatud või kas töö käivitub kontekstis, kus mandaadid on saadaval. Need on semantilised küsimused ja need selgitavad enamikku tõrkeid, mis näevad välja nagu launchd probleemid.
plutil -lint /Library/LaunchDaemons/com.example.vpn.plist
launchctl print system/com.example.vpn
Lugege teise käsu väljundit, selle asemel et eeldada, et töö laaditi. See teatab viimase väljumisoleku ja kas teenus töötab, mis eristab “ei käivitunud kunagi” olekust “käivitus ja suri”, enne kui profiili puutute.
Agendid pärandavad kasutajasessiooni, deemonid mitte
Apple’i launchd dokumentatsioon eraldab kasutajapõhised agendid süsteemideemonitest. Agent töötab sisseloginud kasutaja kontekstis koos selle kasutaja võtmehoidla ja keskkonnaga. Deemon töötab ilma selle sessioonita ja töö viimine süsteemikataloogi ei taasta kasutaja interaktiivseid mandaate.
See erinevus määrab disaini. Kui ühendus nõuab, et inimene logiks sisse või kinnitaks MFA päringu, on toetatud lahendus kasutajasessioonis töö, mis käivitub pärast sisselogimist. Kui see peab töötama ilma ühegi sisseloginud inimeseta, vajab klient kinnitatud järelevalveta identiteeti oma uuendamise ja tühistamise protsessiga. Vale rea valimine loob töö, mis käivitub puhtalt ja ebaõnnestub esimesel autentimise sammul.
Ärge katke erinevust argumendimassiivis oleva parooliga ega sertifikaadikontrollide väljalülitamisega. Mõlemad muudavad autentimisnõude loetavas failis alaliseks saladuseks ja teine tähendab, et tunnel autendib kõike, mis vastab.
Järelevalve toimib ainult siis, kui protsess jääb ette
Klient, mis muudab end ise deemoniks, annab kontrolli kohe launchd-ile tagasi ja valvevaataja jälgib siis protsessi, mis on juba lõppenud. Tunnel võib olla üleval, aga launchd arvab, et töö ebaõnnestus, ja selle taaskäivitamispoliitika teeb midagi, mida te ei kavatsenud.
Kasutage kliendi dokumenteeritud esiplaani- või teenuserežiimi. Kui tootel on oma toetatud käivitusfunktsioon, teab see juba, kuidas esiplaanile jääda ja kuidas võrguplokile üle anda; kohandatud töö on eraldi disain, mitte selle täiustus.
Andke tööle unikaalne silt, kavandatud käivitatav fail ja läbimõeldud argumendimassiiv. Massiiv ei ole shelli käsurida, seega torud ja ümbersuunamised seal ei tööta ning jutumärgid käituvad teisiti. Käsk, mis administraatori terminalis õnnestub, on parimal juhul esialgne kontroll.
Mandaadid peavad toimima ilma küsimuseta
Järelevalveta töötamine liigutab mandaatide probleemi, selle asemel et see kõrvaldada. Keegi peab identiteedi omanikuks olema, otsustama, kui kaua see elab, ja dokumenteerima, kuidas seda asendatakse. Sertifikaat ilma aegumise jälgimiseta muutub katkestuseks, millel on kalendris kuupäev.
Hoidke saladused argumentidest ja töö standardväljundist eemal. Kui klient toetab mandaadi lugemist kaitstud hoidlast, kasutage seda teed ja kontrollige, et töö täitmiskontekst jõuab hoidlani. Rootina töötav deemon ei saa tavaliselt sisselogimise võtmehoidla üksust lugeda ja see on detail, mis ilmneb ainult süsteemikontekstis.
Määratlege, mida tähendab valmisolek, ja katsetage seda seal
Edukas käivitus tõestab, et protsess algas. See ei tõesta, et võrk on üleval, et lüüs võttis identiteedi vastu või et privaatrakendus on kättesaadav. Kui midagi muud sõltub tunnelist, vajab see valmisolekusignaali, mis peegeldab ühendust, mitte töö algusaega.
Korduskatsed peaksid olema piiratud ja eristama puuduvat võrku tagasilükatud mandaadist. Igal tõrkel taaskäivitamine ei suuda aegunud sertifikaati parandada ja tekitab logi, mis on täis identseid katseid ja varjab tegeliku.
Võtke töö vastu kontekstis, kus see tegelikult töötab: võrku pole käivitamisel, tavaline sisselogimine, unest ärkamine ja kontrollitud peatamine. Seejärel kirjutage töösilt, kliendiversioon ja profiili redaktsioon koos üles, et järgmine inimene päriks omistatava teenuse, mitte faili, mis kunagi töötas.