Niveis de script-security de OpenVPN do 0 ao 3, e que desbloquea cada un
Cada nivel de script-security amplía que pode executar un perfil: primeiro os axudantes de administración, despois os scripts de usuario e por último os contrasinais na contorna. Le as directivas.
Importa un perfil nun cliente de escritorio e o primeiro fallo adoita ser unha liña que o cliente se nega a cumprir: un hook de script que non executará, ou un valor de script-security que considera demasiado permisivo. Subir o número fai desaparecer o diálogo. Tamén amplía que pode executar ese perfil na túa máquina, que é algo estraño de conceder só para pechar un aviso. Segue a importación ata a directiva e a decisión vólvese concreta.
Do diálogo de importación á directiva
O perfil é un ficheiro de texto con directivas, e o cliente léas antes de que exista ningún túnel. Unha directiva como up, down ou tls-verify nomea un programa externo que OpenVPN debe executar nun momento definido. Se OpenVPN está disposto a executalo é un axuste aparte chamado script-security, e o perfil normalmente tamén o fixa.
Así que o aviso non trata de criptografía nin de certificados. Trata dun ficheiro de configuración que lle pide ao cliente executar algo no host, e do cliente comprobando se o seu nivel de permisos actual permite esa petición.
Dous fallos distintos parecen iguais nesta etapa. Un perfil que pide un nivel que o cliente non concederá produce un rexeitamento. Un perfil que pide un nivel que o cliente concede pero falta o script produce un fallo en tempo de execución, e os dous confúndense nos fíos de soporte. Un é unha cuestión de permisos e o outro unha cuestión de empaquetado.
Que abre realmente cada nivel
O nivel 0 prohibe por completo as chamadas a programas externos, o que é coherente para un cliente que configura a súa propia interface sen axuda e incoherente para un que recorre ao sistema operativo. O nivel 1, o predeterminado, permite os executables integrados que necesitan a configuración de interface e de rutas. Ningún dos dous executa nada que teña aportado o usuario.
| Level | What OpenVPN may execute | What it exposes |
|---|---|---|
| 0 | No external programs at all | Interface and route setup must not depend on helpers |
| 1 (default) | Built-in helpers such as ip, ifconfig, route or netsh | Privileged commands the platform already ships |
| 2 | Built-in helpers plus user-defined scripts | Whatever the named script does with the client's privileges |
| 3 | Everything above, plus passwords in environment variables | Credentials visible to child processes and their logs |
O nivel 2 é a fronteira interesante, porque admite scripts definidos polo usuario. A partir dese punto os privilexios do cliente aplícanse a código que quizais nunca leses, invocado en momentos que non escolliches, cunha contorna que inclúe detalles da conexión. O nivel 3 vai máis alá e permite pasar contrasinais mediante variables de contorna, por iso o manual o describe como potencialmente inseguro.
Ningún destes números é un axuste de forza. Un perfil no nivel 3 non ten mellor cifrado que un no nivel 1; simplemente ten unha superficie de execución maior, e o túnel é idéntico.
Decide que merece o perfil
Pregunta para que serve o script antes de preguntar que nivel precisa. Un hook que empurra a configuración de DNS ou repara unha ruta tras conectar é un motivo lexítimo para executar algo. Un hook que chama un binario descoñecido nun directorio temporal é un motivo para parar.
A ruta do script importa tanto como o script. Unha ruta relativa resólvese contra o directorio que use o cliente, e un directorio escribible converte unha importación puntual nun punto de execución permanente. As rutas absolutas nun directorio que o usuario non pode modificar son a forma que convén preferir.
Os scripts tamén herdan a contorna do cliente, onde viven as credenciais e os metadatos de conexión. Esa herdanza é xusto o que fai perigoso o nivel 3 combinado cun script que rexistra a súa contorna, e é a razón pola que un volcado de diagnóstico dun cliente con scripts merece unha segunda ollada antes de pegalo nun tícket. Limpa a contorna antes de compartilo.
grep -nE 'script-security|^up |^down |tls-verify' client.ovpnCambia unha cousa e logo observa tamén a desmontaxe
Se o perfil precisa de verdade un script, cambia só o nivel e só para ese perfil. Executa o cliente en primeiro plano con saída detallada para que os erros do propio script sexan visibles en lugar de quedar tragados por un xestor de servizos.
openvpn --config client.ovpn --script-security 2 --verb 3
ip route show default
Proba todo o ciclo de vida, non só a conexión. Un hook de baixada que falla deixa rutas apuntando a un túnel morto, o que produce unha máquina que parece conectada e non chega a nada. Reconecta unha vez e desconecta unha vez antes de dar o cambio por terminado, e revisa a táboa de encamiñamento despois de cada un.
Garda unha copia do perfil orixinal. Se un cliente de plataforma non implementa o mesmo modelo de scripts, borrar directivas ata que a importación funcione pode eliminar a integración de DNS ou de rutas que o túnel necesitaba, e a conexión resultante autenticarase perfectamente mentres non resolve nada.
A decisión que hai que rexistrar é estreita: que script, en que ruta, concedido a que nivel, para que perfil. Todo o demais do perfil queda igual, e iso é unha frase que un revisor pode verificar.