这是一个假设的问题,不是我目前遇到的问题。
如何检测现在哪个进程正在使用某个文件或在过去?
找出哪个进程正在访问filename
,lsof filename
或者fuser filename
将执行该工作。但是如果想知道访问了哪些进程怎么办filename
在过去 24 小时内?
人们可以逃脱这个丑陋的(*)黑客攻击
while true; do fuser filename; sleep 1; done
并让它在下一个学期运行 24 小时。但在不建立完整审计框架的情况下,是否真的有更好的系统呢?
(*) 更不用说fuser
如果花费时间少于 1 秒,可能无法检测到访问...
答案1
如果您的系统启用了审核,您可以使用该子系统来审核对特定文件的访问。
例如,要审核打开(或尝试打开)文件的文件/etc/shadow
,您可以使用以下规则:
auditctl -a exit,always -S open -F path=/etc/shadow
稍后,您可以使用此命令列出与访问此文件相对应的审计事件:
ausearch -f /etc/shadow
请注意,您需要成为 root 才能配置和查询审核系统。
请参阅审计控制(8)手册页了解有关如何设置规则和澳大利亚研究中心(8)有关如何查询审核日志的详细信息,请参阅手册页。
如果您没有启用审核,您应该查找有关如何针对您的 Linux 发行版执行此操作的信息,因为详细信息会有所不同。