Como permitir que um daemon solicite uma senha (no Xsession, keyloggersafe)?

2

Exposição:

  • Trabalhando dentro de uma XSession.
  • Algum (background) deamon precisa me solicitar uma entrada de senha.

Como posso fazer o daemon solicitar uma senha usando um pop-up na Xsession?

O daemon normalmente não tem ligação com a sessão X, o que dificulta a criação de uma janela popup de senha.

Algumas ideias para respostas:

  • um programa pequeno que executou (fork / child from) o daemon que torna uma janela popup com prompt X melhor. quanto menor, melhor:)
  • segurança em primeiro lugar Mesmo que eu duvide que seja possível, qualquer solução que garanta que, ao digitar a senha, nenhum outro aplicativo em execução nesse X Session possa fazer o keylog é muito apreciado.
por humanityANDpeace 26.10.2014 / 10:20

1 resposta

3

Geralmente, esse tipo de problema é tratado com dois binários autônomos: o daemon do serviço e a interface do usuário que se comunicam por meio de um UNIX soquete de domínio (ou um soquete de rede caso eles não estejam rodando na mesma máquina). Um bom exemplo seria o OpenSSH - verifique como ssh-agent , ssh-add e ssh interagem para ter uma ideia de como isso pode ser feito. Substitua "soquete de domínio UNIX" por " D-Bus " se você quiser ficar na moda ou precisar de alguma funcionalidade extra que você teria que implementar.

Se a solicitação de ação vier do próprio daemon (o que, se eu entendi corretamente) é o seu caso particular, é um pouco mais complicado. A parte da interface do usuário deve ser gerada algumas vezes durante a sessão X, registre-se com o daemon e, quando o daemon decidir que precisa de alguma entrada, ele pede à parte da interface do usuário para fazer suas coisas. As duas últimas frases são onde o D-Bus pode ser útil.

Por outro lado, você deve considerar cuidadosamente se o daemon ativamente solicitando uma senha é o Right Way TM de fazer as coisas - daemons geralmente são serviços que atendem pedidos em vez de gerarem um. Talvez seja melhor deixar a interface do usuário ativamente enviar a senha, quando o usuário decidir que é hora de fazer isso. Não estou dizendo que essa é a única boa abordagem, apenas que ela deve ser considerada em primeiro lugar.

No que diz respeito à segurança, tudo depende de quão paranóico você quer chegar. Com o X, você pode pegar o teclado (consulte a página man XGrabKeyboard(3) ), que deve fornecer um nível razoável de segurança. Ou melhor: se você não usá-lo, você não terá controle sobre a senha. Novamente, o ssh é um bom exemplo: dê uma olhada no x11-ssh-askpass helper. Sua página inicial parece não funcionar mais, mas você pode encontrar as fontes em muitos lugares, por exemplo, no openSUSE BuildService .

Você pode até mesmo usá-lo diretamente, já que tudo o que ele faz é pegar o teclado e enviar a senha digitada em sua saída padrão, então tudo que você precisa é gerar o auxiliar askpass e verificar seu stdout . Se bem me lembro, readpass.c no OpenSSH deve lhe dar uma idéia de como fazê-lo .

Embora tudo isso pareça um pouco complicado e longe de ser seguro, há várias coisas a serem consideradas:

  1. vários projetos normalmente considerados razoavelmente seguros, como o OpenSSH e o GPG, usam essa abordagem.

  2. A segurança é difícil. Desenhar as próprias soluções de segurança geralmente acaba com problemas (ou desastres) de uma forma ou de outra (também pode se tornar o empreendimento usual: "Eu tenho essa coisa legal" - "Uau, vamos fazer disso uma nova ferramenta da empresa "- 5 anos depois:" É completamente inextensível / quebrada / insegura / ... - como alguém poderia fazer disso uma solução para toda a empresa?! "Substitua a" solução para toda a empresa "por" nossos produto principal "para horas de riso). Veja também o link canonical Security SE Q & As: link e link .

  3. O uso do teclado não diz nada sobre qualquer outro aplicativo que não espione os eventos do teclado em algum ponto mais profundo da pilha (por exemplo, na camada de aplicativo X). Mas, novamente, tal aplicativo provavelmente exigiria algum tipo de acesso root, portanto, se você tivesse algo parecido no sistema, poderia também colocar as senhas em um arquivo de texto simples chamado passwords.txt em seu diretório inicial).

por 26.10.2014 / 11:16