Моніторинг доступу до файлів Linux


20

Чи є в Unix спосіб дізнатися, хто отримав доступ до певного файлу за останній 1 тиждень? Це може бути користувач або якийсь сценарій ftp його в якесь інше місце. Чи можу я отримати список імен користувачів, які отримали доступ до певного файлу? Як я можу дізнатися, хто отримує доступ до певного файлу ??

Відповіді:


39

Якщо у вас немає надзвичайно незвичних правил ведення журналів, хто отримав доступ до файлів, які не входили в систему (це була б величезна кількість інформації). Ви можете дізнатися, хто входив у який час у системних журналах; lastкоманда дає вам увійти в історію, і інші журнали , такі , як /var/log/auth.logпідкаже вам , як користувачі завірені і звідки вони увійшли в систему (що термінал або який хост , якщо віддалено).

Датою останнього читання файлу називається його час доступу або короткий atime . Усі файлові системи Unix можуть зберігати його, але багато систем не записують його, оскільки він має (як правило, невеликий) показник продуктивності. ls -ltu /path/to/fileабо stat /path/to/fileпоказує час доступу до файлу.

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

Щоб дізнатися, що або у кого відкритий файл, скористайтеся lsof /path/to/file.

Щоб зареєструвати, що станеться з файлом у майбутньому, є декілька способів:

  • Використовуйте inotifywait . inotifywait -e access /path/toдрукує рядок, /path/to/ ACCESS fileколи хтось читає file. Цей інтерфейс не скаже вам, хто отримав доступ до файлу; Ви можете зателефонувати, lsof /path/to/fileяк тільки з'явиться ця лінія, але існує умова перегонів (доступ може закінчитися до моменту, коли lsof перейде).

  • LoggedFS є файловою системою, що складається з даних, що забезпечує перегляд дерева файлової системи, і може виконувати більш шалений журнал усіх доступу через цей вид. Щоб налаштувати його, див. Синтаксис файлу конфігурації LoggedFS .

  • Ви можете використовувати підсистему аудиту Linux для реєстрації великої кількості речей, включаючи доступ до файлової системи. Переконайтеся, що auditdдемон запущений, а потім налаштуйте те, з чим ви хочете увійти auditctl. Кожна зареєстрована операція записується в /var/log/audit/audit.log(у типових дистрибутивах). Щоб почати перегляд певного файлу:

    auditctl -w /path/to/file
    

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


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

@Jack: Важко сказати, не знаючи набагато більше про вашу настройку, але поки файл не видалить і не перейменує файл, він буде доступний для інших сценаріїв, щоб забрати його, незалежно від того, хтось до нього звертається чи ні. З вашого коментаря, я думаю, ви повинні дивитися, що відбувається під час запуску сценаріїв.
Жиль "ТАК - перестань бути злим"

2
Гей, ви можете створити приємну кругову петлю з цим:syslogd access log file /var/log/audit.log at 10:01\nsyslogd access log file /var/log/audit.log at 10:02\n...
penguin359

7

Вищенаведений приклад із inotifywait має бути одним із (див. Довідкову сторінку для отримання додаткової інформації):

inotifywait /path/to/file
inotifywait -e open /pat/to/file

Або з режимом моніторингу та часовою позначкою:

inotifywait -m --format '%w:%e:%T' --timefmt '%F %T %Z %z'

6

Попередня відповідь - не найкраща практика робити те, що ви просите. Linux для цього має API. inotifyAPI http://linux.die.net/man/7/inotify

  1. Ви можете написати програму C, щоб робити те, що ви хочете, просто зателефонувавши inotifyAPI
  2. Ви можете використовувати kfsmd, http://www.linux.com/archive/feature/124903 демон, який використовуєinotify
  3. Якщо ви хочете щось, що працює на платформах ( inotifyспецифічно для Linux), і ви використовуєте Java, JNotify працює на платформах (Linux, Mac, Windows), абстрагуючи базовий API рідної ОС.

3
Ласкаво просимо до обміну стеками . Відповіді не подаються в хронологічному порядку, тому "попередня відповідь" не означає, яку відповідь ви маєте на увазі. Цікаво, на кого з двох інших ви все-таки маєте на увазі: в одному немає нічого схожого на добру чи погану практику, а в іншому згадується про примусовий API.
Жил "ТАК - перестань бути злим"

Найімовірніше, Глен посилається на відповідь вище за сортуванням голосів за замовчуванням. Дійсно, найпопулярніша відповідь не дає вирішення питання. Можливо, існує ряд причин, через які, можливо, потрібно побачити, скільки разів отримують доступ до файлів за певний проміжок часу.
Wtower

1
Як пояснено в unix.stackexchange.com/a/12251/20336 inotify API не дає інформації про те, хто отримав доступ до певного файлу. Плюс inotify дійсно не допомагає з’ясувати, хто отримав доступ до файлу минулого тижня. Для цього вам потрібні функції аудиту, що вимагає використання програмного забезпечення під назвою auditd(однак, навіть це не допомагає з'ясувати, хто звернувся до файлу минулого тижня, якщо ви auditdвже не працювали минулого тижня).
Мікко Ранталайнен

3

Загалом, це неможливо. Я бачив файлові системи з достатньою аудиторією, щоб зробити це можливим так чи інакше, але це не загальна річ Unix, ні.

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