Дізнайтеся, який процес змінює файл


35

Я намагаюся знайти надійний спосіб знайти, який процес на моїй машині змінює файл конфігурації ( /etc/hostsщоб бути конкретним).

Я знаю, що можу lsof /etc/hostsдізнатися, які процеси в даний час відкривають файл, але це не допомагає, оскільки процес очевидно відкриває файл, записує його, а потім знову закриває його.

Я також переглянув lsofваріант повторення (-r), але, здається, він проходить так само швидко, як раз на секунду, що, ймовірно, ніколи не захопить записувати в процесі.

Я знаю пару інструментів для моніторингу змін у файловій системі, але в цьому випадку я хочу знати, який процес несе відповідальність, а це означає зафіксувати його в акті.

Відповіді:


52

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

встановити годинник аудиту на / etc / hosts

/sbin/auditctl -w /etc/hosts -p war -k hosts-file

-w watch /etc/hosts
-p warx watch for write, attribute change, execute or read events
-k hosts-file is a search key.

Зачекайте, поки файли хостів зміниться, а потім скористайтеся ausearch, щоб побачити те, що записано

/sbin/ausearch -f /etc/hosts | more

Ви отримаєте масу продукції, наприклад


time-> ср 12 жовтня 09:34:07 2011 тип = PATH msg = аудит (1318408447.180: 870): item = 0 name = "/ etc / hosts" inode = 2211062 dev = fd: 00 mode = 0100644 ouid = 0 ogid = 0 rdev = 00: 00 obj = system_u: object_r: etc_t: s0 type = CWD msg = аудит (1318408447.180: 870): cwd = "/ home / iain" type = SYSCALL msg = audit (1318408447.180: 870): arch = c000003e syscall = 2 успіх = так вихід = 0 a0 = 7fff73641c4f a1 = 941 a2 = 1b6 a3 = 3e7075310c items = 1 ppid = 7259 pid = 7294 au id = 1001 uid = 0 gid = 0 euid = 0 suid = 0 fsuid = 0 egid = 0 sgid = 0 fsgid = 0 tty = pts0 ses = 123 comm = "touch" exe = "/ bin / touch" subj = user_u: system_r: unconfined_t: s0 key = "hosts-файл"


У цьому випадку я скористався командою touch, щоб змінити файли timstamp, це pid - 7294, а ppid - 7259 (моя оболонка).


2
Мабуть, можливо, "розширення аудиту для вашого дистрибутива" трохи розшириться. Прикро, вищенаведені команди не дали мені ані помилок, ані результатів. "/ sbin / auditctl -e 1" також не допомогло. Запуск deamon аудиту для ведення журналу допоміг - "/etc/init.d/auditd start" (хоча він видалив мої правила, тому мені довелося вводити їх ще раз).
tobixen

Не працювало для мене, ausearchзавжди повертається<no matches>
m0skit0

1
іноді може знадобитися встановити кілька аудитів, щоб отримати власне процес, який ініціював модифікацію, якщо, наприклад, цей процес викликає зовнішню команду, щоб виконати роботу за це. тобто я намагався з'ясувати, чому запис користувача через крони постійно змінюється. Команда crontab відповідала, але до того моменту, як я перевірив ppid, який він вийшов, тому мені довелося також перевірити / usr / bin / crontab, а потім відповідати часовій позначці доступу до crontab ревізованому виконавцю crontab, а потім перевірити це ppid ..., який виявив, що демон оркестрації виконує необхідну конфігурацію крона користувача.
Віл

3

Ви також можете використовувати інструменти inotify:

  inotifywait -mq -e open -e modify /etc/hosts

14
Аудит може надати вам потрібну інформацію. Незважаючи на те, що легко зробити припущення, що inotify дозволить вам це зробити - це не стане, оскільки він не дасть вам ідентифікатор процесу, який здійснив модифікацію.
об’єктивовано

2

Після багатьох пошуків я знайшов рішення, просто скористайтеся цією командою: sudo fs_usage | grep [path_to_file]


2
це лише для MacOS ...
майк

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