Me gustaría obtener un registro de todos los procesos que se inician con el momento en que se iniciaron y los argumentos con los que se iniciaron. ¿Es esto posible en Linux?
55
Su punto de partida debe ser auditado.
Intenta algo como esto:
apt-get install auditd
auditctl -a task,always
ausearch -i -sc execve
The audit system is disabled
¿Dónde puedo habilitarlo?chmod 0750 /sbin/audispd
pero todavía no funciona (Debian Wheezy)Unable to set audit pid, exiting
pero supongo que el verdadero problema será que el sistema se está ejecutando en un contenedor LXCNecesitaba hacer esto, excepto que (1) no necesitaba el tiempo y (2) solo estaba interesado en los procesos que se inician en un proceso determinado, y sus hijos y descendientes posteriores. Además, en el entorno que estaba usando, no fue posible conseguir
auditd
oaccton
, pero no habíavalgrind
.Prefije lo siguiente al proceso de interés en la línea de comando:
La información que necesita estará en la salida del registro que se muestra en STDERR.
fuente
memcheck
herramienta. Para desactivar la herramienta y su registro correspondiente, y sólo imprimir la creación de nuevos comandos (además de la salida habitual de su programa), utilice el siguiente comando:valgrind --tool=none --trace-children=yes [command and args here]
. Cada vez que se genera un subproceso, Valgrind registrará el comando completo, incluidos los argumentos que se le pasaron.Podrías usar snoopy para esto.
Es muy simple de instalar, y desde 2.x puede registrar datos arbitrarios (argumentos, variables ambientales, cwd, etc.).
Divulgación: Snoopy mantenedor aquí.
fuente
Puede ejecutar startmon y seguir su salida estándar, Ctrl-C cuando haya terminado. Aquí se explica cómo compilar y ejecutar startmon en distribuciones recientes derivadas de Red Hat (RHEL, Fedora, CentOS):
En Debian (y Ubuntu, etc.), la primera línea de lo anterior cambia a:
Alternativamente, puede probar el
execsnoop
script en perf-tools, vea esta respuesta . Por defecto, solo se muestran los primeros 8 argumentos (9 incluyendo el nombre del programa); puedes aumentar esto a través deSi no tiene acceso de root al sistema, lo mejor que puede hacer es seguir sondeando
/proc
y esperar que detecte todo (lo que no hará), pero para completar, aquí hay una secuencia de comandos para hacerlo (he puesto la eliminación de duplicados para simplificar la salida): aunque esto no es tan bueno como rastrearlos correctamente con uno de los métodos anteriores, tiene la ligera ventaja de mostrar separadores sin ambigüedades entre los argumentos de la línea de comandos, en caso de que alguna vez necesite decirle al diferencia entre espacios dentro de un argumento y espacio entre argumentos. Este script es ineficiente ya que usa la CPU (bueno, uno de sus núcleos) el 100% del tiempo.También puede parchear
execsnoop
para decirle más explícitamente qué argumento es cuál:grep -v sub.*arg < execsnoop > n && chmod +x n && mv n execsnoop
fuente
CONFIG_FTRACE
y aCONFIG_KPROBES
través debrendangregg/perf-tools
En otro caparazón:
El primer shell muestra datos de formato:
CONFIG_PROC_EVENTS
Sesión de muestra:
CONFIG_PROC_EVENTS
expone los eventos a userland a través de un socket de netlink .proc_events.c adaptado de: https://bewareofgeek.livejournal.com/2945.html
GitHub upsatream .
Sin embargo, no creo que pueda obtener datos de proceso como UID y argumentos de proceso porque
exec_proc_event
contiene muy pocos datos: https://github.com/torvalds/linux/blob/v4.16/include/uapi/linux/cn_proc .h # L80 Podríamos intentar leerlo de inmediato/proc
, pero existe el riesgo de que el proceso finalice y otro tome su PID, por lo que no sería confiable.Probado en Ubuntu 17.10.
fuente
También puede usar encima para ver el uso de recursos por procesos. Estas son herramientas útiles para registrar y analizar el uso de recursos en cada parte del tiempo
fuente
Puedes probar
cat ~/.bash_history
Haysystem log viewer
, esto puede ayudarte.fuente
~/.bash_history
solo contiene comandos que he ejecutado en una terminal, aparentemente. Estoy buscando un registro de todos los programas ejecutados, por ejemplo, cuando hago clic en un icono para abrir mi cliente de correo electrónico, gedit, o abro mi navegador, y mi navegador ejecuta otro proceso por sí mismo. La respuesta de new123456 hizo el truco.history
es la forma habitual de acceder a esta información.