Cuando trabajas para un cliente que no te deja ver el código de sus programas, tienes que utilizar todos los recursos disponibles para descubrir qué es lo que está pasando.

En esta ocasión, la única pista son unos montajes de particiones nfs pero no sé ni quien los hace, ni como se hacen, la cuestión es que en ocasiones estos quedan en un estado inconsistente, el directorio donde están montados se borra y el comando df muestra unos bonitos "No such file or directory".

La solución en principio es detectar cuando se monta y desmonta, y ello implica capturar de alguna manera las syscalls. En este caso, mount y umount2. Descarto en principio usar strace ya que no conozco los procesos sospechosos y no puedo tracear todo.

Usando auditd se pueden definir reglas para capturar eventos del kernel. Como hemos dicho, la pista son unos mounts, o lo que es lo mismo, su syscall.

Vamos a definir una regla de auditd:
auditctl -a exit,always -F arch=b64 -S mount -S umount2 -k catchmount 

-a exit,always : indica que la syscall se captura al terminar, siempre, vaya bien o mal.
-F arch=b64 : capturamos syscalls de 64 bits
-S mount -S umount2 : estas son las syscalls que queremos capturar
-k catchmount : graba los eventos con una key determinada

Tenemos dos formas de ver los eventos capturados, directamente en el log, /var/log/audit/audit.log, o con ausearch:
ausearch -k catchmount

0 comentarios:

Publicar un comentario

Nube de Bits, 2011. Con la tecnología de Blogger.