Я пытаюсь выяснить, могу ли я вывести из эксплуатации старый сервер. Мне нужна информация об автоматизированных процессах, которые там запущены. Пока что я попробовал следующее:
auditctl -a exit,always -F arch=b64 -S execve -k any-commands
На этапе анализа журнала я обнаружил, что отсутствуют два фрагмента контекста:
- Как выполнялись эти программы? Какой процесс был их родителем и каков был его argv?
- Куда делись stdin/stdout? В идеале я бы хотел увидеть восстановленную команду оболочки, но я знаю, что, вероятно, прошу слишком многого, так что, по крайней мере, наличие идентификатора дескриптора канала было бы достаточно (чтобы я мог попытаться восстановить его с помощью собственных скриптов).
Как мне подойти к решению такой проблемы?
решение1
Системный execve
вызов заменяет текущий процесс. Если программа хочет сохранить управление после запуска другой программы, ей нужно сначала создать новый процесс (используя fork
или vfork
), который затем вызывает execve
.
Дескрипторы и разрешения открытых файлов берутся во внимание при замене образа программы в execve
(за исключением отмеченных флагом CLOEXEC
), поэтому открытые файлы наследуются от родительского процесса во время fork
, затем изменяются между fork
и execve
(например, с помощью dup2
), а затем окончательно фильтруются во время execve
вызова.
Поэтому получить полную картину на основе данных аудита будет сложно.