Регистрировать каждый вызов каждой программы SUID?


12

Я хотел бы иметь файл журнала, который содержит запись для каждого запуска пользователя любой suid-программы, содержащую имя пользователя, программу и любые аргументы командной строки, переданные ей. Есть ли стандартный способ добиться этого в Linux?

Ответы:


7

Вы можете регистрировать все вызовы определенного исполняемого файла (setuid или нет) через подсистему аудита . Документация довольно скудная; начните со страницы руководства audctl или, возможно, с этого руководства . В последних выпусках поставляется auditdпакет. Установите его и убедитесь, что auditdдемон работает, затем выполните

auditctl -A exit,always -F path=/path/to/executable -S execve

и наблюдайте за тем, как звонки регистрируются /var/log/audit/audit.log(или там, где ваш дистрибутив настроил это).


1
Я думаю, можно написать скрипт, чтобы сначала получить все SUID-файлы с помощью find, а затем использовать ваше решение для каждого из них. Не элегантно, но, безусловно, выполнимо. Благодарность!
Ким

2
@Kim: Я думаю , вы можете войти все инвокации в УИП корень двоичного на не суперпользователь путем замены -F path=…с -F euid=0 -F 'uid!=0'или что - то вроде этого. Я не вижу ни хука в вызываемом коде setxid,execve ни конкретного наблюдения за setxid в подсистеме аудита . Или, конечно, вы можете войти каждый execveи пост-процесс.
Жиль "ТАК - перестань быть злым"

Интересный. Никогда не слышал об этом раньше. Интересно, насколько широко он используется. В Debian popcon нет записи для auditd.
Фахим Митха

findКоманда для просмотра всех файлов SUID:find / -xdev \( -perm -4000 \) -type f -print

1
@FaheemMitha У него есть запись popcon: qa.debian.org/popcon-graph.php?packages=auditd
jofel
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.