Bisher kann ich feststellen, dass Fakeroot verwendet wird, um das Eigentum an einer Datei zu übertragen, die beim Entpacken/Tarieren root sein muss. Meine Frage ist, warum können Sie das nicht einfach mit Chown machen?
Denn das geht nicht einfach mit chown
, zumindest nicht als Nicht-Root-Benutzer. (Und wenn Sie als root laufen, brauchen Sie fakeroot
nicht .) Das ist der ganze Sinn von fakeroot
:Programmen, die als root ausgeführt werden sollen, erlauben, als normaler Benutzer ausgeführt zu werden, während vorgetäuscht wird, dass die root-erfordernden Operationen erfolgreich sind.
Dies wird normalerweise beim Erstellen eines Pakets verwendet, damit der Installationsprozess des zu installierenden Pakets ohne Fehler fortgesetzt werden kann (selbst wenn es chown root:root
, oder install -o root
, etc.). fakeroot
erinnert sich an den gefälschten Besitz, den er vorgab, Dateien zu geben, sodass nachfolgende Operationen, die den Besitz betrachten, diesen anstelle des echten sehen; dies erlaubt nachfolgende tar
läuft zum Beispiel, um Dateien als Eigentum von root zu speichern.
Wie stoppt fakeroot unerwünschte Rechteausweitungen unter Linux? Wenn fakeroot tar dazu bringen kann, eine Datei zu erstellen, die root gehörte, warum sollte man dann nicht etwas Ähnliches mit SUID machen?
fakeroot
trickst tar
nicht aus irgendetwas zu tun, behält es Änderungen bei, die der Build vornehmen möchte, ohne dass diese Änderungen auf dem System wirksam werden, das den Build hostet. Sie brauchen fakeroot
nicht um einen Tarball zu erzeugen, der eine Datei enthält, die root und suid gehört; wenn Sie einen binären evilbinary
haben , wobei tar cf evil.tar --mode=4755 --owner=root --group=root evilbinary
ausgeführt wird erstellt als normaler Benutzer einen Tarball, der evilbinary
enthält , im Besitz von root und suid. Sie können diesen Tarball jedoch nicht extrahieren und diese Berechtigungen beibehalten, es sei denn, Sie tun dies als Root:Hier gibt es keine Rechteausweitung. fakeroot
ist ein Privileg de -Eskalationstool:Es ermöglicht Ihnen, einen Build als normaler Benutzer auszuführen, während die Effekte erhalten bleiben, die der Build gehabt hätte, wenn er als Root ausgeführt worden wäre, sodass diese Effekte später wiederholt werden können. Das Anwenden der Effekte „echt“ erfordert immer Root-Rechte; fakeroot
bietet keine Methode, sie zu erwerben.
Um die Verwendung von fakeroot
zu verstehen Beachten Sie im Detail, dass ein typischer Distributionsaufbau die folgenden Operationen (neben vielen anderen) beinhaltet:
- Installationsdateien, die Root gehören
- ...
- archivieren Sie diese Dateien, die immer noch im Besitz von root sind, sodass sie nach dem Extrahieren im Besitz von root sind
Der erste Teil schlägt offensichtlich fehl, wenn Sie nicht root sind. Allerdings bei Ausführung unter fakeroot
, als normaler Benutzer wird der Prozess
- Installationsdateien, die Root gehören – dies schlägt fehl, aber
fakeroot
tut so, als wäre es erfolgreich, und erinnert sich an den Eigentümerwechsel - ...
- archiviere diese Dateien, die immer noch Root gehören – wenn
tar
(oder welches Archivierungsprogramm auch immer verwendet wird) fragt das System nach dem Eigentümer der Datei,fakeroot
ändert die Antwort so, dass sie mit der zuvor aufgezeichneten Eigentümerschaft übereinstimmt
Auf diese Weise können Sie eine Paketerstellung ausführen, ohne root zu sein, während Sie die gleichen Ergebnisse erzielen, die Sie erhalten würden, wenn Sie wirklich als root ausgeführt würden. Mit fakeroot
ist sicherer:Das System kann immer noch nichts tun, was Ihr Benutzer nicht tun kann, sodass ein betrügerischer Installationsvorgang Ihr System nicht beschädigen kann (außer dass Ihre Dateien berührt werden).
In Debian wurden die Build-Tools verbessert, sodass dies nicht mehr erforderlich ist, und Sie können Pakete ohne fakeroot
erstellen . Dies wird von dpkg
unterstützt direkt mit dem Rules-Requires-Root
Direktive (siehe rootless-builds.txt
).
Um den Zweck von fakeroot
zu verstehen , und die Sicherheitsaspekte der Ausführung als Root oder nicht, kann es hilfreich sein, den Zweck des Paketierens zu berücksichtigen. Wenn Sie eine Software aus dem Quellcode zur systemweiten Verwendung installieren, gehen Sie wie folgt vor:
- die Software bauen (was ohne Privilegien möglich ist)
- Installieren Sie die Software (was als Root oder zumindest als Benutzer mit Schreibzugriff auf die entsprechenden Systemspeicherorte erfolgen muss)
Wenn Sie eine Software verpacken, verzögern Sie den zweiten Teil; Um dies erfolgreich zu tun, müssen Sie die Software jedoch immer noch in das Paket und nicht auf das System „installieren“. Wenn Sie also Software paketieren, lautet der Prozess:
- Erstellen Sie die Software (ohne besondere Berechtigungen)
- vorgeben, die Software zu installieren (wieder ohne besondere Rechte)
- Erfassen Sie die Softwareinstallation als Paket (dito)
- Paket verfügbar machen (dito)
Jetzt schließt ein Benutzer den Vorgang ab, indem er das Paket installiert, was als root erfolgen muss (oder wiederum als Benutzer mit den entsprechenden Rechten zum Schreiben an die entsprechenden Speicherorte). Hier wird der verzögerte privilegierte Prozess realisiert und ist der einzige Teil des Prozesses, der spezielle Privilegien benötigt.
fakeroot
hilft bei den obigen Schritten 2 und 3, indem es uns erlaubt, Softwareinstallationsprozesse auszuführen und ihr Verhalten zu erfassen, ohne als root ausgeführt zu werden.
NEIN. Mit Fake Root können Sie Tools zur Berechtigungsmanipulation und Berichterstellung ausführen, die konsistent berichten. Diese Berechtigungen werden jedoch nicht tatsächlich erteilt. Es wird nur so aussehen, als hätten Sie sie (Fälschung). Es wird nichts außerhalb der Umgebung ändern.
Es ist nützlich, wenn Sie eine Verzeichnisstruktur erstellen möchten, die Eigentum und Berechtigungen enthält, die von Ihrem Benutzer nicht festgelegt werden konnten, die Sie dann tar, zip oder ein anderes Paket erstellen.
Es nicht Erhöhen Sie die Berechtigungen wirklich, es ist eine Fälschung. Es lässt Sie nichts tun (löschen, schreiben, lesen), was Sie sonst nicht tun könnten. Sie könnten das Paket (theoretisch) auch ohne produzieren. Sie könnten einen gefälschten Bericht erhalten (ls
) ohne.
Es handelt sich nicht um eine Sicherheitslücke, da dies nicht der Fall ist Zugriff erlauben, oder alles, was Sie ohne es nicht tun können. Es läuft ohne Privilegien. Es werden lediglich Anrufe an chown
abgefangen , chmod
usw. Es macht sie zu einer Nicht-Operation, außer dass es aufzeichnet, was passiert wäre. Es fängt auch Aufrufe an stat
ab usw., so dass es Berechtigungen und Eigentumsrechte aus seiner eigenen internen Datenbank meldet, als ob die anderen Befehle ausgeführt worden wären. Dies ist nützlich, denn wenn Sie das Verzeichnis dann komprimieren, hat es die gefälschten Berechtigungen. Wenn Sie dann als root entpacken, werden die Berechtigungen real.
Alle Dateien, die vorher nicht lesbar/schreibbar waren, bleiben nicht lesbar/schreibbar. Alle erstellten speziellen Dateien (z. B. Geräte) haben keine besonderen Befugnisse. Jede Set-UID (für einen anderen Benutzer), Dateien werden nicht Set-UID. Jede andere Rechteerweiterung funktioniert nicht.
Es ist eine Art virtuelle Maschine:Eine virtuelle Maschine kann im Allgemeinen jede Umgebung/jedes Betriebssystem simulieren, kann aber nichts mit dem Host tun, was keine andere Anwendung tun könnte. Innerhalb der virtuellen Maschine können Sie anscheinend alles tun. Sie können das Sicherheitssystem so neu erfinden, dass es gleich oder anders ist. Dies wird jedoch alles auf dem Host als Ressourcen vorhanden sein, die dem Benutzer/der Gruppe des Prozesses gehören, der die virtuelle Umgebung ausführt.
Hier gibt es bereits zwei gute und sehr detaillierte Antworten, aber ich möchte nur darauf hinweisen, dass der einleitende Absatz des Originals fakeroot
Manpage erklärt es eigentlich ziemlich klar und prägnant:
Fakeroot führt einen Befehl in einer Umgebung aus, in der er anscheinend Root-Rechte für die Dateibearbeitung hat. Dies ist nützlich, um Benutzern das Erstellen von Archiven (tar, ar, .deb usw.) mit darin enthaltenen Dateien mit Root-Berechtigungen/Besitzrechten zu ermöglichen. Ohne Fakeroot Man müsste Root-Rechte haben, um die Bestandteile der Archive mit den richtigen Berechtigungen und Eigentumsrechten zu erstellen und sie dann zu packen, oder man müsste die Archive direkt erstellen, ohne den Archivierer zu verwenden.
Fakeroot ermöglicht es einem Nicht-Root-Benutzer, Archive zu erstellen, die root-eigene Dateien enthalten, was ein kritischer Teil der Generierung und Verteilung binärer Softwarepakete in Linux ist. Ohne fakeroot
, müssten Paketarchive generiert werden, während sie als tatsächlicher Root ausgeführt werden, damit sie den richtigen Dateibesitz und die richtigen Berechtigungen enthalten. Das würde ein Sicherheitsrisiko sein. Das Erstellen und Packen potenziell nicht vertrauenswürdiger Software ist ein großes Risiko, wenn dies mit Root-Privilegien erfolgt. Danke an fakeroot
, kann ein nicht privilegierter Benutzer mit nicht privilegierten Dateien immer noch Archive erstellen, die Dateien mit Root-Eigentum enthalten.
Aber es ist kein Sicherheitsrisiko, weil nichts im Archiv eigentlich ist im Besitz von root, bis die Dateien EXTRACTED sind . Und selbst dann werden die Dateien nur dann mit intakten Root-Rechten extrahiert, wenn dies von einem privilegierten Benutzer durchgeführt wird. Dieser Schritt – wo ein fakeroot
-unterstütztes Archiv, das „Root“-Dateien enthält, wird von einem privilegierten Benutzer extrahiert – hier wird das „falsche“ Root endlich echt. Bis zu diesem Zeitpunkt werden niemals tatsächliche Root-Rechte erlangt oder umgangen.
Notizen
- Fakeroot hat einige Konkurrenten/Nachahmer hervorgebracht, die sich als
fakeroot
ausgeben falls installiert, einschließlichfakeroot-ng
undpseudo
. Aber meiner Meinung nach ist keine der Manpages des "Nachahmers" annähernd so klar, wenn es darum geht, diese Frage auf den Punkt zu bringen. Bleiben Sie beim Original, dem einzigenfakeroot
O.G. -
Andere Distributionen/Paketsysteme überwinden dies einfach nicht mit Root-Besitz in ihren Paketarchiven. Auf Fedora kann beispielsweise Software von einem nicht privilegierten Benutzer kompiliert, installiert und gepackt werden, ohne dass
fakeroot
erforderlich ist . Dies geschieht alles innerhalb des$HOME/rpmbuild/
des Benutzers Leerzeichen und normal privilegierte Schritte wiemake install
umgeleitet werden (über Mechanismen wie--prefix
). undDESTDIR
) zu einem$HOME/rpmbuild/BUILDROOT/
Hierarchie, die als eine Art "Fakechroot"-Raum angesehen werden könnte (ohne tatsächlichfakechroot
zu verwenden ).Aber auch während
make install
, wird alles als unprivilegierter Benutzer ausgeführt und gehört ihm. Der Besitz und die Berechtigungen der extrahierten Datei werden aufroot,root
gesetzt und0644
(oder0755
für ausführbare Dateien) standardmäßig, sofern nicht in der Paketdefinition überschrieben (.spec
). )-Datei, in diesem Fall werden sie als Metadaten im endgültigen Paket gespeichert. Da bis zum (privilegierten) Installationsprozess des RPM-Pakets keine Berechtigungen oder Eigentumsrechte tatsächlich angewendet werden, weder root nochfakeroot
wird beim Verpacken benötigt. Aberfakeroot
ist wirklich nur ein anderer Weg zu demselben Ergebnis.