
Я запускаю долго работающую программу на сервере Linux. Многие другие пользователи также запускают свои программы на этом сервере. У всех нас есть права sudo.
Предположим, что злонамеренный пользователь завершает мою запущенную программу, скажем, с помощью sudo kill
или sudo pkill
. Как узнать, кто этот пользователь?
решение1
Хотя ответ Пола верен, в том, что улики можно устранить, это не значит, что улики устранены. Гораздо больше людей знают о sudo, по сравнению с количеством людей, которые знают, какие логи очищать (если они вообще потрудятся).
В моей системе, каждый раз, когда используется sudo, вся командная строка сохраняется в журнале. Я думаю, что ваша система может делать то же самое. В OpenBSD это /var/log/authlog, а в системе Debian это /var/log/auth.log
Если вы не знаете, в каком файле хранится такая информация, попробуйте выполнить команду sudo. (Неважно, что вы делаете с sudo: даже этого echo
будет достаточно. Цель — изменить журналы, которые изменяются при использовании sudo.) Затем используйте
ls -ltr /var/log/*auth*
или
ls -ltr /var/log | tail
для поиска недавно измененных файлов.
решение2
Если у вас всех есть sudo
, то нет гарантированного способа сохранить доказательства завершенного процесса, поскольку любые доказательства могут быть удалены с тем же уровнем разрешения.
Вы можете использоватьauditd
демон аудитадля отслеживания определенных системных вызовов, таких как kill.
Очевидно, что пользователь root может сначала остановить демон аудита, а затем удалить журналы. Поэтому вам нужно экспортировать журналы во внешнюю среду.
Лучшим подходом было бы лучше управлять sudo, предоставляя каждому пользователю только тот доступ, который ему нужен. Обычным пользователям почти никогда не нужен полный root-доступ, и вы можете использовать sudo, чтобы предоставить подмножество разрешений.