Estoy tratando de encontrar cómo registrar una instanciación específica rrdtool
para ver si la ruta que está recibiendo es incorrecta.
Sé que podría envolver el ejecutable en un script de shell que registraría los parámetros, pero me preguntaba si había una forma más específica del kernel para monitorear eso, tal vez una devolución de llamada del sistema de archivos que ve cuando un / proc / pid / exe particular coincide con un binario dado?
auditd
registrar los argumentos de la línea de comandos y ejecutar el programa? serverfault.com/questions/765179/…Respuestas:
Sí, hay una instalación de kernel: el subsistema de auditoría. El
auditd
demonio realiza el registro y el comandoauditctl
configura las reglas de registro. Puede registrar todas las llamadas a un sistema específico alls, con algo de filtrado. Si desea registrar todos los comandos ejecutados y sus argumentos, registre laexecve
llamada al sistema:Para rastrear específicamente la invocación de un programa específico, agregue un filtro en el ejecutable del programa:
Los registros aparecen en
/var/log/audit.log
, o donde sea que su distribución los coloque. Debe ser root para controlar el subsistema de auditoría.Una vez que haya terminado de investigar, use la misma línea de comando en
-d
lugar de-a
eliminar una regla de registro, o ejecuteauditctl -D
para eliminar todas las reglas de auditoría.Para fines de depuración, reemplazar el programa por un script de envoltura le brinda más flexibilidad para registrar cosas como el entorno, información sobre el proceso principal, etc.
fuente
-F path=/ust/bin/rrdtool
? No entiendo cómorrdtool
es el software relacionado.rrdtool
. Si desea registrar invocaciones de todos los programas, elimine la-F path=…
parte (por supuesto, obtendrá muchos registros).auditctl
comando solo será efectivo hasta que se reinicie?auditctl
solo sobrevive hasta el reinicio, pero ese es un buen punto de todos modos, he agregado instrucciones para eliminarlos sin reiniciar mi respuesta.Podrías usar snoopy .
Snoopy es una solución más ligera ya que no necesita la cooperación del núcleo. Todo lo que se necesita es un cargador dinámico (dl) que precarga la biblioteca snoopy, cuya ruta se especifica en
/etc/ld.so.preload
.Divulgación: Soy actual mantenedor de snoopy.
fuente
El subsistema de "auditoría" del kernel de Linux puede hacer lo que necesita.
por ejemplo, si ejecuta estos comandos:
Luego, se registra cada evento de ejecución y se proporciona mucha información al respecto
por ejemplo, esta es la salida de mí corriendo
tail /var/log/audit/audit.log
Hay algunos valores interesantes que se pueden ver; por ejemplo, "auid" es 500, que es mi ID de inicio de sesión, a pesar de que "uid" es cero (porque estoy ejecutando bajo
su
). Por lo tanto, aunque el usuario haya cambiado de cuentasu
osudo
aún podamos rastrear su "ID de auditoría"Ahora esos
auditctl
comandos se perderán al reiniciar. Puede colocarlos en un archivo de configuración (por ejemplo, en el/etc/audit/rules.d/
directorio, en CentOS 7). La ubicación exacta dependerá de la versión de su sistema operativo. Laauditctl
página del manual debería ayudar aquí.Sin embargo, tenga cuidado ... esto provocará que se generen muchos mensajes de registro. ¡Asegúrese de tener suficiente espacio en el disco!
Si es necesario, las reglas pueden limitarse a un usuario específico o un comando específico.
Y también ten cuidado; si un usuario pone la contraseña en la ejecución del comando (por ejemplo
mysql --user=username --password=passwd
), esto se registrará.fuente