it-swarm.com.de

Was ist die Notwendigkeit für den Befehl "fakeroot" unter Linux?

Warum brauchen wir überhaupt den Befehl fakeroot? Können wir nicht einfach die Befehle Sudo oder su verwenden?

Die Manpage sagt:

fakeroot - Führen Sie einen Befehl in einer Umgebung aus, in der Root-Berechtigungen für Dateimanipulation gefälscht werden

About.com sagt:

Gibt eine gefälschte Root-Umgebung. Dieses Paket soll Folgendes ermöglichen: dpkg-buildpackage -rfakeroot d.h. um die Notwendigkeit zu beseitigen, root für einen Paketaufbau zu werden. Dies erfolgt durch Setzen von LD_PRELOAD bis libfakeroot.so, das Wrapper um getuid, chown, chmod, mknod, stat, ... bereitstellt und dadurch eine Fälschung erzeugt Root-Umgebung. Wenn Sie nichts davon verstehen, brauchen Sie fakeroot nicht!

Meine Frage ist, welchen besonderen Zweck löst es, dass ein einfaches su oder Sudo dies nicht tut? Zum erneuten Packen aller in Ubuntu installierten Pakete geben wir beispielsweise den folgenden Befehl:

$ fakeroot -u dpkg-repack `dpkg --get-selections | grep install | cut -f1`

Können wir den obigen Befehl mit Sudo oder su ausführen, anstatt wie folgt zu fälschen:

$ Sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1`

EDIT :

Laufen:

$ Sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1`

gibt mir diesen Fehler:

steuerverzeichnis hat schlechte Berechtigungen 700 (muss> = 0755 und <= 0775 sein)

Irgendein Grund warum?

102
gkt

Stellen Sie sich vor, Sie sind Entwickler/Paketbetreuer usw. und arbeiten auf einem Remote-Server. Sie möchten den Inhalt eines Pakets aktualisieren und neu erstellen, einen Kernel von kernel.org herunterladen und anpassen und erstellen usw. Während Sie versuchen, diese Dinge zu tun, werden Sie feststellen, dass für einige Schritte root Rechte (UID und GID 0) aus verschiedenen Gründen (Sicherheit, übersehene Berechtigungen usw.). Es ist jedoch nicht möglich, root -Rechte zu erhalten, da Sie auf einem Remotecomputer arbeiten (und viele andere Benutzer das gleiche Problem haben wie Sie). Dies ist, was genau fakeroot tut: Es gibt der Umgebung, die sie benötigt, ein effektives UID und GID von 0 vor.

In der Praxis erhalten Sie niemals echte root Berechtigungen (im Gegensatz zu su und Sudo, die Sie erwähnen).

70
sakisk

Um den Unterschied zwischen fakeroot und einem echten Sudo/su klar zu erkennen, gehen Sie einfach wie folgt vor:

$ fakeroot
# echo "Wow I have root access" > root.tst
# ls -l root.tst
-rw-rw-r-- 1 root root   23 Oct 25 12:13 root.tst
# ls -l /root
ls: cannot open directory /root: Permission denied
# exit
$ ls -l root.tst
-rw-rw-r-- 1 ubuntu ubuntu 23 Oct 25 12:13 root.tst

Solange Sie sich in der fakeroot Shell befinden, sieht es so aus, als wären Sie root - solange Sie nicht versuchen, etwas zu tun, das wirklich root-Berechtigungen benötigt. Und genau das benötigt ein Verpackungswerkzeug, um Verpackungen herzustellen, die auf jeder Maschine sinnvoll sind.

Wenn Sie fakeroot zum Verpacken verwenden, möchten Sie die Tools, die Sie unter fakeroot ausführen, so gestalten, dass Ihre Dateien im Besitz von root sind. Nicht mehr, nicht weniger. Su oder Sudo funktionieren also nicht, um den richtigen Dateibesitz zu erhalten.

56
MortenSickel

Da die Antworten (für mich selbst) schwer zu verstehen sind und einige Überlegungen erforderlich waren, um sie zu verstehen ( , hat mich dieser Kommentar dazu gebracht, sie zu verstehen), werde ich eine hoffentlich bessere Erklärung geben .

1. Was passiert in Fakeroot?

Nichts weiter als das, was mit Ihrem eigenen Benutzer passiert. Absolut nichts mehr. Wenn Sie fakeroot (was Ihnen beim Aufrufen eine neue Shell gibt, wie Sudo), so tun, als würden Sie Dinge tun, für die Sie die Erlaubnis benötigen, und beenden, würde absolut nichts passieren.

