使用 LD_PRELOAD 查找文件系统覆盖

使用 LD_PRELOAD 查找文件系统覆盖

我正在寻找一个使用 LD_PRELOAD 加载的共享库,它将修改文件系统对客户端程序的视图。

理想情况下,我想选择文件系统根(或使用 / 作为根)并通过重命名文件名来覆盖文件系统。

例如,我可能想告诉我的程序在 /usr/lib32/* 中寻找 /usr/lib/*。

您知道这样的程序吗?

谢谢。

答案1

动静脉畸形这有点像这样,但我绝对不会推荐这种技术用于任何安全意识强的地方,因为你必须修补所有现有的和未来图书馆里的东西,文件......

另一种方法可能是创建 chroot / bind-mount farm。这样做还有一个好处,就是你可以将 --bind 内容挂载为只读,这很好。

答案2

塑料纤维可能会有帮助,尽管我思考(从阅读来看,我还没有尝试过)它允许您在某个挂载点有效地创建一个合成文件系统(有点像 FUSE,但使用 LD_PRELOAD)。

因此,您可以在 处创建一个合成根/tmp/myfs,但是您仍然需要一个类似 chroot 的工具来呈现这个构造的位置,就好像它是文件系统的根一样。fakechroot是一个不需要root的明显选择,但是它也使用,LD_PRELOAD所以我不确定这两个工具是否会互相混淆。


更新:这有点令人困惑,但我现在已经尝试过了 - plasticfs 的 1.11 及以上版本使用 LD_PRELOAD(实际上包含一个“chroot”过滤器,因此您不需要使用 fakechroot)。所以这可能是您想要的,但是:

  • 在我的测试中它运行得不是很好(创建了不应该的文件,错过了应该存在的文件)

  • 较新的版本(1.11 于 2007 年发布,现在已经更新到 1.14)完全放弃了 LD_PRELOAD,转而使用 FUSE 和一对mount状态umount命令,这也消除了将其用作 chroot 的能力。

相关内容