Linux文件访问监控


20

unix中有什么方法可以找出谁在过去1周内访问过某些文件?它可能是用户,也可能是脚本将它ftp到其他地方。我可以获取访问某些文件的用户名列表吗?如何找出谁在访问特定文件?

Answers:


39

除非您制定了非常不寻常的日志记录策略,否则谁访问的文件将不会被记录(这将是大量信息)。您可以在系统日志中找到谁在什么时间登录。该last命令为您提供了登录历史记录,其他日志(例如)/var/log/auth.log将告诉您用户如何进行身份验证以及他们从何处登录(哪个终端,如果是远程则是哪个主机)。

上次读取文件的日期称为文件访问时间,简称为time。所有的UNIX文件系统都可以存储它,但是许多系统不记录它,因为它会(通常很小)降低性能。ls -ltu /path/to/filestat /path/to/file显示文件的访问时间。

如果用户访问了该文件并且没有试图隐藏其踪迹,那么他的shell历史记录(例如~/.bash_history)可能会有线索。

要确定现在打开文件的人或谁,请使用lsof /path/to/file

要记录将来文件发生的情况,有几种方法:

  • 使用inotifywait。当有人阅读时,inotifywait -e access /path/to会打印一行。该界面不会告诉您谁访问了该文件。您可以在此行出现时立即打电话,但是存在竞争状况(lsof开始运行时访问可能已结束)。/path/to/ ACCESS filefilelsof /path/to/file

  • LoggedFS是可堆叠的文件系统,提供了文件系统树的视图,并且可以通过该视图对所有访问进行更高级的记录。要配置它,请参阅LoggedFS配置文件语法

  • 您可以使用Linux的审核子系统来记录大量内容,包括文件系统访问。确保auditd守护程序已启动,然后配置要使用的日志auditctl。每个记录的操作都记录在/var/log/audit/audit.log(在典型分布中)。要开始观看特定文件:

    auditctl -w /path/to/file
    

    如果将监视放在目录中,则将以递归方式监视其中的文件及其子目录。


谢谢吉尔..我有这个由脚本创建的dat文件。我只想知道该文件创建后会发生什么情况。.其他脚本都没有选择该文件以进行进一步处理,所以我想看看是否有人手动访问了该dat文件
杰克(Jack

@Jack:很难不了解您的设置而很难说,但是只要没有任何操作可以删除或重命名该文件,其他脚本都可以在这里找到它,无论是否有人在访问它。根据您的评论,我认为您应该查看运行脚本时发生的情况。
吉尔(Gilles)'所以

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程序来完成您想要的操作,而inotify直接调用API
  2. 您可以使用kfsmd,http://www.linux.com/archive/feature/124903:守护程序inotify
  3. 如果您希望某些东西可以跨平台(inotify特定于Linux)运行并且使用Java,则JNotify可以跨平台(Linux,Mac,Windows)运行,从而抽象出本机OS的底层API。

3
欢迎使用Stack Exchange。答案不是按时间顺序排列的,因此“以前的答案”不会传达您的意思。我想知道您到底是指另外两个中的哪一个:一个没有什么看起来不错或不好的做法,而另一个确实提到了inotify API。
吉尔(Gilles)'所以

Glen最有可能使用默认的投票排序方式来参考上述答案。确实,最流行的答案未能提出该问题的解决方案。出于多种原因,可能需要查看在给定时间范围内文件被访问了多少次。
Wtower

1
unix.stackexchange.com/a/12251/20336中所述, inotify API不提供有关访问了给定文件的信息。再加上inotify确实无法帮助找出上周谁访问了该文件。为此,您需要审核功能,这需要使用称为的软件auditd(但是,除非您上周已auditd在运行,否则即使这样也无法帮助确定上周谁访问了该文件)。
Mikko Rantalainen

3

通常,这是不可行的。我已经看到文件系统具有足够的审计功能,从而使一种方法或另一种方法成为可能,但这不是一般的Unix,不是。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.