%20nur%20auf%20bestimmte%20Verzeichnisse.png)
Ist es möglich, den Zugriff von Programmen auf bestimmte Verzeichnisse zu beschränken, beispielsweise aufViberauf Fedora und erzwingen, dass nur darunter /home/username/.local/share/viber/exchange
und in keinen anderen Verzeichnissen gelesen werden kann?
Ich habe es geschafft, zu erstellen und auszuführenViberals ein anderes user:group
( viber:viber
). Wenn ich versuche, von Viber aus Dateien zu öffnen, die mir oder einem anderen Benutzer gehören, kann es sie nicht lesen. Ziel erreicht, aber teilweise. Jetzt bin ich auf ein weiteres Problem gestoßen, nämlichViberfunktioniert nur mit Nachrichten und wenn ich versuche, einen Anruf zu tätigen, sagt es, dass es weder Mikrofon noch Lautsprecher finden kann? Es scheint, dass ich weiß, warum (ich führe X Server (GNOME) als ich selbst aus undViberals viber:viber
( user:group
) ), aber ich bin nicht sicher, wie ichviberKann der Benutzer Mikrofon und Lautsprecher verwenden, während der X-Server unter meinem Namen ausgeführt wird?
Vielleicht muss ich viber
einen Benutzer zu einer bestimmten Gruppe hinzufügen? Wahrscheinlich gibt es einige Workarounds mit SELinux? Wenn ja, könnten Sie ein geeignetes Richtlinienbeispiel angeben? :D
Viberscheint großartig zu sein, ist aber nicht Open Source und nur Gott weiß, was im Quellcode dieser vorkompilierten Software steht!
Antwort1
Verwenden vonchroot
Erstellen Sie eine kleineWurzelverzeichnismit /bin
, /usr
, /lib
, /tmp
und so weiter (je nach Bedarf), kopieren Sie alle Ihre Sachen in dieseneue Wurzel, dann chroot
in dieses Verzeichnis ausführen.
chroot
Der Befehl ist ein sehr altes Un*x-Tool, das genau zu diesem Zweck erstellt wurde.
Sie könntenbindenVerzeichnis inContainerdurch die Nutzung mount --bind
.
Schauen Sie sich man chroot
und an man mount
!
Kleiner Versuch:
ldd /bin/bash
linux-vdso.so.1 => (0x00007fff3e4b5000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f06290a1000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0628e9d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0628b12000)
/lib64/ld-linux-x86-64.so.2 (0x00007f06292e8000)
sudo -s
Achtung, von dort!
mkdir /tmp/test/chrooted/lib64
cp -t /tmp/test/chrooted/lib/x86_64-linux-gnu/ \
/lib/x86_64-linux-gnu/{libc.so.6,libdl.so.2,libtinfo.so.5}
cp -t /tmp/test/chrooted/lib64 /lib64/ld-linux-x86-64.so.2
chroot /tmp/test/chrooted
Ich bin eingesperrt!
ls
bash: ls: command not found
Es ist kein ls
Befehl darin enthalten /bin
!
Mit openvz
oderlxc
Nächster Schritt inleichte Virtualisierungopenvz
besteht darin, eines von oder lxc
(oder ein anderes, vielleicht) auszuführen .
Diese Werkzeuge tun ungefähr dasselbe wie chroot
, verwenden aberisolierter Kernel-Namespace. Damit können Sie Netzwerkschnittstellen oder andere Geräte sowie einige Einschränkungen hinsichtlich Speicher, CPU und anderen Ressourcen simulieren ...
Mit dieser Art vonleichte Virtualisierung, Sie können Verzeichnisse auf dieselbe Weise freigeben wie mithilfe chroot
von mount --bind
(oder darunter, openvz
vielleicht mount -t simfs
könnte die Verwendung nützlich sein).
Starke Virtualisierung
kvm
Als Nächstes können Sie oder xen
eine andere proprietäre Virtualisierungssoftware verwenden …
Aber von da an bedeutet das Teilen von Verzeichnissen eine Art(Pseudo-)Netzwerkdienst...