Estou tentando encontrar uma maneira de armazenar dados com segurança durante uma sessão - especificamente para senhas em uma caixa de salto - para que o usuário só precise inserir a senha para um determinado destino uma vez em sua sessão de caixa de salto. Idealmente, eu gostaria de ocultar os dados até mesmo da raiz.
Embora eu confie nas pessoas com acesso root, não confio necessariamente em todos os programas executados como root - por exemplo, backups que podem expor os dados.
O SELinux não funciona - as políticas disponíveis no RHEL precisariam de muito trabalho, não é portátil e, é claro, o SELinux é péssimo .
A criptografia não funcionará - então preciso descobrir onde armazenar a chave.
Executando um daemon e colocando os dados lá / autenticando usando passagem de credencial de soquete, no entanto, há algum esforço na implementação disso e gostaria de ter certeza de que os dados foram limpos no final da sessão (que nem sempre termina corretamente ).
Usar O_TMPFILE para criar um arquivo sem nome parece resolver muitos problemas de preenchimento dos dados e limpeza no final da sessão. Mas como outro processo pode obter acesso aos dados? Suponho que a resposta seria fazer com que o processo proprietário também abrisse um soquete de escuta e manuseasse as solicitações dessa maneira - mas existe uma solução mais fácil?
Devo repensar isso completamente?
Você pode usar o chaveiro do kernel (e, em particular, o
keyctl
comando) para armazenar seus dados de forma segura.O chaveiro do kernel tem granularidade suficiente para armazenar as chaves que estão disponíveis para um usuário específico ou mesmo para uma sessão específica (portanto, se você estiver conectado usando SSH e no console, ou usando SSH de duas máquinas diferentes, as sessões serão separadas de uns aos outros.)
Um exemplo de uso de amostra é:
O kernel armazenou uma chave chamada "mypassword", com valor "supersecret", apenas na sessão (
@s
, considere também@u
para o chaveiro do usuário.)Você pode usar o
padd
comando para ler do stdin:Então, quando você precisar recuperá-lo:
Se você quiser procurá-lo a partir de sua descrição ("mypassword"), você pode usar o
search
comando para fazer isso:(E então use o ID da chave para imprimi-lo usando
keyctl print
.)Há muito mais que o chaveiro pode fazer... Se você quiser usá-lo, talvez comece lendo a página de manual do keyctl, que pode lhe dar uma boa idéia de quais operações são suportadas e qual chaveiro usar.