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=0Al 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=0simplemente 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=0al archivo relevante para su distribución, lo más probable
/etc/audit/audit.rulesSolo 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.preloady 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