这是一个假设性问题,而不是我目前遇到的问题。
您如何检测现在或过去哪个进程使用了文件?
找出哪个进程正在访问filename
,lsof filename
或者fuser filename
将完成工作。但是,如果想知道filename
过去 24 小时内访问了哪些进程怎么办?
一个人可以逃脱这个丑陋的(*)黑客
while true; do fuser filename; sleep 1; done
并让它在另一个学期运行 24 小时。但实际上有没有更好的系统,而不建立一个完整的审计框架?
(*) 更不用说fuser
如果不到 1 秒可能无法检测到访问...
如果您的系统启用了审核,您可以使用该子系统审核对特定文件的访问。
例如,要审核打开(或尝试打开)文件的
/etc/shadow
文件,您可以使用以下规则:稍后,您可以使用此命令列出与访问此文件相对应的审计事件:
请注意,您需要是 root 才能配置和查询审计系统。
有关如何设置规则的更多详细信息,请参见auditctl(8)手册页,有关如何查询审计日志的详细信息,请参见ausearch(8)手册页。
如果您没有启用审核,您应该查找有关如何针对您的 Linux 发行版执行此操作的信息,因为详细信息会有所不同。