Impedir que o NetworkManager mostre uma palavra-passe VPN guardada
Peça-a sempre, entregue-a a um chaveiro ou mantenha um ficheiro só para root. Cada escolha implica uma exposição diferente, e o indicador da palavra-passe deve corresponder-lhe.
O NetworkManager pode guardar uma palavra-passe VPN para que a ligação suba sem que ninguém a escreva, e pode voltar a mostrar esse valor no editor ou através de nmcli --show-secrets. Existem três modelos de propriedade, e o comportamento de apresentação é apenas um sintoma do que escolheu. Escolha primeiro o modelo e depois defina o indicador que lhe corresponde, em vez de esconder um campo com um texto de substituição que confundirá a pessoa seguinte.
Três modelos de propriedade
O primeiro modelo pergunta sempre. Nada é guardado, o segredo existe apenas durante a ativação, e quem inicia a ligação tem de saber a palavra-passe. É a opção menos cómoda e a mais fácil de defender.
O segundo entrega o segredo a um chaveiro propriedade do utilizador. O agente desbloqueia quando a sessão começa e fornece o valor a pedido, o que o mantém fora do ficheiro de ligação mas liga a ligação à sessão desse utilizador. Daí decorrem duas condições: o agente tem de estar a correr e tem de estar desbloqueado.
O terceiro guarda uma credencial protegida para uma ligação de sistema. Sobrevive aos reinícios e funciona antes de alguém iniciar sessão, e em troca o valor fica no disco protegido por permissões de ficheiro e não por cifragem.
Cada modelo é razoável no contexto certo. O erro é misturá-los, e é assim que um portátil acaba com um segredo em dois locais e sem uma resposta clara sobre qual é o autoritativo. Anote que modelo um perfil utiliza. Uma linha no manual da equipa poupa a pessoa seguinte de inventar um quarto local onde procurar.
Leia o estado atual antes de o alterar
Olhe para o perfil e para o estado do segredo como o utilizador que gere a ligação. O segundo comando é o que lhe diz se o valor é realmente legível.
nmcli connection show "Office VPN"
nmcli --show-secrets connection show "Office VPN"
sudo stat -c '%U %a %n' /etc/NetworkManager/system-connections/*.nmconnection
Um ficheiro de chave nesse diretório pertence normalmente ao root com modo 600. Isso mantém os utilizadores comuns de fora e não mantém o root de fora, o que importa quando a mesma máquina é partilhada ou quando uma cópia de segurança corre como root.
As permissões de ficheiro são uma fronteira, não cifragem. Quem puder ler o ficheiro como root tem a palavra-passe em texto simples. É uma troca aceitável para um servidor sem supervisão e má para uma estação de trabalho partilhada. Escrevê-lo uma vez evita uma longa discussão sobre se o valor está protegido.
O que faz cada valor do indicador
O segredo VPN tem uma propriedade flags, e os valores não são intuitivos apenas a partir dos números.
| Value | Meaning | Practical effect |
|---|---|---|
| 0 | No special flag | Secret is typically saved with the connection |
| 1 | Agent-owned | A keyring or secret agent supplies it |
| 2 | Not saved | Prompted at each activation |
| 4 | Not required | Connection proceeds without asking |
O comportamento efetivo também depende do plugin e de haver ou não um agente a correr, por isso trate a tabela como o contrato e o comportamento observado como aquilo que verifica. Um valor que funciona num ambiente de trabalho pode comportar-se de forma diferente num servidor sem sessão. É nessa lacuna que vive a maioria dos pedidos confusos.
Defina a propriedade explicitamente em vez de apagar uma linha e esperar. Um indicador ausente não é uma política, e a próxima atualização do pacote pode preenchê-lo com algo que não pretendia.
Faça corresponder o modelo ao momento em que a ligação arranca
Se a ligação só arranca enquanto um utilizador tem sessão iniciada, a propriedade pelo agente encaixa bem e mantém o segredo fora do ficheiro. Se arranca no arranque, antes de existir qualquer sessão, um agente não o pode ajudar.
É toda a decisão para a maioria das máquinas. Também explica uma classe de relatórios confusos em que a ligação funciona de forma interativa e falha após um reinício. O indicador nunca mudou; o contexto mudou.
Para o caso sem supervisão, a resposta prática é um ficheiro restrito propriedade do root ou uma fonte de credenciais aprovada. Mantenha-o fora do perfil de ligação se esse perfil alguma vez for exportado ou copiado para outra máquina.
Se o valor já era visível, troque-o
Alterar um indicador deixa a palavra-passe intacta. Um valor que apareceu numa captura de ecrã, no histórico do shell, num pacote enviado para o suporte ou num ficheiro que outros utilizadores podiam abrir deve ser considerado divulgado.
Altere-a no servidor, corrija depois o cliente e termine qualquer sessão que tenha autenticado com a antiga. Apagar a ligação local não revoga nada do outro lado, e é essa a parte que as pessoas esquecem.
Depois deixe de colocar a palavra-passe na linha de comandos. Acaba no histórico do shell e pode aparecer numa lista de processos; use o pedido interativo ou o agente.
Verifique ao voltar a ligar
Repita o comando que mostrou o segredo e confirme que o campo já não é impresso. Depois desligue e volte a ligar, e reinicie se a ligação arranca automaticamente, porque a falha interessante só aparece quando o contexto da sessão muda.
Se o segredo continuar a aparecer, é outro perfil ou outro agente que o fornece. Inspecione a ligação ativa e o chaveiro em vez de apagar ficheiros até o sintoma se deslocar.