Как виртуализировать файл для одной программы?

Как виртуализировать файл для одной программы?

У меня есть приложение, которое обращается к файлу /etc/hostname. Это приложение должно выполняться по одному экземпляру на машину. Однако в целях отладки я запускаю несколько экземпляров на одной машине.

Поэтому мне бы хотелось иметь разные /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.

Связанный контент