Eu sei que posso visualizar os arquivos abertos de um processo usando lsof
naquele momento na minha máquina Linux. No entanto, um processo pode abrir, alterar e fechar um arquivo tão rapidamente que não poderei vê-lo ao monitorá-lo usando scripts de shell padrão (por exemplo, watch
como explicado em "monitorar arquivos de processos abertos no linux (tempo real)" .
Então, acho que estou procurando uma maneira simples de auditar um processo e ver o que ele fez ao longo do tempo. Seria ótimo se também fosse possível ver quais conexões de rede (tentou) fazer e iniciar a auditoria antes que o processo tivesse tempo de executar sem que a auditoria fosse iniciada.
Idealmente, eu gostaria de fazer isso:
sh $ audit-lsof /path/to/executable
4530.848254 OPEN read /etc/myconfig
4530.848260 OPEN write /var/log/mylog.log
4540.345986 OPEN read /home/gert/.ssh/id_rsa <-- suspicious
4540.650345 OPEN socket TCP ::1:34895 -> 1.2.3.4:80 |
[...]
4541.023485 CLOSE /home/gert/.ssh/id_rsa <-- would have missed
4541.023485 CLOSE socket TCP ::1:34895 -> 1.2.3.4:80 | this when polling
Isso seria possível usando strace
alguns sinalizadores para não ver todas as chamadas do sistema?
fonte
Respostas:
Executando com
provavelmente seria suficiente.
Você precisará usar a
-o
opção para colocar a saída do strace em outro lugar que não o console, se o processo puder ser impresso em stderr. Se o seu processo bifurcar, você também precisará de-f
ou-ff
.Ah, e você pode querer
-t
também, para poder ver quando as chamadas aconteceram.Observe que você pode precisar ajustar a lista de chamadas de função, dependendo do que o seu processo faz - eu precisei adicionar,
getdents
por exemplo, para obter uma amostra melhor usandols
:fonte
-o
para enviar a saída para o (s) arquivo (s). Em seguida, você pode executartail -F strace.output
em outro terminal para obter a atualização "ao vivo".strace
a um processo em execução com a-p PID
opção-y
a "[p] caminhos associados aos argumentos do descritor de arquivo"