在 Linux 下,是否可以编写一个脚本来统计本地文件系统中某个文件被访问的次数以及访问者是谁?
如果可能的话,我该如何监控这样的事情并创建日志?
答案1
这审计系统是一个专用的守护进程,它监视文件系统资源并将日志条目写入/var/log/audit.log特定用户何时访问文件。
这审计守护进程需要启动并从 /etc/auditd.conf 读取其配置
您可以使用指定自己的规则auditctl
,例如
$ sudo auditctl -w /etc/passwd -p war -k passwd-file
在哪里 -p 战争表示 (写) 、 (追加) 和 (读) -k‘我的规则名称’表示在以下情况下将在审计日志中显示的短语:-p 战争发生
当你想真正看到哪些用户访问了哪些受监控的文件系统资源时,使用auditsearch
和auditreport
过滤日志'我的规则名称'报告分录及总结。
答案2
当然,可以通过文件的“atime”属性找出上次访问文件的时间,而且有几种方法可以做到这一点。要确定哪个用户访问了文件则比较棘手,而且取决于上下文,例如,是通过 shell 访问的吗?是通过 GUI 应用程序访问的吗?
要查看文件的 atime,请使用ls
-u 选项:
$ ls -lu some_file
例如,要查找 /home 目录中过去一小时内访问过的所有文件,可以使用以下find
命令
$ sudo find /home/ -amin -60
您还可以使用以下命令获取有关文件的更多详细信息stat
:
$ stat some_file
实际上,这里是一个脚本的链接,该脚本检查stat
指定目录中文件的 atime(使用)。
重读您的问题后,我意识到您对“文件被访问了多少次”感兴趣。没有特定的 *nix 命令来确定此信息,因此您必须通过下面提到的方法之一来查看日志文件访问。
关于确定哪些用户访问了文件的问题,*nix 不会专门记录这一点。假设系统管理员将通过权限控制对文件和目录的访问。但是,您可以尝试以下几种方法:
- 使用
ps
并fuser
查看哪些用户当前正在访问文件 - 强制用户使用
sudo
访问文件 - sudo 记录到文件 /var/log/auth.log - 尽管此选项可能会严重影响生产力(和信任) - 查看 SElinux ACL 和日志
- 修改(使用别名)系统范围的 shell 配置文件(/etc/配置文件)将 atime 和用户信息记录到专用日志文件
- 按照你的问题的评论中的建议,编写一个 shell 脚本来记录 atime 和用户信息,并使用该脚本包装 GUI 应用程序(即修改启动器中的“命令”条目
请注意,为了在每次用户或进程访问磁盘时将 atime 写入磁盘,您必须atime
在文件系统的/etc/fstab条目(讨论这里)