如何检测哪个进程现在或过去使用过文件

dr_*_*dr_ 6 lsof audit fuser

这是一个假设性的问题,而不是我目前遇到的问题。

你如何检测哪个进程现在或过去使用了一个文件?

找出哪个进程正在访问filenamelsof filenamefuser filename将完成工作。但是,如果想知道filename 过去 24 小时内访问哪些进程怎么办?

人们可以摆脱这个丑陋的 (*) hack

while true; do fuser filename; sleep 1; done
Run Code Online (Sandbox Code Playgroud)

让它在另一个学期运行 24 小时。但实际上有没有更好的系统,而不建立一个完整的审计框架?



(*) 更不用说fuser如果不到 1 秒可能无法检测到访问...

fil*_*den 7

如果您的系统启用了审计,您可以使用该子系统来审计对特定文件的访问。

例如,要审核打开(或尝试打开)/etc/shadow文件的文件,您可以使用以下规则:

auditctl -a exit,always -S open -F path=/etc/shadow
Run Code Online (Sandbox Code Playgroud)

稍后,您可以使用此命令列出与访问此文件对应的审计事件:

ausearch -f /etc/shadow
Run Code Online (Sandbox Code Playgroud)

请注意,您需要以 root 身份配置和查询审计系统。

有关如何设置规则和ausearch(8) 的更多详细信息,请参阅auditctl(8)手册页有关如何查询审计日志的详细信息,手册页。

如果您没有启用审计,您应该查找有关如何执行特定于您的 Linux 发行版的信息,因为详细信息会有所不同。