Como faço para controlar todo o sistema?

3

strace permite monitorar a atividade de um determinado programa. Como posso monitorar a atividade de todos os programas (espera para sshd / bash / strace_itself)?

Atualmente estou usando um hack como este:

function ppid() { cat /proc/"$1"/status | grep PPid: | grep -o "[0-9]*"; };
function pidtree() { P=$1; while [ "$P" != "1" ]; do echo $P; P='ppid $P'; done; echo 1; };
strace -fe execve '( pgrep ''; pidtree $$ ) | sort | uniq -u | sed 's/^/-p /''

Nota: usar isso pode congelar seu sistema.

Existe uma maneira melhor de fazer isso?

    
por Vi. 20.07.2012 / 17:17

2 respostas

1

Não é muito viável "rastrear todo o sistema" do userspace. Como indiquei na pergunta anterior que você fez, a melhor maneira é usar uma infraestrutura de rastreamento no modo kernel, como kprobes , systemtap ou dtrace . Você já olhou para algum desses? Existe uma razão pela qual nenhum deles funcionará para o seu caso de uso?

A única maneira de rastrear verdadeiramente todo o sistema a partir do userspace seria iniciar o rastreamento com o processo init ... mas não tenho certeza se init ou systemd ficaria muito feliz com você Eu não me importo com isso, já que ele faz um monte de coisas de muito baixo nível que são bem frágeis e fáceis de quebrar (e é difícil injetar comandos wrapper nisso também, devo acrescentar).

É por isso que os mecanismos de sondagem da mais alta qualidade têm algum tipo de módulo do kernel, porque o kernel "vê tudo". Isso é especialmente relevante, já que você está tentando monitorar a atividade em dispositivos de caracteres, como /dev/console e /dev/tty* , e o kernel tem supervisão direta sobre as chamadas para esses dispositivos, pois eles são implementados no kernelspace.

    
por 20.07.2012 / 17:23
1

A maneira mais simples com o systemtap é algo como:

stap -e 'probe nd_syscall.* { println(execname(), pid(), " ", pn(), argstr) }'

(@ Vi, nenhum trabalho manual do módulo do kernel é necessário; o systemtap faz isso por si mesmo. Entretanto, você precisa dos arquivos de desenvolvimento do módulo do kernel.)

    
por 20.07.2012 / 18:04

Tags