GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Inwiefern ist Fakeroot keine Sicherheitslücke in Linux?

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:

  1. die Software bauen (was ohne Privilegien möglich ist)
  2. 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:

  1. Erstellen Sie die Software (ohne besondere Berechtigungen)
  2. vorgeben, die Software zu installieren (wieder ohne besondere Rechte)
  3. Erfassen Sie die Softwareinstallation als Paket (dito)
  4. 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

  1. Fakeroot hat einige Konkurrenten/Nachahmer hervorgebracht, die sich als fakeroot ausgeben falls installiert, einschließlich fakeroot-ng und pseudo . 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 einzigen fakeroot O.G.
  2. 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 wie make install umgeleitet werden (über Mechanismen wie --prefix). und DESTDIR ) zu einem $HOME/rpmbuild/BUILDROOT/ Hierarchie, die als eine Art "Fakechroot"-Raum angesehen werden könnte (ohne tatsächlich fakechroot 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 auf root,root gesetzt und 0644 (oder 0755 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 noch fakeroot wird beim Verpacken benötigt. Aber fakeroot ist wirklich nur ein anderer Weg zu demselben Ergebnis.


Linux
  1. So löschen Sie die Root-E-Mail-Datei (Postfach) unter Linux

  2. So passen Sie Linux-Benutzerumgebungen an

  3. Root-Passwort unter Rocky Linux zurücksetzen - Wie geht das?

  4. Linux Setuid funktioniert nicht?

  5. Linux – Warum funktioniert Setuid nicht?

So zeigen Sie Cron-Jobs in Linux an oder listen sie auf

So ändern Sie das Root-Passwort in Ubuntu Linux

So installieren Sie WordPress unter Linux Mint 19

So verschlüsseln Sie das Root-Dateisystem unter Linux

So ändern Sie das Root-Passwort unter Linux

So ändern Sie das Root-Passwort in Kali Linux