Die taak loop by aanmelding, die log wys die kliënt begin, en die tonnel kom nooit op nie. Of dit kom op en verdwyn ’n paar sekondes later. In albei gevalle was die property list waarskynlik reg. launchd het twee beloftes gemaak toe dit die taak aanvaar het: dit sal toesig hou oor ’n proses, en daardie proses sal aanhou loop. Die VPN het albei nodig, en ’n korrekte XML-lêer bied nie een van die twee nie.

’n Geldige plist is nie ’n werkende diens nie

plutil -lint kontroleer struktuur. Dit kan jou nie sê of die binêre lêer bestaan nie, of die argumente deur hierdie kliëntweergawe ondersteun word nie, of die taak in ’n konteks begin waar die geloofsbriewe beskikbaar is nie. Dit is semantiese vrae, en hulle verantwoord die meeste foute wat soos launchd-probleme lyk.

plutil -lint /Library/LaunchDaemons/com.example.vpn.plist
launchctl print system/com.example.vpn

Lees die uitset van die tweede opdrag eerder as om aan te neem die taak het gelaai. Dit rapporteer die laaste uittreestatus en of die diens loop, wat “nooit begin nie” van “begin en gesterf” onderskei voordat jy die profiel aanraak.

Agente erf ’n gebruikersessie, daemons nie

Apple se launchd-dokumentasie skei per-gebruiker-agente van stelseldaemons. ’n Agent loop in die aangemelde gebruiker se konteks, met daardie gebruiker se sleutelbos en omgewing. ’n Daemon loop sonder daardie sessie, en om ’n taak na ’n stelselgids te skuif herskep nie die gebruiker se interaktiewe geloofsbriewe nie.

Daardie onderskeid bepaal die ontwerp. As die verbinding vereis dat ’n persoon aanmeld of ’n MFA-opdrag goedkeur, is die ondersteunde reëling ’n taak in die gebruikersessie wat ná aanmelding loop. As dit moet werk sonder dat iemand aangemeld is, het die kliënt ’n goedgekeurde onbewaakte identiteit nodig met sy eie vernuwings- en herroepingsproses. Om die verkeerde ry te kies lewer ’n taak wat skoon begin en by die eerste verifikasiestap misluk.

Moenie die verskil verbloem met ’n wagwoord in die argument-array of deur sertifikaatkontroles af te skakel nie. Albei maak ’n verifikasievereiste ’n permanente geheim in ’n leesbare lêer, en die tweede beteken die tonnel verifieer enigiets wat antwoord.

Toesig werk net as die proses voor bly

’n Kliënt wat homself daemoniseer, gee beheer onmiddellik aan launchd terug, en die toesighouer kyk dan na ’n proses wat reeds beëindig is. Die tonnel mag op wees, maar launchd dink die taak het misluk, en sy herbeginbeleid sal iets doen wat jy nie bedoel het nie.

Gebruik die kliënt se gedokumenteerde voorgrond- of diensmodus. As die produk sy eie ondersteunde opstartfunksie het, weet daardie funksie reeds hoe om in die voorgrond te bly en hoe om aan die netwerkstapel oor te dra; ’n pasgemaakte taak is ’n aparte ontwerp, nie ’n verbetering daarvan nie.

Gee die taak ’n unieke etiket, die bedoelde uitvoerbare lêer en ’n doelbewuste argument-array. ’n Array is nie ’n shell-opdragreël nie, so pype en herleidings werk nie daar nie, en aanhalingstekens gedra hom anders. ’n Opdrag wat in ’n administrateur se terminal slaag, is hoogstens ’n voorlopige kontrole.

Geloofsbriewe moet sonder ’n opdrag werk

Onbewaakte werking skuif die geloofsbriefprobleem eerder as om dit te verwyder. Iemand moet die identiteit besit, besluit hoe lank dit leef en dokumenteer hoe dit vervang word. ’n Sertifikaat sonder vervaldatummonitering word ’n onderbreking met ’n kalenderdatum daarop.

Hou geheime uit argumente en uit die taak se standaarduitset. As die kliënt dit ondersteun om ’n geloofsbrief uit ’n beskermde stoor te lees, gebruik daardie pad, en kontroleer dat die taak se uitvoeringskonteks die stoor kan bereik. ’n Daemon wat as root loop, kan gewoonlik nie ’n aanmeld-sleutelbos-item lees nie, en dit is die soort detail wat net in die stelselkonteks opduik.

Definieer wat gereed beteken, en toets dit daar

’n Suksesvolle bekendstelling bewys die proses het begin. Dit bewys nie die netwerk is op nie, die poort het die identiteit aanvaar nie, of die private toepassing bereikbaar is nie. As iets anders van die tonnel afhang, het dit ’n gereedheidsein nodig wat die verbinding weerspieël, nie die taak se begintyd nie.

Hervormings moet begrens wees en moet ’n ontbrekende netwerk van ’n verwerpte geloofsbrief onderskei. Om by elke mislukking weer te begin kan nie ’n vervalde sertifikaat herstel nie, en dit produseer ’n log vol identiese pogings wat die regte een verberg.

Aanvaar die taak in die konteks waarin dit werklik sal loop: geen netwerk by opstart nie, ’n normale aanmelding, ’n wakker word uit slaap en ’n beheerde stop. Teken dan die taaketiket, die kliëntweergawe en die profielhersiening saam aan, sodat die volgende persoon ’n toeskryfbare diens erf in plaas van ’n lêer wat eens gewerk het.

Verwante artikels