Tornar um processo inutilizável no Linux

12

Estou trabalhando em um aplicativo gerenciador de senhas e, por motivos de segurança, quero iniciar um processo não-faturável.

Além disso, eu não quero que este programa seja um daemon, já que preciso ler a entrada padrão e escrever nela.

Existe uma maneira de fazer isso?

    
por Mohammad Razeghi 04.09.2015 / 13:06

3 respostas

38

Faça o gerenciador de senhas ser executado em um usuário separado. Você não pode enviar sinais para (= matar) processos executados sob um usuário diferente, a menos que você esteja root.

Todos os processos ainda podem ser eliminados pelo root.

Para mais detalhes, veja kill (2) .

    
por 04.09.2015 / 13:14
14

A única maneira de tornar um processo impossível de ser imputado é implementá-lo como um segmento do kernel , o que não é algo trivial.

Você ainda pode matá-lo, mas isso seria um dano colateral de desligamento do sistema operacional.

Você também pode desenvolver um módulo de kernel personalizado que definiria o sinal SIGNAL_UNKILLABLE em seu processo. Esse sinalizador é projetado para ser definido apenas para init (ou systemd , qualquer que seja o processo inicial iniciado pelo kernel) que são os únicos processos de usuário protegidos contra um kill incondicional, mas nada parece proibir esse sinalizador de estar presente em um processo regular .

    
por 04.09.2015 / 18:13
10

Tecnicamente, não há como tornar um processo impossível de matar.

É claro que, para usuários não-root, eles podem apenas matar processos que tenham o mesmo ID de usuário, portanto, se você puder fazer contas diferentes, poderá usar um ID de usuário "exclusivo" para o processo e mate isso.

Uma solução simples, mas menos robusta, é fazer com que o seu processo capture o maior número de sinais possível (talvez ignorando-os). Isso só é adequado para exemplos de brinquedos ou ambientes não adversários, pois não há como capturar o sinal KILL (sinal 9), mas, caso contrário, você pode evitar ser morto por eles.

Por fim, você pode providenciar para que seu processo seja reaberto se for morto. Isso também é frágil (muito frágil), mas dificultará a eliminação. Isso pode ser feito usando um processo de monitor ou usando o inittab. Para um adversário que sabe o que está fazendo, isso pode ser facilmente contornado ao matar vários processos de uma só vez.

    
por 04.09.2015 / 16:55