client-config-dir ignórase despois de que OpenVPN se convertese nun servizo
Un client-config-dir relativo resólvese fronte ao directorio de traballo do demo. Le a unidade, percorre os permisos da ruta e logo confirma a busca no rexistro.
O túnel levanta e o cliente conéctase, pero a dirección fixa e as rutas empurradas que definiches para ese usuario concreto faltan. No rexistro non pon “file not found”, e iso é xusto o que manda á xente rexenerar certificados. Na maioría destes casos o demo execútase desde un directorio distinto da consola na que probaches, e client-config-dir nunca se resolveu como supuñas. O arranxo é corrixir a ruta, non restablecer credenciais.
Le a unidade antes de tocar a configuración
Empeza polo proceso que realmente se executa, non polo ficheiro que editaches. Pregúntalle a systemd pola liña de execución, o directorio de traballo e a conta á que baixa. Esas tres respostas explican a maioría dos fallos desta clase:
systemctl show openvpn-server@server -p ExecStart -p WorkingDirectory -p User -p RootDirectoryUn WorkingDirectory baleiro significa que a unidade arrinca en /, así que un client-config-dir ccd relativo búscase en /ccd. Ese directorio case nunca existe, e o demo non considera fatal a súa ausencia.
Compárao co arranque interactivo que usaches durante as probas, onde o directorio actual da túa consola era probablemente o de configuración. O mesmo ficheiro, as mesmas palabras clave, dous resultados distintos.
Fronte a que se resolve unha ruta relativa
A palabra clave resólvese fronte ao directorio de traballo do proceso no momento en que se usa a opción. Non significa “xunto ao ficheiro de configuración que pasei con --config”. OpenVPN lerá de bo grado unha configuración desde unha ruta absoluta e aínda así resolverá os valores relativos noutro sitio, e esa é exactamente a trampa. O manual de OpenVPN 2.6 expón a regra baixo --client-config-dir e de novo baixo --cd.
A palabra clave cd cambia ese contexto antes de que se lean outros ficheiros, así que unha unidade que define cd /etc/openvpn/server e despois client-config-dir ccd resólvese en /etc/openvpn/server/ccd. Se engades cd, revisa a orde das directivas e lembra que afecta calquera outra referencia relativa do mesmo ficheiro.
Percorre a ruta como a conta do demo
Unha ruta pode ser correcta e aínda así non ser lexible. Tras soltar privilexios o demo xa non é root, así que cada directorio pai necesita permiso de busca para esa conta, e o ficheiro do cliente necesita permiso de lectura. Basta un bit de execución ausente nun pai para ocultar o ficheiro, e o erro só se manifesta como un cliente que recibe en silencio o grupo por defecto.
namei imprime o permiso de cada compoñente en orde, o que é máis rápido que comprobar os directorios un a un:
namei -l /etc/openvpn/server/ccd/client1Logo proba a lectura como a conta do servizo e non como ti mesmo:
runuser -u openvpn -- test -r /etc/openvpn/server/ccd/client1 && echo readableSe a unidade usa chroot, o directorio debe existir dentro da gaiola, e a ruta da configuración interprétase despois de aplicar o chroot. Un ficheiro que está no host fóra da gaiola é invisible desde dentro.
Confirma a busca en lugar de adiviñar
Sube o nivel do rexistro para un reinicio e le o que di o servidor sobre as opcións específicas do cliente. Con verb 4 o demo informa da configuración por cliente que importou, así que unha liña ausente é proba directa de que non se leu ningún ficheiro para esa conexión.
openvpn --config /etc/openvpn/server.conf --verb 4 --client-config-dir /etc/openvpn/server/ccdExecuta iso en primeiro plano nun porto libre e conecta un cliente. Así systemd sae por completo da ecuación: se as substitucións aparecen aquí e non baixo o servizo, a diferenza é o contexto da unidade, non o ficheiro.
Decide que debe pasar cando ningún ficheiro coincide. Sen ccd-exclusive o cliente admítese só cos axustes globais do grupo, e ese é o fallo silencioso descrito arriba. Con ela, un ficheiro ausente convértese nunha conexión rexeitada, e ese rexeitamento é máis fácil de ver pero máis difícil de depurar baixo carga.
Corrixe, reinicia, verifica
Fai o directorio absoluto na configuración e déixao así. As rutas relativas só son seguras cando a unidade fixa o directorio de traballo, e fixalo é unha peza móbil extra que alguén quitará máis adiante.
client-config-dir /etc/openvpn/server/ccd
ccd-exclusiveReinicia a instancia, volve conectar un cliente coñecido e le a dirección que recibiu xunto coas rutas empurradas cara a el. Se a dirección coincide coa liña ifconfig-push do ficheiro dese cliente, a busca funcionou. Se o cliente segue caendo no grupo xeral, volve á conta de liñas do rexistro: cero importacións significa que a ruta ou a identidade son incorrectas, unha importación con contido equivocado significa que estás editando un ficheiro distinto do que le o demo.
Desfai restaurando a unidade e a configuración anteriores xuntas e logo reinicia. Non fai falta reemitir certificados por nada disto, e tratar un problema de directorio como un problema de credenciais é como un arranxo de cinco minutos se converte nunha xanela de mantemento.