Como localizo e elimino processos remotos no Linux?

1

Estou desenvolvendo um daemon que está agindo e agora não consigo criar novos processos (ou seja, não consigo iniciar um novo processo para eliminar os outros processos invasores). Então, eu preciso ser capaz de matar os processos de uma máquina remota. Como faço para "matar" remotamente sem privilégios de administrador? Se eu não puder matar meu próprio processo a partir de uma máquina remota como um usuário normal, então me diga para que eu possa marcá-lo como a resposta correta.

    
por stephenmm 28.10.2010 / 19:47

3 respostas

7

Para matar um processo rodando em uma máquina, algum processo local (ou o kernel) tem que emitir o sinal de morte. Portanto, você precisa de uma maneira de fazer com que um processo emita esse sinal e, como não é possível criar um novo processo, é necessário encontrar uma forma que dependa exclusivamente de processos já em execução.

Não há daemon padrão que possa ajudá-lo. Todos eles processariam sua autenticação e, em seguida, bifurcariam um novo processo (como um shell) sendo executado como você. Então, se você não tem acesso ao console e não tem nenhuma interação com a máquina, você está sem sorte.

Dos seus comentários, parece que você ainda tem um shell na máquina. Então há coisas que você pode fazer. Você não pode executar nenhum processo externo, como ls ou ps . Mas você pode executar comandos internos, como echo , read e kill ( kill não é interno em todos os shells, mas é um em todos os shells que suportam controle de tarefa, como bash e zsh).

Cada processo tem um diretório associado em /proc : /proc/12345 , em que 12345 é o ID do processo. Assim, você pode obter algumas informações sobre a exploração explorando /proc . echo com curingas é útil aqui, por exemplo cd /proc; echo [0-9]* mostra os ids do processo de todos os processos em execução. Se o shell é zsh, você pode fazer muito com qualificadores glob; por exemplo, echo /proc/*(u$UID) mostra apenas os processos em execução sob seu ID de usuário.

Uma maneira de exibir o conteúdo de um arquivo sem bifurcar é

while read -r line; do
  echo "$line"
done </path/to/file

Você pode matar muitos processos de uma só vez passando todos eles para kill . Se você identificou um processo que pertence ao seu daemon, tente eliminar seu grupo de processos com kill -9 -PGID , em que PGID é o ID do processo do líder do grupo. Você pode encontrar o ID do processo do processo 123 com </proc/123/stat read pid tcomm state ppid pgrp sid more; echo $pgrp . (A mesma informação existe em uma forma mais legível em /proc/123/ , mas você não está em condições de lê-la.) Você também pode tentar enviar um sinal para todos os seus processos (incluindo o shell de origem) com

trap : NUM
kill -NUM -1

Escolha valores de NUM diferente de KILL (9) para que o comando trap faça com que seu shell ignore o sinal ( KILL não pode ser interceptado).

    
por 29.10.2010 / 01:39
2

As seguintes informações foram encontradas em link

Matar processo usando o comando kill no Linux / UNIX

O comando

kill funciona sob sistemas operacionais Linux e UNIX / BSD.

etapa 1: primeiro, você precisa descobrir o processo PID (id do processo)

Use o comando ps ou o comando pidof para descobrir o ID do processo (PID). Sintaxe: ps aux | grep processname pidof processname

Por exemplo, se o nome do processo for lighttpd, você poderá usar qualquer um dos seguintes comandos para obter o ID do processo:

ps aux | grep lighttpdOutput

lighttpd  3486  0.0  0.1   4248  1432 ?        S    Jul31   0:00 /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf
lighttpd  3492  0.0  0.5  13752  3936 ?        Ss   Jul31   0:00 /usr/bin/php5-cg

OU use o comando pidof que é usado para encontrar o ID do processo de um programa em execução:

pidof lighttpd

Resultado

3486

Etapa 2: mate o processo usando o PID (id do processo)

O comando acima informa o PID (3486) do processo lighttpd. Agora mate o processo usando este PID:

# kill 3486

OR

# kill -9 3486

Onde, -9 é um sinal especial de Kill, que matará o processo.

exemplos de comandos killall

NÃO USE o comando killall no sistema UNIX (comando somente Linux). Você também pode usar o comando killall. O comando killall mata processos pelo nome (não é necessário encontrar o PID):

# killall -9 lighttpd

Matar o processo do Firefox:

# killall -9 firefox-bin

Como eu disse anteriormente, killall no sistema UNIX faz outra coisa. Ele mata todo o processo e não apenas o processo específico. Não use killall no sistema UNIX (use kill -9).

    
por 28.10.2010 / 20:30
1

Como você disse em seu comentário, um administrador é a única pessoa que pode ajudá-lo neste momento. Sugiro que você obtenha o livro de receitas Perl e leia a seção 16.19 para o método correto de lidar com zumbis.

    
por 28.10.2010 / 23:26