
У меня есть приложение, которое обращается к файлу /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
.