
Ich habe eine Anwendung, die auf die Datei /etc/hostname zugreift. Diese Anwendung soll 1 Instanz pro Maschine ausgeführt werden. Aus Debugginggründen führe ich jedoch mehrere Instanzen auf derselben Maschine aus.
Daher möchte ich für jeden einen anderen /etc/Hostnamen (und möglicherweise andere Dateien) haben, ohne den Code manuell ändern zu müssen, um nach diesen Dateien auf verschiedenen Pfaden zu suchen.
Das Ausführen jeder Instanz in einem Container ist keine praktikable Option, da die Anwendung einen Raw Socket über eine drahtlose Schnittstelle nutzt (ist es überhaupt möglich, einem Container direkten Zugriff auf die Schnittstelle zu gewähren?)
Ich habe nur so getan, als würde ich jede Instanz der Anwendung „austricksen“, damit sie beim Zugriff auf dieselbe reale Datei auf unterschiedliche Dateien zugreift.
Wie kann ich das machen?
Antwort1
Dies können Sie tun mitfirejail
.
Firejail ist ein SUID-Programm, das das Risiko von Sicherheitsverletzungen reduziert, indem es die Ausführungsumgebung nicht vertrauenswürdiger Anwendungen mithilfe von Linux-Namespaces und seccomp-bpf einschränkt. Es ermöglicht einem Prozess und allen seinen Nachkommen, ihre eigene private Ansicht der global gemeinsam genutzten Kernelressourcen wie Netzwerkstapel, Prozesstabelle und Mount-Tabelle zu haben.
Beispiel:
# cat /etc/hostname
myhost
# firejail --noprofile --quiet --writable-etc --bind=/etc/timezone,/etc/hostname cat /etc/hostname
Europe/Warsaw
Sie möchten wahrscheinlich einige Profile definieren, um problemlos mehrere Instanzen der Anwendung ausführen zu können. Studieren Sie man 1 firejail
und man 5 firejail-profile
.