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 strace
algunas banderas para no ver todas las llamadas al sistema?
fuente
Respuestas:
Ejecutándolo con
probablemente sería suficiente
Deberá usar la
-o
opció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á-f
o-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,
getdents
por ejemplo, para obtener una mejor muestra usandols
:fuente
-o
para enviar la salida a los archivos. Luego puede ejecutartail -F strace.output
en otra terminal para obtener la actualización "en vivo".strace
a un proceso en ejecución con la-p PID
opción.-y
a "[p] rutas de rint asociadas con argumentos de descriptor de archivo"