Sé que puedo ver los archivos abiertos de un proceso usando lsof en ese momento en mi máquina Linux. Sin embargo, un proceso puede abrir, alterar y cerrar un archivo tan rápido que no podré verlo al monitorearlo utilizando scripts de shell estándar (por ejemplo watch) como se explica en "monitorear archivos de proceso abiertos en Linux (en tiempo real)" .
Entonces, creo que estoy buscando una forma simple de auditar un proceso y ver qué ha hecho con el tiempo. Sería genial si también es posible ver qué conexiones de red hizo (intentó) y hacer que la auditoría comience antes de que el proceso tenga tiempo de ejecutarse sin que se inicie la auditoría.
Idealmente, me gustaría hacer esto:
sh $ audit-lsof /path/to/executable
4530.848254 OPEN read /etc/myconfig
4530.848260 OPEN write /var/log/mylog.log
4540.345986 OPEN read /home/gert/.ssh/id_rsa <-- suspicious
4540.650345 OPEN socket TCP ::1:34895 -> 1.2.3.4:80 |
[...]
4541.023485 CLOSE /home/gert/.ssh/id_rsa <-- would have missed
4541.023485 CLOSE socket TCP ::1:34895 -> 1.2.3.4:80 | this when polling
¿Sería esto posible usar stracealgunas banderas para no ver todas las llamadas al sistema?
fuente

Respuestas:
Ejecutándolo con
probablemente sería suficiente
Deberá usar la
-oopción para colocar la salida de strace en otro lugar que no sea la consola, si el proceso puede imprimir en stderr. Si su proceso se bifurca, también necesitará-fo-ff.Ah, y es posible que también desee
-t, para que pueda ver cuándo ocurrieron las llamadas.Tenga en cuenta que es posible que deba modificar la lista de llamadas de función según lo que haga su proceso; necesitaba agregar,
getdentspor ejemplo, para obtener una mejor muestra usandols:fuente
-opara enviar la salida a los archivos. Luego puede ejecutartail -F strace.outputen otra terminal para obtener la actualización "en vivo".stracea un proceso en ejecución con la-p PIDopción.-ya "[p] rutas de rint asociadas con argumentos de descriptor de archivo"