Bisher kann ich feststellen, dass fakeroot verwendet wird, um einer Datei den Besitz zu geben, die root sein muss, wenn sie entpackt / tariert wird. Meine Frage ist, warum kannst du das nicht einfach mit chown machen?
Weil du das nicht einfach mit machen kannst chown
, zumindest nicht als Nicht-Root-Benutzer. (Und wenn Sie als Root ausgeführt werden, müssen Sie das nicht tun fakeroot
.) Das ist der springende Punkt fakeroot
: Programme, die als Root ausgeführt werden sollen, können als normaler Benutzer ausgeführt werden, während sie so tun, als ob die für Root erforderlichen Vorgänge erfolgreich wären.
Dies wird normalerweise beim Erstellen eines Pakets verwendet, damit der Installationsprozess des zu installierenden Pakets fehlerfrei fortgesetzt werden kann (auch wenn es ausgeführt wird chown root:root
, oder install -o root
usw.). fakeroot
erinnert sich an den gefälschten Besitz, den es vorgab, Dateien zu geben, so dass nachfolgende Operationen, die den Besitz betrachten, dies anstelle des wirklichen sehen; Auf diese Weise können nachfolgende tar
Läufe beispielsweise Dateien als Eigentum von root speichern.
Wie stoppt fakeroot unerwünschte Rechteerweiterungen unter Linux? Wenn fakeroot tar dazu verleiten kann, eine Datei zu erstellen, deren Eigentümer root ist, warum nicht mit SUID etwas Ähnliches tun?
fakeroot
Es werden keine tar
Änderungen übernommen, die vom Build vorgenommen werden sollen, ohne dass diese Änderungen auf dem System wirksam werden, auf dem sich der Build befindet. Sie müssen keinen fakeroot
Tarball erstellen, der eine Datei enthält, die root und suid gehört. Wenn Sie über eine Binärdatei verfügen evilbinary
, wird beim Ausführen tar cf evil.tar --mode=4755 --owner=root --group=root evilbinary
als normaler Benutzer ein Tarball erstellt evilbinary
, der root und suid gehört. Sie können diesen Tarball jedoch nicht extrahieren und diese Berechtigungen beibehalten, es sei denn, Sie tun dies als root: Hier gibt es keine Eskalation von Berechtigungen. fakeroot
ist ein Privileg de-escalation tool: Ermöglicht das Ausführen eines Builds als normaler Benutzer unter Beibehaltung der Effekte, die der Build gehabt hätte, wenn er als Root ausgeführt worden wäre, sodass diese Effekte später wiedergegeben werden können. Das Anwenden der Effekte "für echt" erfordert immer Root-Rechte. fakeroot
bietet keine Methode, um sie zu erwerben.
Um die Verwendung fakeroot
genauer zu verstehen , sollten Sie berücksichtigen, dass ein typischer Distributionsbuild (unter anderem) die folgenden Vorgänge umfasst:
- Installiere Dateien, die root gehören
- ...
- Archivieren Sie diese Dateien, die immer noch im Besitz von root sind, damit sie beim Extrahieren im Besitz von root sind
Der erste Teil schlägt offensichtlich fehl, wenn Sie nicht root sind. Wenn Sie jedoch fakeroot
als normaler Benutzer unter ausgeführt werden, wird der Prozess
- Dateien installieren, die root gehören - dies schlägt fehl,
fakeroot
gibt aber vor, erfolgreich zu sein, und merkt sich den geänderten Besitz
- ...
- Archivieren Sie diese Dateien, die immer noch im Besitz von root sind. Wenn
tar
das System gefragt wird, was der Dateibesitz ist (oder welcher Archiver auch immer verwendet wird), fakeroot
wird die Antwort so geändert, dass sie dem zuvor aufgezeichneten Besitz entspricht
Auf diese Weise können Sie einen Paket-Build ausführen, ohne root zu sein, und dabei dieselben Ergebnisse erzielen, die Sie erhalten würden, wenn Sie wirklich als root ausgeführt würden. Die Verwendung fakeroot
ist sicherer: Das System kann immer noch nichts tun, was Ihr Benutzer nicht kann, sodass ein nicht autorisierter Installationsprozess Ihr System nicht beschädigen kann (außer durch Berühren Ihrer Dateien).
In Debian wurden die Build-Tools verbessert, um dies nicht mehr zu erfordern, und Sie können Pakete ohne sie erstellenfakeroot
. Dies wird dpkg
direkt mit der Rules-Requires-Root
Direktive unterstützt (siehe rootless-builds.txt
).
Um den Zweck fakeroot
und die Sicherheitsaspekte der Ausführung als Root zu verstehen oder nicht, kann es hilfreich sein, den Zweck der Paketierung zu berücksichtigen. Wenn Sie eine Software aus dem Quellcode installieren, um sie systemweit zu verwenden, gehen Sie wie folgt vor:
- Erstellen Sie die Software (die ohne Berechtigungen durchgeführt werden kann)
- Installieren Sie die Software (die als Root ausgeführt werden muss oder zumindest als Benutzer, der zum Schreiben an die entsprechenden Systemspeicherorte berechtigt ist).
Wenn Sie eine Software packen, verzögern Sie den zweiten Teil. Um dies jedoch erfolgreich zu tun, müssen Sie die Software weiterhin im Paket und nicht auf dem System "installieren". Wenn Sie also Software paketieren, wird der Prozess zu:
- Erstellen Sie die Software (ohne besondere Rechte)
- vorgeben, die Software zu installieren (erneut ohne besondere Rechte)
- Erfassen der Softwareinstallation als Paket (dito)
- das paket zur verfügung stellen (dito)
Jetzt schließt ein Benutzer den Vorgang ab, indem er das Paket installiert, das als root ausgeführt werden muss (oder erneut einen Benutzer mit den entsprechenden Berechtigungen, um an die entsprechenden Speicherorte zu schreiben). Hier wird der verzögerte privilegierte Prozess verwirklicht und ist der einzige Teil des Prozesses, der spezielle Privilegien benötigt.
fakeroot
Hilft bei den obigen Schritten 2 und 3, indem es uns ermöglicht, Softwareinstallationsprozesse auszuführen und deren Verhalten zu erfassen, ohne als Root ausgeführt zu werden.