Deve abandonar o chroot ou copiar o iproute2 para a jaula?
Uma jaula incompleta falha depois do arranque, não no boot. Escolha entre aliviar o endurecimento e copiar os binários e as bibliotecas para a nova raiz.
O serviço arranca, um cliente associa-se e nunca aparece uma rota do lado do servidor. Ou o daemon recusa arrancar e nomeia um comando que não conseguiu executar. Ambos os desfechos seguem as mesmas três linhas, que costumam ser copiadas juntas de um guia de endurecimento: mudar para uma conta sem privilégios, largar o grupo e alterar a raiz do sistema de ficheiros. Apenas uma das três esconde ficheiros, e apenas uma delas retira o privilégio de alterar a tabela de rotas. Separá-las é como aprende qual linha quer realmente.
O que a jaula retira e o daemon ainda precisa
A mudança de raiz acontece depois do arranque, por isso o daemon mantém tudo o que já abriu e perde tudo o que abriria mais tarde. Qualquer auxiliar que a ligação execute a partir desse ponto tem de existir dentro da nova raiz, com as bibliotecas partilhadas que carrega. Uma jaula construída a partir de um ficheiro de configuração e de um certificado não tem nenhuma das duas coisas.
Mudar para uma conta sem privilégios é uma restrição separada. Um processo que abdicou de root pode não conseguir alterar rotas ou levantar uma interface mesmo quando o binário está ali ao lado, por isso as duas falhas têm de ser diagnosticadas em separado.
Três condições decidem qual correção precisa
A primeira condição é como a sua compilação instala rotas. As versões recentes do OpenVPN configuram a interface e a tabela de rotas no próprio processo, enquanto os pacotes mais antigos e as configurações próprias dependem de ferramentas externas ou de scripts up e down. Se o registo nomear um comando, há uma ferramenta externa envolvida e a jaula está a escondê-la. Se o registo mostrar antes um erro de permissões, o problema é a conta.
A segunda é a manutenção. Uma jaula com binários copiados tem de ser atualizada sempre que o pacote que os fornece é atualizado, senão a primeira atualização deixa um túnel quebrado atrás. A terceira é se um controlo específico exige mesmo um chroot; se o requisito for na realidade sobre separação de privilégios, a mudança de conta pode bastar sozinha.
| Signal in the log | Other side of the boundary | Repair direction |
|---|---|---|
| Command not found after startup | Binary and its libraries absent inside the new root | Populate the jail, or drop the chroot line |
| Operation not permitted | Account lost the privilege to edit routes | Keep the account privileged, or pre-create routes elsewhere |
| No such device | Jail lacks the tun device node | Create the node inside, or open it before the root change |
O que uma jaula funcional tem de conter
Uma jaula que executa comandos precisa do binário, de cada biblioteca contra a qual liga e de qualquer nó de dispositivo que o daemon abra tarde. Copie as peças e teste-as sem a VPN no cenário:
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 lista as dependências, e é aquele de que as pessoas saltam. Um binário copiado que não encontra uma biblioteca falha com uma mensagem diferente de um binário em falta, e ambos parecem uma falha do OpenVPN quando lidos do lado do cliente. Executar o comando à mão dentro da jaula reproduz a falha sem reiniciar o serviço.
Copie também a configuração, os certificados e qualquer CRL para dentro da jaula, porque um ficheiro que o daemon espera reler depois do arranque não será encontrado depois de a raiz mudar. Registe o que copiou, pois a próxima atualização do pacote de rede substitui os originais e deixa a jaula na cópia antiga.
Encolher o endurecimento em vez disso
Se a jaula existe só porque um guia o dizia, remover essa única linha e manter as restrições de conta é um desfecho defensável. O daemon mantém a sua vista do sistema de ficheiros e perde o problema, e a descida de privilégios continua a retirar root ao processo de longa duração.
Anote o que resta, e porquê. Uma configuração que perdeu um controlo em silêncio sem uma nota é como o endurecimento deriva, e a próxima auditoria perguntará porque é que a linha desapareceu.
Bisseccione as três linhas antes de escolher
Copie a configuração, desative as três diretivas e confirme que um cliente liga e que as rotas esperadas aparecem. Reative depois apenas as linhas de conta, e por fim o chroot sozinho. O passo em que o túnel quebra identifica a fronteira, e evita reconstruir uma jaula que nunca foi a causa.
Quando voltar a encaminhar, execute uma sessão de cliente com maior verbosidade e leia a linha que nomeia o comando ou a permissão que falhou. Essa linha vale mais do que o tempo limite que o cliente acaba por reportar.