Beschränken Sie den Programmzugriff (Viber für Linux) nur auf bestimmte Verzeichnisse

Beschränken Sie den Programmzugriff (Viber für Linux) nur auf bestimmte Verzeichnisse

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/exchangeund 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 vibereinen 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, /tmpund so weiter (je nach Bedarf), kopieren Sie alle Ihre Sachen in dieseneue Wurzel, dann chrootin dieses Verzeichnis ausführen.

chrootDer 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 chrootund 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 lsBefehl darin enthalten /bin!

Mit openvzoderlxc

Nächster Schritt inleichte Virtualisierungopenvzbesteht 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 chrootvon mount --bind(oder darunter, openvzvielleicht mount -t simfskönnte die Verwendung nützlich sein).

Starke Virtualisierung

kvmAls Nächstes können Sie oder xeneine andere proprietäre Virtualisierungssoftware verwenden …

Aber von da an bedeutet das Teilen von Verzeichnissen eine Art(Pseudo-)Netzwerkdienst...

verwandte Informationen