O servizo arrinca, un cliente asóciase e nunca aparece unha ruta no lado do servidor. Ou o daemon négase a arrincar e nomea un comando que non puido executar. Ambos os desenlaces seguen as mesmas tres liñas, que adoitan copiarse xuntas dunha guía de endurecemento: pasar a unha conta sen privilexios, deixar o grupo e cambiar a raíz do sistema de ficheiros. Só unha das tres agocha ficheiros, e só unha delas retira o privilexio de cambiar a táboa de rutas. Separaas é como aprendes que liña queres en realidade.

Que retira a gaiola que o daemon aínda necesita

O cambio de raíz ocorre despois do arranque, así que o daemon conserva todo o que xa abriu e perde todo o que abriría despois. Calquera axudante que a conexión execute a partir dese punto ten que existir dentro da nova raíz, xunto coas bibliotecas compartidas que carga. Unha gaiola construída cun ficheiro de configuración e un certificado non ten ningunha das dúas cousas.

Pasar a unha conta sen privilexios é unha restrición aparte. Un proceso que renunciou a root pode ser incapaz de alterar rutas ou de levantar unha interface mesmo cando o binario está xusto alí, así que os dous fallos deben diagnosticarse por separado.

Tres condicións deciden que corrección necesitas

A primeira condición é como instala rutas a túa compilación. As versións recentes de OpenVPN configuran a interface e a táboa de rutas no proceso, mentres que os paquetes antigos e as configuracións propias dependen de ferramentas externas ou de scripts up e down. Se o rexistro nomea un comando, hai unha ferramenta externa de por medio e a gaiola agócha. Se o rexistro mostra en cambio un erro de permisos, o problema é a conta.

A segunda é o mantemento. Unha gaiola con binarios copiados hai que refrescala cada vez que se actualiza o paquete que os fornece, ou a primeira actualización deixa un túnel roto detrás. A terceira é se un control concreto esixe de verdade un chroot; se o requisito vai en realidade sobre a separación de privilexios, o cambio de conta pode abondar por si só.

Signal in the logOther side of the boundaryRepair direction
Command not found after startupBinary and its libraries absent inside the new rootPopulate the jail, or drop the chroot line
Operation not permittedAccount lost the privilege to edit routesKeep the account privileged, or pre-create routes elsewhere
No such deviceJail lacks the tun device nodeCreate the node inside, or open it before the root change

Que debe conter unha gaiola que funcione

Unha gaiola que executa comandos necesita o binario, cada biblioteca coa que liga e calquera nodo de dispositivo que o daemon abra tarde. Copia as pezas e probas sen a VPN na imaxe:

ldd /usr/sbin/ip
chroot /etc/openvpn/jail /sbin/ip route show
chroot /etc/openvpn/jail /sbin/ip link set tun0 up

O primeiro comando enumera as dependencias, e é o que a xente salta. Un binario copiado que non atopa unha biblioteca falla cunha mensaxe distinta á dun binario ausente, e ambos parecen un fallo de OpenVPN cando se len desde o lado do cliente. Executar o comando á man dentro da gaiola reproduce o fallo sen reiniciar o servizo.

Copia tamén a configuración, os certificados e calquera CRL dentro da gaiola, porque un ficheiro que o daemon espera reler despois do arranque non se atopará unha vez cambiada a raíz. Anota o que copiaches, xa que a seguinte actualización do paquete de rede substitúe os orixinais e deixa a gaiola na copia antiga.

Encoler o endurecemento no seu lugar

Se a gaiola existe só porque o dicía unha guía, quitar esa única liña e conservar as restricións de conta é un desenlace defendible. O daemon conserva a súa vista do sistema de ficheiros e perde o problema, e a baixada de privilexios segue quitando root do proceso de longa vida.

Apunta o que queda, e por que. Unha configuración que perdeu un control en silencio sen unha nota é como deriva o endurecemento, e a próxima auditoría preguntará por que desapareceu a liña.

Biseca as tres liñas antes de elixir

Copia a configuración, desactiva as tres directivas e confirma que un cliente se conecta e que aparecen as rutas esperadas. Reactiva despois só as liñas de conta, logo o chroot só. O paso onde o túnel rompe identifica a fronteira, e evitas reconstruír unha gaiola que nunca foi a causa.

Cando volva encamiñar, executa unha sesión de cliente con maior verbosidade e le a liña que nomea o comando ou o permiso que fallou. Esa liña vale máis que o tempo de espera que o cliente acaba informando.

Artigos relacionados