La tasca s’executa a l’inici de sessió, el registre mostra que el client arrenca i el túnel no puja mai. O puja i desapareix uns segons després. En tots dos casos la llista de propietats probablement era correcta. launchd va fer dues promeses quan va acceptar la tasca: supervisarà un procés i aquell procés continuarà executant-se. La VPN necessita les dues coses, i un fitxer XML correcte no n’ofereix cap.

Una llista de propietats vàlida no és un servei en funcionament

plutil -lint comprova l’estructura. No pot dir si el binari existeix, si els arguments són compatibles amb aquesta versió del client o si la tasca arrenca en un context on les credencials estan disponibles. Són preguntes semàntiques i expliquen la majoria de fallades que semblen problemes de launchd.

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

Llegiu la sortida de la segona ordre en lloc de suposar que la tasca s’ha carregat. Informa de l’últim estat de sortida i de si el servei s’executa, cosa que distingeix “mai no s’ha iniciat” de “s’ha iniciat i ha mort” abans de tocar el perfil.

Els agents hereten una sessió d’usuari, els dimonis no

La documentació de launchd d’Apple separa els agents per usuari dels dimonis del sistema. Un agent s’executa en el context de l’usuari connectat, amb el seu clauer i entorn. Un dimoni s’executa sense aquesta sessió, i traslladar una tasca a un directori del sistema no recrea les credencials interactives de l’usuari.

Aquesta distinció decideix el disseny. Si la connexió requereix que una persona iniciï sessió o aprovi una sol·licitud MFA, la disposició admesa és una tasca en la sessió de l’usuari que s’executa després de l’inici de sessió. Si ha de funcionar sense ningú connectat, el client necessita una identitat aprovada sense supervisió amb el seu propi procés de renovació i revocació. Triar la fila equivocada produeix una tasca que arrenca neta i falla al primer pas d’autenticació.

No dissimuleu la diferència amb una contrasenya a la matriu d’arguments ni desactivant les comprovacions de certificat. Totes dues converteixen un requisit d’autenticació en un secret permanent en un fitxer llegible, i la segona significa que el túnel autentica qualsevol cosa que respongui.

La supervisió només funciona si el procés es queda al davant

Un client que es converteix ell mateix en dimoni retorna el control a launchd immediatament, i llavors el supervisor vigila un procés que ja ha sortit. El túnel pot estar aixecat, però launchd creu que la tasca ha fallat i la seva política de reinici farà una cosa que no volíeu.

Feu servir el mode de primer pla o de servei documentat del client. Si el producte té una funció d’arrencada pròpia compatible, ja sap com quedar-se en primer pla i com cedir la feina a la pila de xarxa; una tasca personalitzada és un disseny a part, no una millora d’això.

Doneu a la tasca una etiqueta única, l’executable previst i una matriu d’arguments deliberada. Una matriu no és una línia d’ordres d’intèrpret, així que les canonades i les redireccions no hi funcionen, i les cometes es comporten diferent. Una ordre que funciona al terminal d’un administrador és, com a màxim, una comprovació preliminar.

Les credencials han de funcionar sense cap sol·licitud

El funcionament sense supervisió trasllada el problema de les credencials en lloc d’eliminar-lo. Algú ha de ser el propietari de la identitat, decidir quant temps viu i documentar com es substitueix. Un certificat sense seguiment de caducitat es converteix en una interrupció amb una data al calendari.

Manteniu els secrets fora dels arguments i de la sortida estàndard de la tasca. Si el client admet llegir una credencial d’un magatzem protegit, feu servir aquest camí i comproveu que el context d’execució de la tasca hi pot arribar. Un dimoni que s’executa com a root normalment no pot llegir un element del clauer d’inici de sessió, i aquest és el detall que només apareix en el context del sistema.

Definiu què vol dir estar a punt i proveu-ho allà

Un arrencada correcta demostra que el procés ha començat. No demostra que la xarxa estigui activa, que la passarel·la hagi acceptat la identitat ni que l’aplicació privada sigui accessible. Si alguna altra cosa depèn del túnel, necessita un senyal de preparació que reflecteixi la connexió, no l’hora d’inici de la tasca.

Els reintents haurien de ser limitats i distingir una xarxa absent d’una credencial rebutjada. Reiniciar a cada fallada no pot reparar un certificat caducat i produeix un registre ple d’intents idèntics que amaga el real.

Accepteu la tasca en el context en què realment s’executarà: sense xarxa a l’arrencada, amb un inici de sessió normal, amb un despertar de la suspensió i amb una aturada controlada. Després enregistreu l’etiqueta de la tasca, la versió del client i la revisió del perfil juntes, perquè la persona següent hereti un servei atribuïble en lloc d’un fitxer que va funcionar una vegada.

Articles relacionats