
我有一個存取 /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
。