Есть ли способ в Unix узнать, кто получил доступ к определенному файлу за последнюю 1 неделю? Это может быть пользовательский или какой-то скрипт, который может переместиться в другое место. Могу ли я получить список имен пользователей, которые обращались к определенному файлу? Как я могу узнать, кто обращается к конкретному файлу ??
Если у вас нет чрезвычайно необычных политик ведения журналов, кто получил доступ к тому, что файл не зарегистрирован (это было бы огромное количество информации). Вы можете узнать, кто был зарегистрирован в какое время в системных журналах; Эта 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
Если вы помещаете наблюдение в каталог, рекурсивно также просматриваются файлы в нем и его подкаталогах.
Спасибо, Жиль. У меня есть этот файл данных, созданный сценарием. Я просто хочу знать, что происходит с этим файлом после его создания ... ни один из других сценариев не выбирает его для дальнейшего процесса, поэтому я хочу посмотреть, не получит ли кто-нибудь доступ к этому файлу вручную
Джек,
@ Джек: Трудно сказать, не зная намного больше о вашей настройке, но пока ничто не удаляет или не переименовывает файл, другие сценарии смогут его найти, независимо от того, кто-то другой обращается к нему. Из вашего комментария я думаю, что вы должны смотреть на то, что происходит, когда вы запускаете свои скрипты.
Жиль "ТАК - перестань быть злым"
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 должен быть одним из (см. Man-страницу для получения дополнительной информации):
inotifywait /path/to/file
inotifywait -e open /pat/to/file
Если вам нужно что-то, что работает на разных платформах ( inotifyспецифично для Linux), и вы используете Java, JNotify работает на разных платформах (Linux, Mac, Windows), абстрагируя базовый API нативной ОС.
Добро пожаловать в Stack Exchange . Ответы представлены не в хронологическом порядке, так что «предыдущий ответ» не показывает, какой ответ вы имеете в виду. Интересно, на какой из двух других вы ссылаетесь в любом случае: у одного нет ничего похожего на хорошую или плохую практику, а другой упоминает API inotify.
Жиль "ТАК - перестань быть злым"
Скорее всего, Глен ссылается на ответ выше с сортировкой голосов по умолчанию. Действительно, самый популярный ответ не дает решения вопроса. Может быть несколько причин, по которым вам может понадобиться узнать, сколько раз к файлам обращаются за определенный период времени.
Wtower
1
Как объясняется в unix.stackexchange.com/a/12251/20336, inotify API не предоставляет информацию о том, кто получил доступ к данному файлу. Плюс inotify действительно не помогает выяснить, кто получил доступ к файлу на прошлой неделе. Для этого вам нужны функции аудита, для которых требуется использовать программное обеспечение под названием auditd(однако даже это не помогает выяснить, кто обращался к файлу на прошлой неделе, если вы auditdуже не работали на прошлой неделе).
Микко Ранталайнен
3
Это, в общем, неосуществимо. Я видел файловые системы с достаточным количеством одитингов, чтобы сделать это так или иначе, но это не обычная вещь Unix, нет.
syslogd access log file /var/log/audit.log at 10:01\nsyslogd access log file /var/log/audit.log at 10:02\n...
Пример выше с inotifywait должен быть одним из (см. Man-страницу для получения дополнительной информации):
Или с режимом мониторинга и отметкой времени:
источник
Предыдущий ответ - не лучшая практика для выполнения того, что вы просите. У Linux есть API для этого.
inotify
API http://linux.die.net/man/7/inotifyinotify
API напрямуюinotify
inotify
специфично для Linux), и вы используете Java, JNotify работает на разных платформах (Linux, Mac, Windows), абстрагируя базовый API нативной ОС.источник
auditd
(однако даже это не помогает выяснить, кто обращался к файлу на прошлой неделе, если выauditd
уже не работали на прошлой неделе).Это, в общем, неосуществимо. Я видел файловые системы с достаточным количеством одитингов, чтобы сделать это так или иначе, но это не обычная вещь Unix, нет.
источник