我有一个访问 /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 firejail
和man 5 firejail-profile
。