GNU/Linux >> Tutoriales Linux >  >> Linux

¿Alguien sabe una forma sencilla de monitorear la generación de procesos raíz?

Solución 1:

Esto suena como un trabajo perfecto para auditd. Una vez que haya ejecutado auditd, un servicio predeterminado en los sistemas modernos basados ​​en RedHat, puede crear una regla que hará exactamente lo que desea ejecutando

auditctl -a task,always -F uid=0

Desglosando esta regla de comando, haciendo un uso excesivo de la página del manual, encontramos que:

   -a list,action
          task       Add  a  rule to the per task list. This rule list is used
                     only at the time a task is created -- when fork() or
                     clone() are called by the parent task. When using this
                     list, you should only use fields that are known at task
                     creation time, such as the uid, gid, etc.
          always     Allocate an audit context, always fill it in at syscall 
                     entry time, and always write out a record at syscall exit
                     time.

Por lo tanto, siempre escriba un registro para esta acción cada vez que salga una llamada del sistema de bifurcación o clonación.

La opción final se puede considerar como una cadena de filtro, en nuestro uso -F uid=0 simplemente nos restringe a los casos en los 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 auditd esté configurado correctamente y agregando la regla
-a task,always -F uid=0
en el archivo relevante para su distribución, muy probablemente /etc/audit/audit.rules

Solo tenga en cuenta que esto será bastante ruidoso, y quienquiera que esté haciendo sus revisiones de registro deberá estar preparado para ello.

Solución 2:

No creo que haya una manera limpia de hacer esto sin volver a compilar 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 a favor de su pregunta).

Tenía la idea de usar iwatch/inotify para la creación de directorios dentro de /proc pero no parecía funcionar, ni tampoco auditctl. Parece que su mejor opción, aunque sucia, es analizar continuamente ps para un cambio de una secuencia de comandos. El siguiente código de Perl lo haría, aunque es probable que se pierda algo e ignore ps (ya que de lo contrario se activaría solo):

perl -e 'my %pids; while(1) { my @pids = `ps -U root -u root`; foreach (@pids) { next if /ps$/; ($pid) = /^\s*(\d+)\D/; if (!$pids{$pid}) { $pids{$pid}++; print "Process $pid created (" . `cat /proc/$pid/cmdline` . ")\n"; } } }

Linux
  1. ¿Systemd todavía sabe acerca de los niveles de ejecución?

  2. ¿Cómo sabe Bash cómo se está invocando?

  3. ¿Linux Setuid no funciona?

  4. ¿Qué significa en la salida de Ps?

  5. ¿Existe el Comando Inverso de Corte?

Supervisar la tarea de Linux con SysMonTask

Una forma sencilla de enumerar enlaces simbólicos en Linux

Una forma sencilla de comprobar la versión de los controladores de NVIDIA en Linux

Una forma sencilla de entender el comando IOStat

¿Qué indica esta estadística de proceso?

¿Existe una forma rápida/automática de cambiar el brillo del monitor por la noche en Windows 7 o Linux?