Файли зникають на сервері Linux


13

У мене є 4 конкретні файли, які, здається, постійно зникають з домашнього каталогу користувача. Наскільки нам відомо, немає жодних завдань чи інших автоматизованих завдань, які б їх видаляли. Я налаштував їх на перевірку, але журнали насправді не виявляють нічого цікавого. Я бачу, як наша утиліта резервного копіювання звертається до них щовечора до тих пір, поки їх там більше немає, але нічого іншого. Чи є щось, що призвело б до видалення цих файлів, які могли б обійти аудит?

Файли, про які йдеться, такі:

/home/username/.bashrc
/home/username/.bash_profile

а також кілька файлів у .ssh-каталозі цього користувача. Одночасно видаляються також копії цих файлів, розміщених у підпапці під назвою "зберігачі". Змінення дозволів на них на 000 та володіння ними root не допомогло.

Наразі я встановив налаштування inotifywait для створення журналу створення, видалення, переміщення в цій підпапці, тому, сподіваємось, це щось з’явиться, хоча воно не сильно записується в сторону від того, коли це сталося, а не те, що спричинило це.


1
Будь ласка, додайте їх імена та шляхи до своєї публікації, це може допомогти.
Шадок

2
Також може бути корисно розміщення журналів аудиту.
Janne Pikkarainen

3
Також ви можете спробувати створити файли, що належать як root та chmod 000, щоб побачити, чи вони все-таки видаляються (чи це спричиняє щось інше для скарги / помилки).
многочлен

5
На додаток до chmod 0000, ви можете спробувати chattr + i, щоб спробувати запобігти видаленню навіть root
mer

1
майте на увазі, що chattr просто допомагає у файлових системах ext. але chattr повинен допомогти. :-) Ви також можете використовувати SELINUX замість chattr, щоб зупинити їх модифікацію. але IMHO видалення має відбуватися від процесу або користувача.
JMW

Відповіді:


20

Рішення 1 : systemtap
Ви можете використовувати systemtap, щоб показати всі PID, які намагаються використовувати unlink () для inode .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)); }'

5

на додаток до відповіді micea, ви можете базікати файли якtrtr + i як корінь і бачити, чи щось записує помилку при спробі їх видалити.


4

Ви абсолютно впевнені, що сам користувач не (випадково) їх видаляє?

У мене були деякі неосвічені користувачі (Windows) з тією ж проблемою. Виявилося, що вони самі видаляли ці файли щоразу, коли відвідували їх домашній dir із клієнтом ftp. Вони помітили файли .xxxx (ftp-клієнт їх не приховував) і видалили «безлад».

Мені ніколи не спадало на думку, що вони робили це собі, поки один із них не скаржився на спонтанно повторні файли, які він видалив за кілька днів до цього.


2
Повірте, я хотів би, щоб це було легко.
Чад П

Це було смішно :)
оснащення

3
Зараз це смішно .... Не так багато, коли це відбувалося, і я не міг зрозуміти, що відбувається. @Chad P: Будь ласка, повідомте нам, що ви знайдете. Мені це здається досить цікавим.
Тонні

3

Ми використовуємо скрипти виходу bash (~ / .bash_logout), щоб очистити певні файли після виходу - ви можете перевірити, чи є у вас така установка, можливо, з товстим глобусом у ній.


2

Більше схоже на зловмисника, який виконує пошук / home / user -name filename -exec rm -f {} \; зрештою його підкрадання :). Просто здогадуйтесь, тому що ви згадали, що резервні файли також видаляються.


1

Щоб уникнути втрати файлів та їх вмісту, ви можете налаштувати libtrash через LD_PRELOAD. Використовуючи ліфти, ви можете робити ряд речей, окрім тих, що можуть вам бути цікаві

INTERCEPT_UNLINK
INTERCEPT_RENAME
INTERCEPT_FOPEN
INTERCEPT_OPEN

Хорошу статтю про лімфати можна знайти тут

Інша річ, яку ви згадуєте, що ви порушили файли в корі, і вони все одно були видалені. Це тому, що / home / username є власником імені користувача; і якщо у dir є мод 755; то будь-який файл або реєстр у цьому режимі, який належить незалежно від того, хто може бути видалений користувачем; навіть якщо це кореневий файл або реж. В основному це пов'язано з тим, що видалення файлу в dir означає зміну вмісту dir, а у користувача 7 (у 755) цього dir, щоб він міг робити все, що завгодно.

Існують способи блокувати це, як і інші люди, вже запропоновані через chattr в файлових системах ext, щоб встановити файли як незмінні (+ i). Тоді потрібно буде зняти незмінний прапор перед тим, як внести будь-які зміни у файл / dir, у якому є прапор + i. Непоправний прапор / chattr може використовуватися тільки root.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.