Wenn Sie darüber nachdenken, ist es eine totale Zeitverschwendung. Warum sollten Sie Dinge tun, die eigentlich nicht passieren? Das ist verrückt. Sie hätten einfach nichts davon tun können und es hätte keinen Unterschied gegeben, da es keine Spur davon gibt.

Warte eine Minute...

2. Die Spur von Fakeroot

Es gibt könnte eine Spur von fakeroot übrig. Schauen wir uns die Befehle in MortenSickels Antwort an, die ziemlich nett ist und eine positive Bewertung verdient:

$ fakeroot
# echo "Wow I have root access" > root.tst
# ls -l root.tst
-rw-rw-r-- 1 root root   23 Oct 25 12:13 root.tst
# ls -l /root
ls: cannot open directory /root: Permission denied
# exit
$ ls -l root.tst
-rw-rw-r-- 1 ubuntu ubuntu 23 Oct 25 12:13 root.tst

Auf den ersten Blick sieht es so aus, als wäre es eine reine Zeitverschwendung gewesen, fakeroot verwendet zu haben. Wenn Sie fakeroot nicht verwendet hätten, hätten Sie am Ende dasselbe.

Das Feinste hier ist:

$ cat root.tst
Wow I have root access

Das heißt, der Inhalt der Datei erinnert sich immer noch daran, ein Root zu sein. Sie könnten sagen, dass die Nichtverwendung von fakeroot zu denselben Ergebnissen geführt hätte. Sie haben Recht, dieses Beispiel ist zu einfach.

Nehmen wir ein anderes Beispiel:

$ fakeroot
# touch x
# touch y
# chown myuser:myuser x
# ls -l > listing
# exit
$ ls -l
total 4
-rw-rw-r-- 1 myuser myuser 152 Jan  7 21:39 listing
-rw-rw-r-- 1 myuser myuser   0 Jan  7 21:39 x
-rw-rw-r-- 1 myuser myuser   0 Jan  7 21:39 y
$ cat listing
total 0
-rw-rw-r-- 1 root   root   0 Jan  7 21:39 listing
-rw-rw-r-- 1 myuser myuser 0 Jan  7 21:39 x
-rw-rw-r-- 1 root   root   0 Jan  7 21:39 y

Lass uns nachsehen, was passiert ist. Ich gab vor, root zu sein, was völlig unwirksam ist, und erstellte x und y. Ich gab vor, x zu myuser und y zu root zu gehören. Sie gehören eigentlich beide zu myuser (wie wir am Ende sehen können), aber ich habe nur so getan es ist so.

Dann habe ich eine Liste erstellt und meine Fantasie in einer Datei gespeichert. Wenn ich später auf die Datei zurückblicke, kann ich sehen, wem die Dateien meiner Meinung nach gehören sollten. Auch hier gehören sie nicht den Leuten, die ich mir vorgestellt habe, das habe ich mir einfach vorgestellt.

3. Also ... Warum willst du das wieder?

Sie können sagen, dass ich nicht wirklich vortäuschen musste, root zu sein, um diese Auflistung zu erstellen. Ich hätte die Liste einfach erstellen und dann bearbeiten können, um meine Vorstellungskraft widerzuspiegeln. Sie haben Recht, dafür brauchten Sie fakeroot nicht. Wenn Sie wissen, dass fakeroot eigentlich nichts tut, können Sie möglicherweise keine Fähigkeit erlangt haben, die Sie vorher nicht hatten.

Aber , und genau darum geht es bei fakeroot, könnte das Bearbeiten der Liste nicht trivial sein. Wie bei einem Paket, das auf Ihrem System installiert werden kann, haben Sie ein tared, gziped, xzed, bzip2ed oder ein anderes Format, das Ihre Dateien zusammenhält und sich an ihre Berechtigungen und Eigentümer erinnert. Können Sie die komprimierte Datei einfach ändern und den Besitz einer Datei bearbeiten? Ich weiß nichts über dich, aber ich kann mir keinen Weg vorstellen.

Könnte es ein Tool geben, das nach dem Komprimieren die komprimierte Datei ändert und die Eigentümer und Berechtigungen programmgesteuert bearbeitet? Ja könnte es. Entweder können Sie die Eigentümer vor dem Komprimieren vortäuschen oder danach ändern. Debian Leute entschieden, dass Ersteres einfacher ist.

4. Warum nicht einfach Sudo verwenden?

