Я хочу выполнить скрипт, когда появляется новый корневой процесс. (на Linux) Как я могу просто сделать это?
Благодарность
linux
unix
monitoring
process
Cerisier
источник
источник
Ответы:
Это звучит как идеальная работа для аудита. Запустив Audit, службу по умолчанию в современных системах на базе RedHat, вы можете создать правило, которое будет выполнять именно то, что вы хотите, выполнив
auditctl -a task,always -F uid=0
Нарушая это правило команды, чрезмерно используя man-страницу, мы находим, что:
Поэтому всегда записывайте запись для этого действия всякий раз, когда завершается системный вызов fork или clone.
Последний вариант можно рассматривать как строку фильтра, в нашем случае мы
-F uid=0
просто ограничиваем нас случаями, когда uid владельца процесса равен 0.Обратите внимание, что это правило может быть выполнено во время выполнения, убедившись, что audit правильно настроен, и добавив правило
-a task,always -F uid=0
в соответствующий файл для вашего дистрибутива, скорее всего
/etc/audit/audit.rules
Просто имейте в виду, что это будет чертовски шумно, и кто бы ни делал ваши обзоры журналов, он должен быть готов к этому.
источник
Я не думаю, что есть чистый способ сделать это без перекомпиляции вашего ядра с CONFIG_PROC_EVENTS и / или CONFIG_KPROBES (хотя я хотел бы знать, есть ли способ сделать это, поэтому я поставил ваш вопрос на голосование).
У меня была идея использовать iwatch / inotify для создания каталога внутри / proc, но, похоже, это не сработало, как и audctl. Похоже, что ваш лучший выбор, хотя и грязный, это постоянно анализировать ps на предмет изменений в скрипте. Следующий код на Perl сделал бы это, хотя был бы склонен пропускать некоторые и игнорировать
ps
(как это могло бы вызвать сам себя):источник
Лучший способ, которым я могу придумать, это создать библиотеку Snoopy . snoopy - это очень небольшая разделяемая библиотека, которая подключается
/etc/ld.so.preload
и обрабатываетexecve()
системные вызовы. Это настраивается для регистрации всехexec()
или только из корня. В своем текущем воплощении snoopy регистрирует в syslog каждый раз, когда происходит соответствующее событие (системный вызовexecve()
). Это небольшая программа (не более пары сотен строк кода), и ее можно изменить без особых трудностей для выполнения сценария вместо (или в дополнение к) регистрации действия. Снупи написан на C.Несколько вещей, на которые стоит обратить внимание:
источник