У меня есть 4 конкретных файла, которые, кажется, продолжают исчезать из домашнего каталога пользователя. Насколько нам известно, нет cronjobs или других автоматизированных задач, которые могли бы их удалить. Я настроил для них аудит, но журналы не показывают ничего интересного. Я вижу, как наша утилита резервного копирования обращается к ним каждую ночь до тех пор, пока их там больше нет, но больше ничего. Есть ли что-нибудь, что могло бы вызвать удаление этих файлов, что могло бы обойти auditd?
Речь идет о следующих файлах:
/home/username/.bashrc
/home/username/.bash_profile
а также пару файлов в каталоге .ssh этого пользователя. Копии этих файлов, помещенные в подпапку под названием «хранители», также удаляются. Изменение разрешений на них на 000 и владение ими root не помогло.
В настоящее время у меня есть настройка inotifywait для создания, удаления, перемещения в эту подпапку, так что, надеюсь, это что-то обнаружит, хотя в журнале ничего не происходит, кроме того, когда это произошло, а не того, что это вызвало.
Решение 1: systemtap
Ты можешь использовать systemtap чтобы показать все PID, которые пытаются использовать разорвать связь () на индексе .bashrc
и .bash_profile
файлы.
Установить systemtap и символы отладки для вашего ядра.
Создайте файл с именем unlink.stap
со следующим содержанием:
probe syscall.unlink
{
printf ("%s(%d) unlink (%s) userID(%d)\n", execname(), pid(), argstr, uid())
}
Затем запустите его с помощью sudo stap unlink.stap
Решение 2: inotify
Вы также можете использовать inotify чтобы увидеть, когда файл будет удален.
Решение 3: ftrace
Другое решение - использовать ftrace:
trace-cmd record -e \*unlink\*
Подождите, пока файл будет удален, нажмите CTRL + C, чтобы остановить trace-cmd record ...
, затем запустите:
trace-cmd report
Решение 4: bpftrace
Установить bpftrace
, затем запустите:
bpftrace -e 'tracepoint:syscalls:sys_enter_unlink* { printf("%s %s\n", comm, str(args->pathname)); }'
в дополнение к ответу micea вы можете chattr + i файлы как root и посмотреть, регистрирует ли что-нибудь ошибку при попытке их удалить.
Вы абсолютно уверены, что пользователь сам (случайно) не удаляет их?
У меня были некоторые невежественные (Windows) пользователи с той же проблемой. Оказалось, что они сами удаляли эти файлы каждый раз, когда заходили в свой домашний каталог с ftp-клиентом. Они обратили внимание на файлы .xxxx (ftp-клиент их не скрывал) и удалили "беспорядок".
Мне никогда не приходило в голову, что они сделали это сами с собой, пока один из них не пожаловался на спонтанно появляющиеся файлы, которые он удалил несколько дней назад.
Мы используем сценарии выхода из системы bash (~ / .bash_logout) для очистки определенных файлов при выходе из системы - вы можете проверить, есть ли у вас такая настройка, возможно, с жирным шариком внутри.
Больше похоже на злоумышленника, который совершает найти / home / user -name filename -exec rm -f {} \; ведь его красться :). Просто догадываюсь, потому что вы упомянули, что файлы резервных копий также удаляются.
Чтобы предотвратить потерю файлов и их содержимого, вы можете настроить libtrash через LD_PRELOAD. Используя libtrash, вы можете делать множество вещей, но те, которые могут быть вам интересны,
INTERCEPT_UNLINK
INTERCEPT_RENAME
INTERCEPT_FOPEN
INTERCEPT_OPEN
Хорошую статью про libtrash можно найти Вот
Еще вы упомянули, что вы поместили файлы в root, но они все равно были удалены. Это потому, что / home / username принадлежит имени пользователя; и если в dir указано mod 755; затем любой файл или каталог в этом каталоге, принадлежащий независимо от того, кто может быть удален пользователем; даже если это корневой файл или каталог. В основном это связано с тем, что удаление файла в каталоге означает изменение содержимого каталога, а у пользователя есть 7 (из 755) этого каталога, поэтому он может делать все, что хочет.
Есть способы заблокировать это, поскольку другие люди уже предлагали через chattr в файловых системах ext установить файлы как неизменяемые (+ i). Затем нужно будет отключить неизменяемый флаг, прежде чем вносить какие-либо изменения в файл / каталог, который имеет флаг + i. Неизменяемый флаг / chattr может использоваться только пользователем root.