Usando o Linux, gostaria de acompanhar os executáveis executados em meu nome, incluindo toda a linha de comando (na prática, todos os exec * () feitos como meu próprio usuário). Supõe-se que um programa que eu não controle não seja, para lidar com uma tarefa, para executar o programa que passo, mas quero ter certeza de que o faz e quais opções ele usa. O programa que eu não controlo é sorrateiro e parece mudar o comportamento, dependendo do nome do programa que ele deve executar para a tarefa, por isso não posso passar um shell script que registre as informações e invoque o real programa.
É possível que eu seja informado de todos os exec * () s como meu usuário no sistema no Linux, incluindo a linha de comando completa? Falta correr ps
em um loop, é isso. Prefiro fazê-lo diretamente no sistema em que trabalho e não exigir acesso root, mas, se necessário, posso gerar um sistema no qual tenho acesso root, instalar os programas e investigar lá.
Usando o Ubuntu 12.4 LTS.
fonte
audit
fornece, mas uma 'linha de comando inteira' no shell também pode afetar o processo filho usando as configurações de redirecionamento / tubulação e envvar, além de conter substituições / expansões, citações não significativas e espaçamento, e estruturas de controle comodoa && dob
, e você não as receberá.Respostas:
Você precisa configurar
auditd
para gravarexecve
eventos. Exemplo no RHEL5:Ignoro o aviso de arco e ele não parece importar, mas você pode usá-lo
-F arch=b64
ou-F arch=b32
configurá-lo, se quiser.O resultado do exposto acima é:
Isso é obviamente rápido e sujo, mas é o básico de como você faz isso. O que você precisa fazer exatamente depende muito do que você está tentando fazer exatamente. Você pode reduzir o fluxo de auditoria usando vários filtros no
auditctl
comando, mas eu não conheço nenhuma dessas informações e não sei o que incluir. Se você precisar de algo mais específico, sugiro que você verifique a página de manual ou poste um comentário para esta resposta, e eu a atualizarei um pouco mais.Espero que ajude a empurrá-lo na direção certa.
EDITAR:
Como sua pergunta envolve a visualização de um usuário em particular, posso mostrar a você que:
Idêntico ao anterior, mas somente
execve
por alguém executando com o ID de usuário efetivo de16777216
será registrado. Se você precisar especificar ologinuid
valor do usuário (com quem eles inicialmente efetuaram login no sistema), filtreauid
:Os filtros AUID / loginuid seriam úteis, por exemplo, se o usuário fizer um
su
ousudo
fazer root. Nessa situação, haverá muitas coisas sendo executadas como root, mas você só se preocupa com as coisas que foram iniciadas pelo usuário em questão.auditctl
também permite empilhar filtros para que você possa filtrar por amboseuid
eauid
:fonte
Você pediu algo simples. Fiz um exemplo,
mplayer
mas acho que pode ser adaptado a outras situações:Como você pode ver, isso é muito simples: ele analisa o primeiro argumento, pois é um arquivo, um log é criado no arquivo central
$LOG
e concatenado em um arquivo (que sempre tem o mesmo nomemplayer.log
no mesmo diretório).Assim, o usuário pode obter o filme mais recente que leu em cada diretório.
fonte