VPN de Mac ao arrincar: launchd supervisa a tarefa, non o túnel
Un plist limpo non demostra nada sobre as credenciais nin a preparación. Axuste a tarefa á súa sesión, manteña o cliente en primeiro plano e probe nese contexto.
A tarefa execútase ao iniciar sesión, o rexistro mostra o cliente arrincando e o túnel nunca sobe. Ou sobe e desaparece uns segundos despois. En ambos os casos a lista de propiedades probablemente estaba ben. launchd fixo dúas promesas cando aceptou a tarefa: supervisará un proceso e ese proceso seguirá executándose. A VPN necesita ambas, e un ficheiro XML correcto non ofrece ningunha.
Unha lista de propiedades válida non é un servizo en funcionamento
plutil -lint comproba a estrutura. Non pode dicirlle se o binario existe, se os argumentos son compatibles con esta versión do cliente ou se a tarefa arrinca nun contexto onde as credenciais están dispoñibles. Son preguntas semánticas e explican a maioría dos fallos que parecen problemas de launchd.
plutil -lint /Library/LaunchDaemons/com.example.vpn.plist
launchctl print system/com.example.vpn
Lea a saída do segundo comando en lugar de supor que a tarefa se cargou. Informa do último estado de saída e de se o servizo se executa, o que distingue “nunca arrincou” de “arrincou e morreu” antes de tocar o perfil.
Os axentes herdan unha sesión de usuario, os demos non
A documentación de launchd de Apple separa os axentes por usuario dos demos do sistema. Un axente execútase no contexto do usuario conectado, co seu chaveiro e o seu contorno. Un demo execútase sen esa sesión, e trasladar unha tarefa a un directorio do sistema non recrea as credenciais interactivas do usuario.
Esa distinción decide o deseño. Se a conexión esixe que unha persoa inicie sesión ou aprobe unha solicitude MFA, a disposición admitida é unha tarefa na sesión do usuario que se executa tras o inicio de sesión. Se debe funcionar sen ninguén conectado, o cliente necesita unha identidade aprobada sen supervisión co seu propio proceso de renovación e revogación. Escoller a fila equivocada produce unha tarefa que arrinca limpa e falla no primeiro paso de autenticación.
Non disimule a diferenza cun contrasinal na matriz de argumentos nin desactivando as comprobacións de certificado. Ambas converten un requisito de autenticación nun segredo permanente nun ficheiro lexible, e a segunda significa que o túnel autentica calquera cousa que responda.
A supervisión só funciona se o proceso queda diante
Un cliente que se converte a si mesmo en demo devolve o control a launchd de inmediato, e o supervisor observa entón un proceso que xa saíu. O túnel pode estar arriba, pero launchd cre que a tarefa fallou e a súa política de reinicio fará algo que vostede non pretendía.
Utilice o modo de primeiro plano ou de servizo documentado do cliente. Se o produto ten a súa propia función de arrinque compatible, xa sabe como permanecer en primeiro plano e como ceder o paso á pila de rede; unha tarefa personalizada é un deseño aparte, non unha mellora diso.
Dea á tarefa unha etiqueta única, o executable previsto e unha matriz de argumentos deliberada. Unha matriz non é unha liña de comandos de shell, así que as tubaxes e as redireccións non funcionan alí, e as comiñas compórtanse doutro xeito. Un comando que triunfa no terminal dun administrador é, como moito, unha comprobación preliminar.
As credenciais teñen que funcionar sen petición
O funcionamento sen supervisión traslada o problema das credenciais en vez de eliminalo. Alguén debe posuír a identidade, decidir canto vive e documentar como se substitúe. Un certificado sen seguimento de caducidade convértese nunha interrupción con data no calendario.
Manteña os segredos fóra dos argumentos e da saída estándar da tarefa. Se o cliente admite ler unha credencial dun almacén protexido, use esa vía e comprobe que o contexto de execución da tarefa chega ao almacén. Un demo que se executa como root normalmente non pode ler un elemento do chaveiro de inicio de sesión, e ese é o tipo de detalle que só aparece no contexto do sistema.
Defina que significa estar listo e probeo alí
Un arrinque correcto demostra que o proceso comezou. Non demostra que a rede estea activa, que a pasarela aceptase a identidade nin que a aplicación privada sexa accesible. Se algo máis depende do túnel, necesita un sinal de preparación que reflicta a conexión, non a hora de inicio da tarefa.
Os reintentos deberían ser limitados e distinguir unha rede ausente dunha credencial rexeitada. Reiniciar ante cada fallo non pode reparar un certificado caducado e produce un rexistro cheo de intentos idénticos que oculta o real.
Acepte a tarefa no contexto no que realmente se executará: sen rede ao arrincar, cun inicio de sesión normal, cun espertar do soño e cunha parada controlada. Despois rexistre xuntos a etiqueta da tarefa, a versión do cliente e a revisión do perfil, para que a seguinte persoa herde un servizo atribuíble en lugar dun ficheiro que funcionou unha vez.