2

Есть ли команда Linux, которая будет следить за новыми процессами?

Моя цель в этом заключается в том, чтобы я хотел видеть, когда вызывается новая команда gulp , запускать командную строку с чем-то вроде ps , а затем фильтровать ее с помощью sed .

Важной частью является отслеживание новых процессов, так как я не могу посмотреть PID, как только он закончен.

1 ответ1

4

Вы можете использовать подсистему auditd для регистрации команд, выполняемых в вашей системе. Он подключен к ядру, поэтому очень надежно регистрировать все, что выполняется.

Мои примеры на Fedora Linux, вы можете найти небольшие различия в зависимости от вашего дистрибутива. (Подсистема auditd довольно сложна, поэтому может быть сложно сделать это правильно.)

Сначала убедитесь, что у вас уже установлен и запущен Audit, с помощью:

$ systemctl status auditd.service

Затем вы можете проверить, какие правила загружены. По умолчанию в Fedora вы получаете:

$ sudo auditctl -l
-a never,task

Поэтому нам нужно удалить этот список "задач" (который подавляет системные вызовы) и добавить тот, который регистрирует "execve" (который является системным вызовом, выполняющим команды).

$ sudo auditctl -d never,task
$ sudo auditctl -a always,exit -F arch=b64 -S execve

Как только это будет сделано, все команды будут зарегистрированы в системе аудита.

Затем вы можете найти его, используя команду ausearch . Например, чтобы найти все исполнения, которые вызывают "gulp", вы можете использовать:

$ sudo ausearch -c gulp

Вывод будет довольно многословным ... Сосредоточьтесь на строке type = EXECVE. Аргументы будут перечислены как a0="gulp" a1="first_argument" a2="second_argument" ...

Если вместо строки в кавычках вы получите длинную последовательность чисел, используйте -i для ее интерпретации.

Регистрация каждой команды, которая выполняется в вашей системе, может быть очень дорогой и занимать много места на диске! Возможно, это тоже влияет на производительность. Если вы хотите отменить эти изменения, вы можете перезагрузить набор правил по умолчанию с помощью этой команды:

$ sudo augenrules --load

Вы также можете применить фильтр к правилу ведения журнала, например, чтобы регистрировать только выполнение /usr /bin /gulp:

$ sudo auditctl -a always,exit -F arch=b64 -F exe=/usr/bin/gulp -S execve

Так что, может быть, это излишне ... Но это так же надежно, как и получается. Я надеюсь, что вы можете найти свой путь через подсистему auditd которая даст вам информацию, которую вы ищете!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .