Finalizar processos raiz

3

Existe uma maneira de encerrar um processo raiz sem digitar a senha do administrador?

Você pode estar se perguntando por que eu gostaria de fazer isso porque parece suspeito. Bem, eu só preciso terminar um processo iniciado por um daemon de um agente, mas os daemons são executados como root e os agentes são específicos do usuário.

    
por Samantha Catania 22.09.2011 / 17:10

2 respostas

1

Os usuários só podem matar ou sinalizar seus próprios processos.

Você diz que o processo é iniciado por um daemon sendo executado como root. Esse processo precisa ser executado como root também? Se isso não acontecer, deixe-o descartando privilégios e executando como o usuário desejado.

Se o processo deve ser executado como root, você terá que fornecer uma maneira para o agente elevar seus privilégios para eliminar o processo. Isso pode assumir a forma de um executável auxiliar de raiz setuid ou uma entrada no arquivo sudoers (com a tag NOPASSWD ). A entrada do sudo tem a vantagem de que seu uso será registrado.

Note que não há uma maneira atômica de enviar um sinal para um processo. O envio de um sinal é assíncrono : é possível que você obtenha o PID de um processo e, em seguida, envie um sinal para esse processo, mas o processo morreu nesse meio tempo e seu ID de processo já foi reutilizado por outro processo .

Existe uma maneira de evitar isso envolvendo o pai do processo que você quer matar, mas é complicado. O ID do processo não desaparecerá até que seu pai reconheça a morte da criança (um processo zumbi permanece até então). Para usar isso efetivamente, você precisa que os pais saibam que devem aguentar até que nenhum agente queira matar a criança.

Se você não estiver preocupado com a condição de corrida, pode conceder ao agente a permissão para executar pkill name_of_process_to_kill , se souber que haverá um único processo com esse nome. Se você puder identificar o processo com um arquivo aberto, use fuser -k /path/to/file .

Se puder, modifique o processo para que ele receba uma solicitação de finalização em um canal ou soquete. Configure as permissões ou autenticação no pipe ou no soquete de acordo com suas necessidades.

    
por 23.09.2011 / 01:09
1

Você deve procurar em sudo .

Você pode configurá-lo para permitir que você digite qualquer comando sem uma senha, ou apenas alguns como kill , ou para pedir sua senha de usuário (não root, sua) em todos os comandos, etc. É muito flexível. / p>

Pode já estar instalado e configurado no seu sistema. Esse é o caso do Ubuntu e do OS X, por exemplo. Caso contrário, está disponível para a maioria dos sistemas Unixy.

    
por 22.09.2011 / 17:20