1

有没有办法监视和重定向线程或进程的文件访问?

例如,一个线程想要读取 /etc/mysql/my.cnf 并且我想更改对 ~/my.cnf 的访问权限,或者如果我运行touch /etc/test.config我希望将文件重定向到~/somefolder/etc/test.config.

我正在寻找适用于 Linux/Unix 的 C、C++ 库。

提前致谢

4

2 回答 2

1

您可以编写一个在程序开始运行时预加载的共享对象。在 .so 中,您将重新定义 libc 函数open()。当调用者(被愚弄的程序)作为参数传递 string/etc/mysql/my.cnf时,您将打开~/my.cnf并返回打开的文件描述符。来电者不知道有什么区别。

您的共享对象当然需要调用“真实”open()来打开文件句柄;您可以使用dlsym().

这似乎过于复杂,但实际上并非如此,它就像一个魅力。我曾多次使用它来欺骗我没有源代码的程序;它就像发条一样工作。

如果您想查看概念证明,请查看我写的博客。快乐编码!

于 2015-02-01T12:16:27.190 回答
1

在 linux 中,您可以使用绑定挂载将目录或文件映射到另一个路径,并使用每个进程挂载命名空间来为特定应用程序执行此操作。

看到这个问题。

示例 1:使用

$ proot -b ~/alternate_hosts:/etc/hosts
# echo '1.2.3.4 google.com' > /etc/hosts
# resolveip google.com
# IP address of google.com is 1.2.3.4

示例 2:使用unshare(1)

$ unshare -m
# touch foo bar
# mount -o bind foo bar
# echo hello > foo
# cat bar
hello

示例 3:使用unshare(2)

见这篇文章:http ://glandium.org/blog/?p=217 。

于 2015-07-17T12:47:26.820 回答