如何为单个程序虚拟化文件?

如何为单个程序虚拟化文件?

我有一个访问 /etc/hostname 文件的应用程序。此应用程序应在每台机器上执行 1 个实例。但是,出于调试目的,我在同一台机器上运行了多个实例。

因此,我希望为每个文件设置不同的 /etc/hostname(也许还有其他文件),而不必手动更改代码来在不同的路径上查找这些文件。

在容器中运行每个实例并不是一个可行的选择,因为应用程序正在通过无线接口利用原始套接字(是否可以直接访问容器的接口?)

我只是假装“欺骗”应用程序的每个实例在访问同一个真实文件时访问不同的文件。

我怎样才能做到这一点?

答案1

你可以这样做firejail

Firejail 是一个 SUID 程序,它通过使用 Linux 命名空间和 seccomp-bpf 限制不受信任应用程序的运行环境来降低安全漏洞的风险。它允许进程及其所有后代拥有对全局共享内核资源(例如网络堆栈、进程表、挂载表)的私有视图。

例子:

# cat /etc/hostname
myhost
# firejail --noprofile --quiet --writable-etc --bind=/etc/timezone,/etc/hostname cat /etc/hostname
Europe/Warsaw

您可能希望定义几个配置文件,以便轻松运行应用程序的多个实例。学习man 1 firejailman 5 firejail-profile

相关内容