Nachdem ich ein paar hübsche Antworten auf diese Frage gelesen habe , bin ich immer noch unschlüssig, warum Sie so tun möchten, als wären Sie root, ohne die Vorteile zu nutzen, die es mit sich bringt, tatsächlich root zu sein.
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?
Eine Diskussion in Google Groups hier zeigt, dass Sie fakeroot benötigen, um einen Debian-Kernel zu kompilieren (wenn Sie dies von einem nicht privilegierten Benutzer möchten). Mein Kommentar ist, dass der Grund, warum Sie root sein müssen, um zu kompilieren, wahrscheinlich darin liegt, dass für andere Benutzer keine Leseberechtigungen festgelegt wurden. Wenn ja, ist es keine Sicherheitsverletzung, die fakeroot für die Kompilierung zulässt (was bedeutet, dass gcc jetzt eine Datei lesen kann, die für root bestimmt war)?
Diese Antwort hier beschreibt , dass die tatsächlichen Systemaufrufe mit echten gemacht werden uid / gid des Benutzers , so wieder , wo tut fakeroot Hilfe?
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?
Nach allem, was ich gesammelt habe, ist fakeroot nur nützlich, wenn Sie den Eigentümer von Paketdateien ändern möchten, die Sie für root erstellt haben. Aber Sie können das mit chown tun. Wo fehle ich also in meinem Verständnis, wie diese Komponente verwendet werden soll?
Antworten:
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 tunfakeroot
.) Das ist der springende Punktfakeroot
: 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
, oderinstall -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 nachfolgendetar
Läufe beispielsweise Dateien als Eigentum von root speichern.fakeroot
Es werden keinetar
Ä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 keinenfakeroot
Tarball erstellen, der eine Datei enthält, die root und suid gehört. Wenn Sie über eine Binärdatei verfügenevilbinary
, wird beim Ausführentar cf evil.tar --mode=4755 --owner=root --group=root evilbinary
als normaler Benutzer ein Tarball erstelltevilbinary
, 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: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 Prozessfakeroot
gibt aber vor, erfolgreich zu sein, und merkt sich den geänderten Besitztar
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 entsprichtAuf 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 erstellen
fakeroot
. Dies wirddpkg
direkt mit derRules-Requires-Root
Direktive unterstützt (sieherootless-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: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:
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.quelle
tar --mode --owner
für jede einzelne Datei, die zum Archiv hinzugefügt wird, verwendet werden (und funktioniert auch mit anderen Programmen). Mögliche Probleme treten auf, wenn Sie eine nicht vertrauenswürdige TAR-Datei oder ein nicht vertrauenswürdiges Archiv als Root entpacken und nicht, wenn Sie es erstellen.NEIN. Fake Root ermöglicht es Ihnen, Berechtigungsmanipulations- und Berichterstellungstools auszuführen, die konsistent berichten. Diese Berechtigungen werden jedoch nicht gewährt. Es wird so aussehen, als hättest du sie (falsch). Es ändert nichts außerhalb der Umgebung.
Es ist nützlich, wenn Sie eine Verzeichnisstruktur erstellen möchten, die Eigentumsrechte und Berechtigungen enthält, die von Ihrem Benutzer nicht festgelegt werden konnten, und dann tar, zip oder ein anderes Paket.
Es erhöht nicht wirklich die Berechtigungen, es ist eine Fälschung. Sie können nichts tun (löschen, schreiben, lesen), was Sie sonst nicht tun könnten. Sie könnten das Paket (theoretisch) ohne es produzieren. Sie könnten einen gefälschten Bericht (
ls
) ohne ihn erhalten.Es ist keine Sicherheitslücke, da es keinen Zugriff erlaubt oder alles, was Sie nicht ohne sie tun können. Es läuft ohne Privileg. Alles , was es Dosis ist abfangen Anrufe
chown
,chmod
usw. Es macht sie eine No-Operation, mit der Ausnahme , dass es , was wäre geschehen , aufzeichnet. Außerdem werden Aufrufe anstat
usw. abgefangen, sodass Berechtigungen und Eigentumsrechte aus der eigenen internen Datenbank gemeldet werden, als ob die anderen Befehle ausgeführt worden wären. Dies ist nützlich, da das Verzeichnis, wenn Sie es anschließend komprimieren, über die falschen Berechtigungen verfügt. Wenn Sie dann als root entpacken, werden die Berechtigungen real.Dateien, die vorher nicht lesbar / beschreibbar waren, bleiben nicht lesbar / beschreibbar. Alle speziellen Dateien (z. B. Geräte), die erstellt wurden, haben keine besonderen Befugnisse. Bei jeder Set-UID (für einen anderen Benutzer) werden Dateien nicht mit der Set-UID versehen. Alle anderen Rechteerweiterungen funktionieren nicht.
Dies ist eine Art virtueller Maschine: Eine virtuelle Maschine kann im Allgemeinen eine beliebige Umgebung / ein beliebiges Betriebssystem simulieren, kann jedoch nichts für den Host tun, was keine andere Anwendung tun könnte. Innerhalb der virtuellen Maschine können Sie scheinbar alles tun. Sie können das Sicherheitssystem neu erfinden, sodass es gleich oder verschieden ist. Dies ist jedoch alles auf dem Host vorhanden, da es sich um Ressourcen handelt, die dem Benutzer / der Gruppe des Prozesses gehören, der die virtuelle Umgebung ausführt.
quelle
Es gibt hier bereits zwei gute und sehr detaillierte Antworten, aber ich möchte nur darauf hinweisen, dass der einleitende Absatz der ursprünglichen
fakeroot
Manpage 1 dies tatsächlich ziemlich klar und prägnant erklärt:Mit Fakeroot kann ein Benutzer ohne Rootberechtigung Archive mit Dateien erstellen, die sich im Besitz des Rootberechtigten befinden. Dies ist ein wichtiger Bestandteil der Generierung und Verteilung von Binärsoftwarepaketen unter Linux. Ohne
fakeroot
müssten Paketarchive generiert werden, während sie als tatsächlicher Root ausgeführt werden, damit sie die richtigen Dateieigentümer und Berechtigungen enthalten. Das wäre ein Sicherheitsrisiko. Das Erstellen und Packen potenziell nicht vertrauenswürdiger Software ist ein großes Risiko, wenn Root-Rechte verwendet werden. Dankfakeroot
können nichtprivilegierte Benutzer mit nichtprivilegierten Dateien weiterhin Archive erstellen, die Dateien mit Root-Eigentümern enthalten. 2Aber es ist kein Sicherheitsrisiko dar , weil nichts im Archiv ist tatsächlich im Besitz von Root , bis die Dateien GEWONNEN . Und selbst dann werden die Dateien nur dann mit intakten Root-Berechtigungen extrahiert, wenn dies von einem privilegierten Benutzer durchgeführt wird. In diesem Schritt, in dem ein
fakeroot
unterstütztes Archiv, das "root" -Dateien enthält, von einem privilegierten Benutzer extrahiert wird, wird der "fake" -Root schließlich real. Bis zu diesem Zeitpunkt werden keine tatsächlichen Root-Berechtigungen erhalten oder umgangen.Anmerkungen
fakeroot
installiert tarnen , einschließlichfakeroot-ng
undpseudo
. Aber meiner Meinung nach ist weder die Manpage "Nachahmer" so klar, wie es ist, auf den Punkt in dieser Frage zu kommen. Bleib beim Original, einzigemfakeroot
OGAndere Distributionen / Verpackungssysteme umgehen dies, indem sie in ihren Paketarchiven einfach kein Root-Eigentum verwenden. Unter Fedora kann beispielsweise Software von einem nicht privilegierten Benutzer kompiliert, installiert und gepackt werden, ohne dass dies erforderlich ist
fakeroot
. Es wird alles im$HOME/rpmbuild/
Raum des Benutzers erledigt , und normal privilegierte Schritte wiemake install
das Umleiten (über Mechanismen wie--prefix
undDESTDIR
) in eine$HOME/rpmbuild/BUILDROOT/
Hierarchie, die als eine Art "fakechroot" -Raum angesehen werden könnte (ohne sie tatsächlich zu verwendenfakechroot
).Aber auch währenddessen
make install
wird alles als und im Besitz des nicht privilegierten Benutzers ausgeführt. Extrahierte Dateieigentümer und Berechtigungen werden standardmäßig aufroot,root
und0644
(oder0755
für ausführbare Dateien) gesetzt, sofern sie nicht in der Paketdefinitionsdatei (.spec
) überschrieben werden. In diesem Fall werden sie als Metadaten im endgültigen Paket gespeichert. Da vor dem (privilegierten) Installationsprozess des RPM-Pakets keine Berechtigungen oder Eigentumsrechte angewendet werden,fakeroot
wird beim Packen weder Root noch benötigt. Istfakeroot
aber wirklich nur ein anderer Weg zum selben Ergebnis.quelle
fakeroot-ng
behauptet , sie zu ersetzenfakeroot
, aber in der Praxis hat sie sie nicht ersetzt, und AFAIKfakeroot
ist immer noch das in Debian standardmäßig verwendete Werkzeug (falls erforderlich).fakeroot
Manpage gesucht habe , und Google hat mich beifakeroot-ng
(maskiert alsfakeroot(1)
) abgesetzt , und ich schätze, ich habe zu viel vermutet. Aber ich sehe jetzt, dass fakeroot-ng seit 2014 nicht mehr aktualisiert wurde , während fakeroot noch aktiv ist . Es gibt anscheinend auch Pseudos, die es vor ein paar Jahren versucht haben, aber jetzt ins Stocken geraten sind. Ich werde meine Antwort entsprechend anpassen.fakeroot
Manpage auf Debians Sitefakeroot-ng
standardmäßig zu s Version führt . Schauen Sie sich den letzten Absatzfakeroot-ng
für eine amüsante Wendung an ;-).