Estou tentando descobrir se posso desativar um servidor antigo. Preciso de informações sobre processos automatizados em execução lá. Até agora tentei o seguinte:
auditctl -a exit,always -F arch=b64 -S execve -k any-commands
Na fase de análise de log, descobri que faltavam duas partes do contexto:
- Como esses programas foram executados? Qual processo era o pai deles e qual era o seu argumento?
- Para onde foi o stdin/stdout? Idealmente, eu adoraria ver o comando shell reconstruído, mas sei que provavelmente estou pedindo demais, então pelo menos ter o ID do descritor de pipe serviria (para que eu possa tentar reconstruí-lo com meus próprios scripts).
Como posso abordar esse problema?
Responder1
A execve
chamada do sistema substitui o processo atual. Se um programa deseja manter o controle após iniciar outro programa, ele precisa primeiro criar um novo processo (usando fork
ou vfork
) que então chama execve
.
Os descritores e permissões de arquivos abertos são assumidos quando a imagem do programa é substituída em execve
(exceto aqueles marcados com o CLOEXEC
sinalizador), de modo que os arquivos abertos são herdados do processo pai durante fork
, depois modificados entre fork
e execve
(por exemplo, usando dup2
) e, finalmente, filtrados durante a execve
chamada.
Portanto, será difícil obter uma visão completa dos dados de auditoria.