Erstens benötigen Sie keine Root-Rechte, um Software zu erstellen, und Sie benötigen keine Root-Rechte, um sie zu komprimieren. Wenn Sie es also nicht benötigen, müssen Sie wirklich ein Windows-Benutzer sein, um überhaupt daran zu denken, diese Berechtigung zu erhalten. Abgesehen von Sarkasmus haben Sie möglicherweise nicht einmal ein Root-Passwort.

Angenommen, Sie haben Root-Berechtigungen. Angenommen, Sie möchten so tun, als ob eine Datei nur Lesezugriff auf das Stammverzeichnis haben sollte. Wenn Sie also Sudo den Dateieigentümer und die Berechtigungen in root ändern, verlassen Sie die Root-Shell und versuchen, alles zu verpacken. Sie schlagen fehl, weil Sie die Datei jetzt nicht mehr lesen können, da Sie keinen Root-Zugriff haben. Sie müssen also Sudo komprimieren und das Paket als root komprimieren und erstellen. Eigentlich muss man alles als root machen.

Das ist schlechtTM.

Als Packager benötigen Sie keine Root-Berechtigungen und sollten diese nicht erhalten. Wenn Sie ein Paket installieren, müssen Sie möglicherweise eine Datei (A) als Root installieren. Dort benötigen Sie Root-Berechtigungen. Alles, was fakeroot tut, ist, dies zu ermöglichen. Der Packager listet A als Eigentum von root für den Archivierer auf, sodass der Archivierer beim Dekomprimieren des Pakets durch den Benutzer die Root-Berechtigung anfordert und A als Eigentum von root erstellt.

49
Shahbaz

AFAIK, fakeroot führt einen Befehl in einer Umgebung aus, in der anscheinend Root-Berechtigungen für die Dateimanipulation vorhanden sind. Dies ist nützlich, damit Benutzer Archive (tar, ar, .deb usw.) mit Dateien mit Root-Berechtigungen/Besitz erstellen können. Ohne fakeroot müsste man über Root-Rechte verfügen, um die konstituierenden Dateien der Archive mit den richtigen Berechtigungen und Besitzverhältnissen zu erstellen und sie dann zu packen, oder man müsste die Archive direkt erstellen, ohne den Archivierer zu verwenden.

fakeroot ersetzt die Funktionen der Dateimanipulationsbibliothek (chmod (), stat () usw.) durch solche, die den Effekt simulieren, den die realen Bibliotheksfunktionen gehabt hätten, wenn der Benutzer wirklich root gewesen wäre.

Synopsis:

 fakeroot [-l|--lib library] [--faked faked-binary] [--] [command]  

Überprüfen Sie hier mehr: fakeroot

33
herbalessence

Ich habe es für Paketerstellungsskripte verwendet. Ich war mir nicht sicher, ob die Person, die das Skript ausführt, Zugriff auf Root-Ebene hat, aber das Skript musste beispielsweise noch eine TAR-Datei generieren, die Dateien enthielt, die zu Root gehören. Der einfachste Weg, dies zu tun, bestand darin, das Paketerstellungsskript unter fakeroot auszuführen, was den Archivierer dazu brachte, zu glauben, dass die Dateien zu root gehören, und sie als solche in das Archiv packte. Auf diese Weise gehörten die Dateien beim Entpacken des Pakets auf den Zielcomputer (auf einem anderen Computer insgesamt) nicht seltsamen oder nicht vorhandenen Benutzern.

Wenn ich darüber nachdenke, war der einzige Ort, an dem ich dies gesehen habe, das Erstellen einer Art Archiv: Rootfs eingebetteter Systeme, tar.gz-Archive, RPM-Pakete, .deb-Pakete usw.

11
Dysaster

Eine häufige Verwendung besteht darin, herauszufinden, auf welche Dateien eine fehlerhafte Binärdatei wirklich zugreifen wollte. Das heißt, Fehler herauszufinden und zu beheben oder zu umgehen, die durch fest codierte Pfade und unsachgemäße Ausnahmebehandlung verursacht werden.

3
Eero Ketonen

Die einfache Antwort:

su und Sudo führen Befehle als root aus. fakeroot nicht, außerhalb seiner partiellen Sandkastenanordnung.

1
jdmayfield

Sie können fakeroot verwenden, ohne über Root-Rechte zu verfügen. Wenn Sie su und/oder Sudo hätten, könnten Sie Ihr System mit einem einfachen rm -rf / Zerstören, aber mit fakeroot würden Sie höchstens Ihr Home-Verzeichnis entfernen.

1
gabrielhidasy