重定向文件访问(Redirect file access)

2019-10-21 18:28发布

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

例如,一个线程想读/etc/mysql/my.cnf,我想改变接入到〜/ my.cnf中,或者如果我跑touch /etc/test.config我想要的文件被重定向到~/somefolder/etc/test.config

我要寻找最好的C,C一libary ++该工程的Linux / Unix。

提前致谢

Answer 1:

你可以写你的程序开始运行时被预加载的共享对象。 在。所以你会重新定义的libc函数open() 当呼叫方(即是越来越上当的程序)通过作为参数字符串/etc/mysql/my.cnf ,你最好别打开~/my.cnf ,返回打开的文件描述符。 来电者不会知道其中的差别。

当然,你的共享对象就需要调用“真正” open()来打开文件句柄; 您可以通过获得一个指向原来的libc函数dlsym()

这似乎过于复杂,但其实它不是,它就像一个魅力。 我已经使用了好几次,我不得不傻瓜,我没有足够的资源用于方案; 它简单地就像上了发条。

如果你想看到一个概念证明,看看我的博客 ,我写了起来。 编码愉快!



Answer 2:

在Linux中,你可以使用绑定安装来映射目录或文件到其他路径,并且每个进程挂载命名空间做了具体的应用。

见这个问题。

实施例1:使用PROOT

$ 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:使用取消共享(1)

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

实施例3:使用取消共享(2)

看到这个帖子: http://glandium.org/blog/?p=217 。



文章来源: Redirect file access