Estou tentando descobrir como registrar uma instanciação específica rrdtool
para ver se o caminho que está recebendo está incorreto.
Eu sei que poderia envolver o executável em um script de shell que registraria os parâmetros, mas fiquei pensando se havia uma maneira mais específica de monitorar o kernel, talvez um retorno de chamada do sistema de arquivos que veja quando um / proc / pid / exe específico corresponde a um dado binário?
auditd
registrar os argumentos da linha de comando e o programa executado? serverfault.com/questions/765179/…Respostas:
Sim, existe um recurso de kernel: o subsistema de auditoria. O
auditd
daemon faz o log e o comandoauditctl
configura as regras de log. Você pode registrar todas as chamadas em um sistema específico alls, com alguma filtragem. Se você deseja registrar todos os comandos executados e seus argumentos, registre aexecve
chamada do sistema:Para rastrear especificamente a chamada de um programa específico, adicione um filtro ao executável do programa:
Os logs são exibidos
/var/log/audit.log
ou onde quer que sua distribuição os coloque. Você precisa ser root para controlar o subsistema de auditoria.Depois de concluir a investigação, use a mesma linha de comando em
-d
vez de-a
excluir uma regra de log ou executeauditctl -D
para excluir todas as regras de auditoria.Para fins de depuração, a substituição do programa por um script de wrapper oferece mais flexibilidade para registrar coisas como o ambiente, informações sobre o processo pai etc.
fonte
-F path=/ust/bin/rrdtool
? Eu não entendo comorrdtool
é o software relacionado.rrdtool
. Se você deseja registrar invocações de todos os programas, solte a-F path=…
parte (você obterá muitos registros, é claro).auditctl
comando só será efetivo até a reinicialização?auditctl
sobreviver apenas até a reinicialização, mas é um bom argumento, eu adicionei instruções sobre como removê-las sem reiniciar a minha resposta.Você poderia usar snoopy .
Snoopy é uma solução mais leve, pois não precisa de cooperação do kernel. Tudo o que é necessário é o carregador dinâmico (dl) que pré-carrega a biblioteca snoopy, caminho para o qual é especificado
/etc/ld.so.preload
.Divulgação: Sou atual mantenedor do Snoopy.
fonte
O subsistema de "auditoria" do kernel Linux pode fazer o que você precisa.
por exemplo, se você executar estes comandos:
Em seguida, todo evento de execução é registrado e muitas informações são fornecidas em torno desse
por exemplo, esta é a saída de mim correndo
tail /var/log/audit/audit.log
Existem alguns valores interessantes que podem ser vistos; por exemplo, "auid" é 500, que é o meu ID de login, mesmo que "uid" seja zero (porque estou executando abaixo
su
). Portanto, mesmo que o usuário tenha trocado de contasu
ousudo
ainda possamos rastrear seu "ID de auditoria"Agora esses
auditctl
comandos serão perdidos em uma reinicialização. Você pode colocá-los em um arquivo de configuração (por exemplo, no/etc/audit/rules.d/
diretório, no CentOS 7). A localização exata dependerá da versão do seu sistema operacional. Aauditctl
página do manual deve ajudar aqui.Cuidado, porém ... isso fará com que muitas mensagens de log sejam geradas. Verifique se você tem espaço suficiente no disco!
Se necessário, as regras podem ser limitadas a um usuário específico ou a um comando específico.
E também tenha cuidado; se um usuário colocar a senha na execução do comando (por exemplo
mysql --user=username --password=passwd
), ela será registrada.fonte