Answers:
除非您制定了非常不寻常的日志记录策略,否则谁访问的文件将不会被记录(这将是大量信息)。您可以在系统日志中找到谁在什么时间登录。该last
命令为您提供了登录历史记录,其他日志(例如)/var/log/auth.log
将告诉您用户如何进行身份验证以及他们从何处登录(哪个终端,如果是远程则是哪个主机)。
上次读取文件的日期称为文件访问时间,简称为time。所有的UNIX文件系统都可以存储它,但是许多系统不记录它,因为它会(通常很小)降低性能。ls -ltu /path/to/file
或stat /path/to/file
显示文件的访问时间。
如果用户访问了该文件并且没有试图隐藏其踪迹,那么他的shell历史记录(例如~/.bash_history
)可能会有线索。
要确定现在打开文件的人或谁,请使用lsof /path/to/file
。
要记录将来文件发生的情况,有几种方法:
使用inotifywait。当有人阅读时,inotifywait -e access /path/to
会打印一行。该界面不会告诉您谁访问了该文件。您可以在此行出现时立即打电话,但是存在竞争状况(lsof开始运行时访问可能已结束)。/path/to/ ACCESS file
file
lsof /path/to/file
LoggedFS是可堆叠的文件系统,提供了文件系统树的视图,并且可以通过该视图对所有访问进行更高级的记录。要配置它,请参阅LoggedFS配置文件语法。
您可以使用Linux的审核子系统来记录大量内容,包括文件系统访问。确保auditd
守护程序已启动,然后配置要使用的日志auditctl
。每个记录的操作都记录在/var/log/audit/audit.log
(在典型分布中)。要开始观看特定文件:
auditctl -w /path/to/file
如果将监视放在目录中,则将以递归方式监视其中的文件及其子目录。
syslogd access log file /var/log/audit.log at 10:01\nsyslogd access log file /var/log/audit.log at 10:02\n...
先前的答案不是执行您所要求的最佳实践。Linux为此提供了一个API。该inotify
API http://linux.die.net/man/7/inotify
inotify
直接调用APIinotify
inotify
特定于Linux)运行并且使用Java,则JNotify可以跨平台(Linux,Mac,Windows)运行,从而抽象出本机OS的底层API。auditd
(但是,除非您上周已auditd
在运行,否则即使这样也无法帮助确定上周谁访问了该文件)。