Назад | Перейти на главную страницу

Файлы, исчезающие на сервере linux

У меня есть 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.