Restringir os inícios de sessão do OpenVPN a um grupo com uma política PAM
Um serviço PAM dedicado pode admitir apenas membros de um grupo de VPN sem tocar nas regras de início de sessão do sistema. Aponte o plugin auth-pam para ele e teste os resultados.
Mantenha cada conta capaz de iniciar sessão normalmente, mas permita que apenas um grupo use a VPN. O PAM pode exprimir essa diferença sem um segundo armazenamento de palavras-passe, e o plugin OpenVPN pode ser apontado para um serviço que contenha apenas as verificações pretendidas. O truque é construir esse serviço sem herdar acidentalmente uma pilha de âmbito do sistema.
O percurso aqui começa pelo nome do serviço do plugin, constrói uma política e depois testa os três resultados que importam: um membro, um externo com uma palavra-passe válida e uma credencial inválida.
Porquê um serviço PAM separado
O plugin auth-pam recebe um nome de serviço como argumento. Esse nome seleciona um ficheiro em /etc/pam.d, e a pilha desse ficheiro é o que corre durante um início de sessão VPN. Se passar o mesmo nome que um início de sessão do sistema usa, herda cada decisão dessa pilha, incluindo as que foram adicionadas mais tarde por motivos não relacionados.
Crie antes um serviço dedicado. Comece por uma pilha funcional que já autentique contra o backend pretendido, como um ficheiro de palavras-passe local, SSSD ou um serviço de diretório, e depois acrescente a regra de elegibilidade. Copiar duas linhas para um ficheiro vazio é o erro comum: a expiração da palavra-passe, o bloqueio da conta e outras verificações podem estar na pilha que não copiou.
Separar o serviço também limita o alcance dos danos. Uma regra só para VPN numa pilha partilhada pode negar o acesso SSH ou de consola a todos, o que transforma uma alteração de acesso numa paragem.
Escrever a regra do grupo
A verificação de elegibilidade pertence à fase de conta, depois de a credencial ser verificada. Uma regra como account required pam_succeed_if.so user ingroup vpnusers permite que o processamento continue apenas quando o utilizador autenticado é membro desse grupo.
Essa linha é um fragmento, não um serviço completo. Integre-a onde cada caminho aceite a alcança e verifique os indicadores de controlo em torno dela. Um controlo sufficient ou um salto mais acima na pilha pode terminar o processamento antes de a sua regra correr, o que transforma a restrição numa sugestão.
Não acrescente use_uid por hábito. Sem ele, o módulo avalia o utilizador a ser autenticado; com ele, o módulo avalia a conta sob a qual corre o processo OpenVPN, que é normalmente root ou uma conta de serviço e, portanto, não a pessoa que inicia sessão.
A pertença ao grupo vem da resolução de identidades do sistema, não de um nome que reconheça. Para utilizadores de diretório, confirme que o mesmo backend responde a consultas de grupo para esse utilizador, porque um grupo local com um nome familiar é um objeto diferente do grupo de diretório com o mesmo nome.
Armadilhas de ordem e identidade
Coloque a regra do grupo depois da pilha de autenticação e de qualquer verificação que ainda deva aplicar-se, mas antes ou ao lado das verificações de conta que mantiver. O PAM avalia os módulos pela ordem do ficheiro, e o valor de controlo de cada linha decide se uma falha é definitiva.
Atenção às pilhas duplicadas. Um padrão comum é uma inclusão que já contém uma regra de conta, seguida da sua própria regra de grupo, o que produz duas decisões onde esperava uma. Leia o ficheiro incluído, não apenas o que editou. Uma forma rápida de ver a ordem efetiva é ler o ficheiro de cima para baixo e anotar cada valor de controlo.
Mantenha intactos os outros requisitos de admissão. Uma palavra-passe correta não substitui as verificações de certificado, um segundo fator ou a autorização após a ligação, e esta política não substitui nenhuma delas. Apenas decide se a conta é elegível para ser considerada para acesso VPN.
Testar membros, externos e palavras-passe erradas
Teste três casos antes de considerar a política concluída. Um membro liga-se com sucesso. Uma conta válida fora do grupo autentica a sua palavra-passe, mas é-lhe negado o acesso VPN. Uma palavra-passe errada para qualquer das contas é rejeitada na fase de autenticação, não pela regra do grupo.
Veja o erro visível para o cliente e o registo do servidor em conjunto, porque ambas as falhas podem parecer semelhantes à pessoa que se liga. A distinção importa para o suporte: um externo com a palavra-passe correta precisa de uma alteração de grupo, enquanto uma palavra-passe errada exige uma reposição da credencial.
Mantenha uma segunda sessão aberta enquanto edita o PAM, e verifique também o início de sessão SSH normal após a alteração. O objetivo do serviço dedicado é que o início de sessão do sistema fique intacto, e a única forma de o saber é testá-lo.
Se algo se partir, restaure o ficheiro de serviço anterior a partir de uma cópia. A regra que pretende é simples de enunciar: a pertença torna uma conta elegível para acesso VPN, e todas as outras verificações obrigatórias continuam a aplicar-se.