Wäre ich root, könnte ich einfach einen Dummy-Benutzer / eine Dummy-Gruppe erstellen, die Dateiberechtigungen entsprechend festlegen und den Prozess als dieser Benutzer ausführen. Wie auch immer, gibt es eine Möglichkeit, dies zu erreichen, ohne root zu sein?
permissions
not-root-user
jails
Tobias Kienzler
quelle
quelle
chroot
würde natürlich da reinpassen, aber dann bist du auch nicht root.Antworten:
Weitere ähnliche Fragen mit mehr Antworten, die es zu beachten gilt:
HINWEIS: Einige der dort gegebenen Antworten verweisen auf bestimmte Lösungen, die hier noch nicht erwähnt wurden.
Tatsächlich gibt es einige Jailing-Tools mit unterschiedlicher Implementierung, aber viele von ihnen sind entweder nicht sicher (wie
fakeroot
,LD_PRELOAD
-basiert) oder nicht vollständig (wiefakeroot-ng
,ptrace
-basiert) oder erfordern root (chroot
oderplash
werden bei fakechroot erwähnt) Warnschild ).Dies sind nur Beispiele; Ich dachte daran, sie alle nebeneinander aufzulisten, mit Angabe dieser beiden Funktionen ("Kann man vertrauen?", "Muss Root eingerichtet werden?"), Möglicherweise bei Virtualisierungsimplementierungen auf Betriebssystemebene .
Im Allgemeinen decken die Antworten dort den gesamten beschriebenen Bereich von Möglichkeiten und noch mehr ab:
virtuelle Maschinen / Betriebssystem
Kernel-Erweiterung (wie SELinux)
Chroot
Chroot-basierte Hilfsprogramme (die jedoch als root festgelegt werden müssen, da
chroot
root erforderlich ist oder möglicherweisechroot
in einem isolierten Namespace ausgeführt werden kann - siehe unten):[um ein bisschen mehr über sie zu erzählen!]
Bekannte chroot-basierte Isolationstools:
hsh-run
undhsh-shell
befehlen. ( Hasher wurde für die sichere und wiederholbare Erstellung von Software entwickelt.)ptrace
Eine andere vertrauenswürdige Isolationslösung (neben einer
seccomp
-basierten ) wäre das vollständige Abfangen von Systemanrufenptrace
, wie in der Manpage erklärt fürfakeroot-ng
:Wie Sie jedoch lesen können,
fakeroot-ng
ist es selbst nicht für diesen Zweck konzipiert.(Übrigens, ich frage mich, warum sie sich dafür entschieden haben, den
seccomp
auf Chrom basierenden Ansatz anstelle eines auf Chrom basierenden Ansatzes zu verwendenptrace
...)Von den oben nicht erwähnten Tools habe ich Geordi für mich selbst notiert , weil mir gefallen hat, dass das Steuerungsprogramm in Haskell geschrieben ist.
Bekannte ptrace-basierte Isolationstools:
fakeroot-ng
seccomp
Ein bekannter Weg, um eine Isolation zu erreichen, ist der in Google Chromium verwendete, separate Sandbox-Ansatz . Bei diesem Ansatz wird jedoch vorausgesetzt, dass Sie einen Helfer schreiben, der einige (die zulässigen) der "abgefangenen" Dateizugriffe und andere Systemaufrufe verarbeitet. und bemühen Sie sich natürlich auch, die Systemaufrufe "abzufangen" und sie an den Helfer weiterzuleiten (möglicherweise würde dies sogar das Ersetzen der abgefangenen Systemaufrufe im Code des gesteuerten Prozesses bedeuten; es klingt also nicht Um ganz einfach zu sein: Wenn Sie interessiert sind, lesen Sie lieber die Details als nur meine Antwort.
Weitere Informationen (aus Wikipedia):
(Der letzte Punkt scheint interessant zu sein, wenn man eine allgemeine
seccomp
Lösung außerhalb von Chrom sucht . Es gibt auch einen Blog-Beitrag, den der Autor von "seccomp-nurse" lesen sollte : SECCOMP als Sandboxing-Lösung? )Die Illustration dieses Ansatzes aus dem Projekt "seccomp-nurse" :
Ein "flexibler" Weg in die Zukunft von Linux?
Früher erschienen 2009 auch Vorschläge, den Linux-Kernel zu patchen , damit der
seccomp
Modus flexibler wird - damit "viele der Akrobatik, die wir derzeit brauchen, vermieden werden können". ("Akrobatik" bezieht sich auf die Komplikationen beim Schreiben eines Helfers, der viele möglicherweise unschuldige Systemaufrufe im Namen des inhaftierten Prozesses ausführen und die möglicherweise unschuldigen Systemaufrufe im inhaftierten Prozess ersetzen muss.) In einem LWN-Artikel wurde zu diesem Punkt Folgendes geschrieben:Diese "flexible Lösung" würde die Möglichkeiten von Linux der Bereitstellung der gewünschten Funktion im Betriebssystem näher bringen, ohne dass komplizierte Hilfsprogramme geschrieben werden müssten.
(Ein Blogeintrag mit im Wesentlichen demselben Inhalt wie diese Antwort: http://geofft.mit.edu/blog/sipb/33 .)
Namespaces (
unshare
)Das Isolieren durch Namespaces (
unshare
-basierte Lösungen ) - hier nicht erwähnt -, z. B. das Aufheben der Freigabe von Mountpunkten (in Verbindung mit FUSE?) , Könnte möglicherweise Teil einer funktionierenden Lösung sein, wenn Sie Dateisystemzugriffe auf Ihre nicht vertrauenswürdigen Prozesse beschränken möchten.Weitere Informationen zu Namespaces, nachdem deren Implementierung abgeschlossen wurde (diese Isolationstechnik ist auch unter dem Namen "Linux Containers" oder "LXC" bekannt , oder ? ..):
„Eines der allgemeinen Ziele von Namensräumen ist die Umsetzung von Containern, ein Werkzeug für die leichte Virtualisierung (wie auch andere Zwecke) zu unterstützen“ .
Es ist sogar möglich, einen neuen Benutzernamensraum zu erstellen, so dass "ein Prozess eine normale nichtprivilegierte Benutzer-ID außerhalb eines Benutzernamensraums haben kann, während gleichzeitig eine Benutzer-ID von 0 innerhalb des Namensraums vorhanden ist. Dies bedeutet, dass der Prozess über vollständige Root-Berechtigungen verfügt für Operationen innerhalb des Benutzernamensraums, jedoch nicht für Operationen außerhalb des Namensraums ".
Für echte Arbeitsbefehle, um dies zu tun, siehe die Antworten auf:
und spezielle User-Space-Programmierung / Kompilierung
Nun, natürlich können die gewünschten "Gefängnis" -Garantien durch Programmierung im Benutzerbereich implementiert werden ( ohne zusätzliche Unterstützung für diese Funktion durch das Betriebssystem ; möglicherweise wurde diese Funktion deshalb bei der Entwicklung von Betriebssystemen überhaupt nicht berücksichtigt ); mit mehr oder weniger Komplikationen.
Das erwähnte
ptrace
- oderseccomp
-basierte - Sandboxing kann als eine Variante der Implementierung der Garantien angesehen werden, indem ein Sandbox-Helfer geschrieben wird, der Ihre anderen Prozesse steuert, die als "Blackboxes", willkürliche Unix-Programme, behandelt werden.Ein anderer Ansatz könnte darin bestehen, Programmiertechniken zu verwenden, die sich um die Effekte kümmern, die nicht zugelassen werden müssen. (Dann müssen Sie es sein, die die Programme schreiben; sie sind keine Black Boxes mehr.) Um eines zu erwähnen: Verwenden Sie eine reine Programmiersprache (die Sie zwingen würde, ohne Nebenwirkungen zu programmieren) wie Haskell , um einfach alle Effekte der zu erzielen Programm explizit, so dass der Programmierer leicht sicherstellen kann, dass es keine unzulässigen Effekte gibt.
Ich denke, es gibt Sandbox-Möglichkeiten für diejenigen, die in einer anderen Sprache programmieren, zB Java.
Vgl. Projektvorschlag "Sandboxed Haskell" .
NaCl - hier nicht erwähnt - gehört zu dieser Gruppe, nicht wahr?
Auf einige Seiten mit Informationen zu diesem Thema wurde auch in den Antworten hingewiesen:
quelle
chroot
, aber das würde wahrscheinlich immer noch erforderlich sein echte root-Rechte ...Dies ist eine grundlegende Einschränkung des Unix-Berechtigungsmodells: Nur Root kann delegieren.
Sie müssen nicht als Root angemeldet sein, um eine virtuelle Maschine ausführen zu können (gilt nicht für alle VM-Technologien), dies ist jedoch eine schwergewichtige Lösung.
Linux im Benutzermodus ist eine relativ einfache Linux-on-Linux-Virtualisierungslösung. Es ist nicht so einfach einzurichten; Sie werden das Minimum eine Root - Partition (in einem Verzeichnis) mit mindestens benötigt , um Boot (ein paar Dateien in bevölkern müssen
/etc
,/sbin/init
und ihre Abhängigkeiten, ein Login - Programm, ein Shell und Dienstprogramme).quelle
Ich vermute, Sie können etwas Glück haben
LD_PRELOAD
, um den Zugriff auf bestimmte Dateien abzufangen, aber dies könnte sehr schwierig sein.quelle
LD_PRELOAD
kann nicht vertrauenswürdig sein (kann umgangen werden), aber Abhören durchptrace
kann.LD_PRELOAD
-basierte Lösungen als Sicherheitsmaßnahme nicht vertrauenswürdig sind.Aus der vollständigen Liste möchte ich nur hinzufügen:
fakeroot (von debian package maintener): es zielt darauf ab, ein Paket mit "benutzerfreundlichen" Werkzeugen zu erstellen. Dies ist keine vollständige Isolation, aber es hilft beim Erstellen von Paketen mit verschiedenen Benutzern und gefälschten Geräten und anderen speziellen Pseudodateien.
fakechroot (die fakeroot verwendet). Dieses Programm hat viele Fehler. Beispielsweise ist "/ etc / hosts" in glibc fest codiert: Sie können es mit diesem Tool nicht ändern.
qemu: Sie müssen einen Linux-Kernel kompilieren, aber das Ergebnis ist sehr schnell und dies ist eine "gefälschte" (dh virtuelle) Maschine mit echten Root-Rechten. Sie können jedes Boot-Image erstellen und einbinden.
quelle
Firejail ist ein nützliches Tool, mit dem Sie jeden Prozess mit oder ohne Root-Zugriff mit vielen Optionen und sehr flexibel ins Gefängnis bringen können:
quelle