Quiero ejecutar un script cuando se genera un nuevo proceso raíz. (en Linux) ¿Cómo puedo simplemente hacer eso?
Gracias
linux
unix
monitoring
process
cerisier
fuente
fuente
Respuestas:
Esto suena como un trabajo perfecto para auditados. Una vez que haya auditado la ejecución, un servicio predeterminado en los sistemas modernos basados en RedHat, puede crear una regla que haga exactamente lo que desea ejecutando
auditctl -a task,always -F uid=0
Al romper esta regla de comando, haciendo un uso excesivo de la página de manual, encontramos que:
Por lo tanto, siempre escriba un registro para esta acción cada vez que salga una llamada de fork o sistema de clonación.
La opción final puede considerarse como una cadena de filtro, en nuestro uso
-F uid=0
simplemente nos restringe a los casos en que el uid del propietario del proceso es 0.Tenga en cuenta que esta regla se puede ejecutar en tiempo de ejecución asegurándose de que auditado esté configurado correctamente y agregando la regla
-a task,always -F uid=0
al archivo relevante para su distribución, lo más probable
/etc/audit/audit.rules
Solo tenga en cuenta que esto será bastante ruidoso, y cualquiera que esté haciendo sus revisiones de registro deberá estar preparado para ello.
fuente
No creo que haya una manera limpia de hacer esto sin recompilar su kernel con CONFIG_PROC_EVENTS y / o CONFIG_KPROBES (aunque me encantaría saber si hay una manera de hacerlo, así que he votado su pregunta).
Tuve una idea de usar iwatch / inotify para la creación de directorios dentro de / proc, pero no pareció funcionar, ni auditctl. Parece que su mejor opción, aunque sucia, es analizar continuamente ps para un cambio de un script. El siguiente código de Perl lo haría, aunque sería propenso a perder algo e ignorarlo
ps
(ya que de lo contrario se dispararía):fuente
La mejor forma en que puedo pensar sería construir a partir de la biblioteca de snoopy . snoopy es una biblioteca compartida muy pequeña que se engancha
/etc/ld.so.preload
y envuelve lasexecve()
llamadas del sistema. Es configurable para registrar todosexec()
, o solo aquellos desde la raíz. En su encarnación actual, snoopy registra en syslog cada vez queexecve()
ocurre un evento coincidente (una llamada al sistema ). Sin embargo, no es un programa grande (un par de cientos de líneas de código, como máximo), y podría modificarse sin tanta dificultad para ejecutar un script en lugar de (o además de) registrar la actividad. Snoopy está escrito en C.Algunas cosas a tener en cuenta:
fuente