Estou trabalhando em um aplicativo gerenciador de senhas e, por razões de segurança, desejo iniciar um processo inabalável.
Além disso, não quero que este programa seja um daemon, pois preciso ler da entrada padrão e escrever nele.
Existe uma maneira de fazer isso?
Respostas:
Faça o gerenciador de senhas prazo sob um usuário e pega separada / ignore / sinais gerados pelo bloco de terminais (
SIGINT
,SIGQUIT
,SIGHUP
,SIGTSTP
,SIGTTIN
, eSIGTTOU
).Você não pode enviar sinais para processos (= kill) executados sob um usuário diferente (usuário cujo uid real e uid definido como salvo são diferentes do uid efetivo), a menos que seu ID efetivo seja 0 (root).
Todos os processos ainda serão executáveis pela raiz.
Para mais detalhes, consulte kill (2) .
fonte
A única maneira de tornar um processo inábil é implementá-lo como um thread do kernel , o que não é algo trivial.
Você ainda pode matá-lo, mas isso seria um dano colateral ao desligamento do SO.
Você também pode desenvolver um módulo de kernel personalizado que definiria o
SIGNAL_UNKILLABLE
sinalizador para o seu processo. Esse sinalizador foi projetado para ser definido apenas parainit
(ousystemd
qualquer processo inicial que o kernel inicie), que são os únicos processos da terra do usuário protegidos contra uma interrupção incondicional, mas nada parece proibir que esse sinalizador esteja presente em um processo regular.fonte
Tecnicamente, não há como tornar um processo inviável.
Obviamente, para usuários não raiz, eles podem matar apenas processos com o mesmo ID de usuário, portanto, se você puder criar contas diferentes, poderá usar um ID de usuário "exclusivo" para o processo e somente o root poderá matá-lo.
Uma solução simples, mas menos robusta, é fazer com que seu processo capte o máximo de sinais possível (talvez ignorando-os). Isso é adequado apenas 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.
Finalmente, você pode fazer com que seu processo reapareça se for morto. Isso também é frágil (muito frágil), mas tornará um pouco mais difícil a eliminação. Isso pode ser feito usando um processo de monitor próprio ou usando o inittab. Para um adversário que sabe o que está fazendo, isso pode ser facilmente contornado, matando vários processos ao mesmo tempo.
fonte
inittab
) é possível que o processo do monitor também possa ser eliminado, não?