5 security linux filesystems audit inotify
我需要找出安装程序所做的所有文件系统修改。最有可能安装的包是 rpm 或 deb,但应用程序当然可以简单地复制或编译并使用 configure;make;make install 方式安装。即使 rpm 和 deb 有文件列表,它们的安装后脚本也可以进行额外的文件系统修改。
我首先去寻找可以监视另一个应用程序以查找另一个应用程序所做的所有文件系统修改的应用程序。我没有找到。
接下来我研究了分层文件系统,在开始安装应用程序之前,我想我会放入一个分层文件系统,然后将应用程序安装在分层文件系统上,然后找出该层中发生的所有修改。我能找到的最好的是mini_fo但它似乎自 2006 年以来就没有得到维护。它似乎也不能只是覆盖在 / (这会隐藏层中的一些东西)。
然后我研究了基于 inotify 的解决方案,但从 / 开始监视所有内容似乎是不切实际的。例如,inotifywatch (linux.die.net/man/1/inotifywatch) 提到默认手表的限制只有 8k。安装观察者也需要一些时间。似乎也存在错误,新创建的目录不会立即被监视,因此可能会错过它们中的更改。
除了在安装前后从文件系统中获取快照并进行比较之外,还有其他方法可以实现我想要做的事情吗?
我很想尝试通过strace运行您的安装。它会有点嘈杂,但是在它记录的所有其他内容中,您应该能够看到应该看到的所有内容。
这是一个命令,它似乎接近于显示安装过程中的所有文件访问,而没有太多噪音。
sudo strace -o /tmp/install.log -f -e trace=file apt-get install package
Run Code Online (Sandbox Code Playgroud)
这个问题已经得到了回答,但无论如何我都会投入我的工作。如果您只想查看文件是否被创建、删除或更改,您可以执行以下操作:
find / -xdev -printf '%p\t%c\n' |sort >/tmp/before
rpm/dpkg/apt-get/yum/whatever
find / -xdev -printf '%p\t%c\n' |sort >/tmp/after
diff -u /tmp/before /tmp/after |less
Run Code Online (Sandbox Code Playgroud)
就是这样。它显然不会告诉您文件是如何更改的,但至少您会知道它确实以某种方式发生了更改。