DTrace para interceptar qualquer chmod aplicado a determinados arquivos

5

Abaixo do diretório do Mac OS X, /audit , tenho alguns arquivos que os usuários podem acessar e chmod do seu gosto.

Eu preciso auditar qualquer chmod feito em qualquer arquivo gravando o tempo, usuário e arquivo sendo chmod , especialmente o último.

Eu posso dtrace -n 'syscall::chmod:entry' e detectar os eventos, como leio o primeiro argumento para chmod ?

man 2 chmod informa que o caminho está no primeiro argumento:

chmod(const char *path, mode_t mode);

mas como posso ler args[0] ? Acho que estou fazendo o caminho errado .. talvez a entrada não corresponda ao syscall real?

Se eu tiver uma sonda que possa monitorar, como posso verificar quais parâmetros ela oferece para acesso e quais tipos eles são? Estou assumindo que alguns ponteiros precisarão ser desreferenciados com base no layout de seus dados.

    
por Robottinosino 10.09.2011 / 12:42

1 resposta

5

O argumento está em arg0 , mas esse é o endereço do espaço do usuário do responsável pela chamada em vez da cadeia real. Você precisa envolvê-lo com um copyinstr() também:

dtrace -n 'syscall::chmod:entry { printf("%d %s", uid, copyinstr(arg0)); }'
    
por 13.09.2011 / 23:17