¿Existe un comando de Linux que esté atento a nuevos procesos?
Mi objetivo en esto es ver cuándo gulp
se llama a un nuevo comando, ejecutar la línea de comando con algo como ps
y luego filtrarla usando sed
.
La parte importante es la observación de nuevos procesos, ya que no puedo buscar un PID una vez finalizado.
Respuesta1
Puede utilizar el auditd
subsistema para registrar los comandos ejecutados en su sistema. Está conectado al kernel, por lo que es muy confiable registrar todo lo que se ejecuta.
Mis ejemplos están en Fedora Linux, es posible que encuentres pequeñas diferencias dependiendo de tu distribución. (El auditd
subsistema es bastante complejo, por lo que puede resultar complicado hacerlo bien).
Primero comprueba que ya tienes auditd instalado y ejecutándose, con:
$ systemctl status auditd.service
Luego puedes comprobar qué reglas están cargadas. De forma predeterminada, en Fedora, obtienes:
$ sudo auditctl -l
-a never,task
Por lo tanto, debemos eliminar esta lista de "tareas" (que suprime las llamadas al sistema) y agregar una que registre "execve" (que es la llamada al sistema que ejecuta comandos).
$ sudo auditctl -d never,task
$ sudo auditctl -a always,exit -F arch=b64 -S execve
Una vez hecho esto, todos los comandos se registrarán en el sistema de auditoría.
Luego puedes buscarlo usando el ausearch
comando. Por ejemplo, para encontrar todas las ejecuciones que llaman "gulp", puedes usar:
$ sudo ausearch -c gulp
El resultado será bastante detallado... Concéntrese en la línea type=EXECVE. Los argumentos se enumerarán comoa0="gulp" a1="first_argument" a2="second_argument" ...
Si obtiene una secuencia larga de números en lugar de una cadena entrecomillada, utilícela -i
para interpretarla.
¡Registrar cada comando que se ejecuta en su sistema puede ser muy costoso y consumir mucho espacio en disco! Es posible que también afecte el rendimiento. Si desea deshacer estos cambios, puede recargar el conjunto de reglas predeterminado con este comando:
$ sudo augenrules --load
También puede aplicar un filtro a la regla de registro, por ejemplo, para registrar solo ejecuciones de /usr/bin/gulp:
$ sudo auditctl -a always,exit -F arch=b64 -F exe=/usr/bin/gulp -S execve
Entonces, tal vez esto sea excesivo... Pero es lo más confiable posible. ¡Espero que puedas encontrar tu camino a través del auditd
subsistema y que te brinde la información que estás buscando!