Gostaria de obter um log de todos os processos iniciados com o tempo em que foram lançados e os argumentos com os quais foram lançados. Isso é possível no Linux?
55
Seu ponto de partida deve ser auditado.
Tente algo como isto:
apt-get install auditd
auditctl -a task,always
ausearch -i -sc execve
The audit system is disabled
Onde posso ativá-lo?chmod 0750 /sbin/audispd
mas ainda não está funcionando (Debian Wheezy)Unable to set audit pid, exiting
, mas eu acho que o verdadeiro problema será que o sistema está sendo executado no recipiente LXCEu precisava fazer isso, exceto (1) que não precisava do tempo e (2) estava interessado apenas em processos iniciados por um determinado processo e em seus filhos e descendentes subsequentes. Além disso, no ambiente que eu estava usando, não era possível obter
auditd
ouaccton
, mas haviavalgrind
.Prefixe o seguinte ao processo de interesse na linha de comandos:
As informações necessárias estarão na saída do log exibida no STDERR.
fonte
memcheck
ferramenta. Para desativar a ferramenta e sua logging relacionado, e imprimir apenas a criação de novos comandos (além da saída usual de seu programa), use o seguinte comando:valgrind --tool=none --trace-children=yes [command and args here]
. Sempre que um subprocesso é gerado, o Valgrind registra o comando completo, incluindo os argumentos que foram passados para ele.Você pode usar snoopy para isso.
É muito simples de instalar e, desde a versão 2.x, pode registrar dados arbitrários (argumentos, variáveis ambientais, cwd, etc.).
Divulgação: mantenedor do Snoopy aqui.
fonte
Você pode executar o startmon e seguir sua saída padrão, Ctrl-C quando terminar. Veja como compilar e executar o startmon nas recentes distribuições derivadas da Red Hat (RHEL, Fedora, CentOS):
No Debian (e Ubuntu etc), a primeira linha do acima muda para:
Como alternativa, você pode tentar o
execsnoop
script em perf-tools, veja esta resposta . Por padrão, apenas os 8 primeiros argumentos são mostrados (9 incluindo o nome do programa); você pode aumentar isso viaSe você não tem acesso root ao sistema, o melhor que você pode fazer é continuar pesquisando
/proc
e torcer para que ele consiga tudo (o que não acontecerá), mas, para completar, aqui está um script para fazer isso (coloquei remoção duplicada para simplificar a saída) - embora isso não seja tão bom quanto rastreá-los adequadamente com um dos métodos acima, ele tem a pequena vantagem de exibir inequivocamente separadores entre os argumentos da linha de comando, caso você precise informar o diferença entre espaços dentro de um argumento e espaço entre argumentos. Esse script é ineficiente, pois usa a CPU (bem, um de seus núcleos) 100% do tempo.Você também pode corrigir
execsnoop
para dizer mais explicitamente qual argumento é qual:grep -v sub.*arg < execsnoop > n && chmod +x n && mv n execsnoop
fonte
CONFIG_FTRACE
eCONFIG_KPROBES
atravésbrendangregg/perf-tools
Em outro shell:
O primeiro shell mostra dados de formato:
CONFIG_PROC_EVENTS
Sessão de amostra:
CONFIG_PROC_EVENTS
expõe os eventos à terra do usuário por meio de um soquete netlink .proc_events.c adaptado de: https://bewareofgeek.livejournal.com/2945.html
Upsatream do GitHub .
No entanto, acho que não é possível obter dados do processo, como UID e argumentos do processo, porque
exec_proc_event
contém muito poucos dados: https://github.com/torvalds/linux/blob/v4.16/include/uapi/linux/cn_proc .h # L80 Poderíamos tentar lê-lo imediatamente/proc
, mas existe o risco de o processo terminar e outro ter seu PID, para que não seja confiável.Testado no Ubuntu 17.10.
fonte
Além disso, você pode usar o topo para visualizar o uso de recursos por processos. São ferramentas úteis para registrar e analisar o uso de recursos em cada parte do tempo
fonte
Você pode tentar
cat ~/.bash_history
Existesystem log viewer
, isso pode ajudá-lo.fonte
~/.bash_history
aparentemente contém apenas comandos que executei em um terminal. Estou procurando um log de todos os programas executados, por exemplo, quando clico em um ícone para abrir meu cliente de e-mail, gedit, ou abro meu navegador, e meu navegador executa outro processo sozinho. A resposta de new123456 fez o truque.history
é a maneira usual de acessar essas informações.