Ale*_*der 9 kernel system-calls files ld
我有一个读取文件的应用程序。我们称之为processname和文件~/.configuration。当processname运行时,它总是读取~/.configuration并且不能以不同的方式配置。还有其他应用程序依赖于“~/.configuration”,之前和之后,但不是在processname运行时。
在替换~/.configuration内容的脚本中包装processname是一个选项,但我最近断电(当内容被换出时),我丢失了所述文件的先前内容,所以这是不可取的。
有没有办法(也许使用与 远相关的东西LD_DEBUG=files processname
?)来欺骗进程在尝试读取特定文件时读取不同的内容?在可执行文件中搜索和替换文件名有点侵入性,但应该也能工作。
我知道可以编写一个内核模块来接管open()
调用(https://news.ycombinator.com/item?id=2972958),但是有没有更简单或更干净的方法?
编辑:在processname可执行文件中搜索~/.configuration 时,我发现它在读取~/.configuration之前尝试读取另一个文件名。问题解决了。
在最近版本的Linux,你可以取消共享的安装命名空间。也就是说,您可以启动以不同方式查看虚拟文件系统的进程(安装不同的文件系统)。
这也可以用 完成chroot
,但unshare
更适合您的情况。
像 一样chroot
,您需要unshare
对 mount 命名空间具有特权的超级用户。
所以,假设你有~/.configuration
和~/.configuration-for-that-cmd
文件。
您可以启动一个进程,它~/.configuration
实际上是~/.configuration-for-that-cmd
在那里绑定安装,并that-cmd
在那里执行。
喜欢:
sudo unshare -m sh -c "
mount --bind '$HOME/.configuration-for-that-cmd' \
'$HOME/.configuration' &&
exec that-cmd"
Run Code Online (Sandbox Code Playgroud)
that-cmd
并且它的所有后代进程都会看到不同的~/.configuration
.
that-cmd
以上将作为 运行root
,sudo -u another-user that-cmd
如果需要作为another-user运行,请使用。
归档时间: |
|
查看次数: |
1421 次 |
最近记录: |