如何仅为特定进程更改文件内容?

hum*_*ace 5 process chroot files namespace

出于这个问题的目的,让我们假设文件/path/to/file系统中有一个文件 ( ) 具有如下特定内容:

$> cat /path/to/file
this is the content of the
file /path/to/file 
Run Code Online (Sandbox Code Playgroud)

我对几乎所有正在运行的进程(并具有读取此文件的权限)、读取此内容感到满意。
但是(这是问题的核心)应该有一个特定的过程,在读取时/path/to/file应该提供不同的文件内容。

$> cat /path/to/file
this is the DIFFERNT content of the
file /path/to/file 
Run Code Online (Sandbox Code Playgroud)

如何以某种方式欺骗特定进程的文件内容?

我的一些猜测,走哪条路将是与以下相关的孤独:

  • 符号链接技巧
  • (linux)命名空间(文件系统命名空间)技巧
  • chroot 诡计
  • $LD_PRELOAD 勾搭技巧
  • 覆盖文件

我的平台是 GNU/linux,但如果有一种 POSIX 方式来实现它会更好:)

更新

什么是好的解决方案/答案?

一个好的解决方案/答案的标准是可以实现“特定进程的不同文件内容”,而无需 root 用户的交互,即使理想情况下,欺骗文件首先不应该是用户可写的。

另一个好的标准是,显示给进程的文件进程的修改是特定的,理想情况下没有竞争条件。

背景

Mozilla firefox 使用 2 个 zip 存档/usr/lib/firefox/omni.ja/usr/lib/firefox/browser/omni.ja,其中包含相当多的 firefox 代码(主要是用 Javascript 编写的内容),通过欺骗文件,我将能够修改我的 firefox 版本(包括一些我无法再实现的功能)扩展,提供放弃 XPCOM 支持和不喜欢插件签名强制)

Sté*_*las 7

是的,挂载命名空间是一种方法:

$ cat file
foo
$ cat other-file
bar
$ sudo unshare -m zsh -c 'mount --bind other-file file; USERNAME=$SUDO_USER; cat file'
bar
$ cat file
foo
Run Code Online (Sandbox Code Playgroud)

以上zsh用于恢复被劫持的cat命令的原始用户的uid/gids。