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

Auf der Manpage heißt es:

fakeroot – Führen Sie einen Befehl in einer Umgebung aus, in der Root-Berechtigungen für Dateimanipulation

About.com sagt:

Gibt eine gefälschte Wurzel Umgebung. Dieses Paket soll Folgendes ermöglichen: dpkg-buildpackage -rfakeroot, dh um die Notwendigkeit zu beseitigen, Root für eine Paketerstellung zu werden. Dies erfolgt durch Festlegen von LD_PRELOAD bis libfakeroot.so, das Wrapper um getuid, chown, chmod, mknod, stat, …, wodurch eine gefälschte Root-Umgebung erstellt wird „Verstehe nichts davon, du brauchst nicht fakeroot!

Meine Frage ist, was sp Ein spezieller Zweck löst es, dass ein einfaches su oder sudo nicht „t? Zum Umpacken aller installierten Pakete in Ubuntu 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 anstelle von fakeroot wie folgt ausführen:

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

BEARBEITEN:

Wird ausgeführt:

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

gibt mir folgenden Fehler:

Steuerverzeichnis hat fehlerhafte Berechtigungen 700 (muss> = 0755 und < = 0775 sein)

Gibt es einen Grund dafür?

Kommentare

  • Aus Sicherheitsgründen ist es eine gute Idee, nicht als Root alles zu tun, was als normaler Benutzer möglich ist, auch wenn Sie es ausführen können sudo oder su, weil es Ihre Maschine ist. fakeroot hat zwei Verwendungszwecke: 1) Es täuscht Programme vor, Sie seien tatsächlich Root-Benutzer, was einige schlecht geschriebene proprietäre Software möglicherweise erfordert, auch wenn sie nicht benötigt wird (normalerweise ist der Windows-Entwickler Linux) und 2) Es ermöglicht das Emulieren von Änderungen des Dateimodus und des Eigentums, die Sie ‚ sonst nicht tun könnten, hauptsächlich um eine tar -Datei mit korrekten Berechtigungen zu erstellen und Besitz, nützlich zum Beispiel beim Verpacken von Software.
  • Ich denke, der Hinweis im Auszug von About.com fasst es zusammen: Wenn Sie nicht ‚ Um dies nicht zu verstehen, brauchen Sie nicht fakeroot! Wenn Sie ‚ nicht an eine Situation denken können, in der fakeroot ist nützlich, dann brauchen Sie ‚ es buchstäblich nicht. Aber Leute, die es tatsächlich brauchen, verstehen den Anwendungsfall vollständig.

Antwort

Stellen Sie sich vor, Sie wären es Ein Entwickler / Paketbetreuer usw., der auf einem Remote-Server arbeitet. 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). Genau das ist fakeroot tut: Es gibt vor, dass eine effektive UID und GID von 0 für die Umgebung erforderlich ist.

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

Kommentare

  • Ich kann also ‚ nicht um Systemeinstellungen zu ändern ?? Denn der Befehl, den wir ‚ ausführen, wird denken, dass ‚ als root ausgeführt wird, und tun, was wir wollen. ‚ nicht wahr?
  • @mrid Beachten Sie die “ In der Praxis erhalten Sie nie echte Root-Berechtigungen „. Die Antwort ist also keine

Antwort

Um den Unterschied zwischen fakeroot und einem echten sudo / su klar zu erkennen, Führen Sie einfach Folgendes aus:

$ 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 braucht wirklich Root-Rechte. Und genau das braucht 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.

Kommentare

  • Ist Fälscher nicht gefährlich? Wenn ich eine Datei mit dem suid-Bit und der Empfangs-Dauerwelle erstelle, wird die Datei im Besitz von root erstellt und kann von jedem als root ausgeführt werden! Oder funktioniert das Einstellen des Suid-Bits möglicherweise nicht?
  • Nicht gut. Ich habe das selbst ausprobiert. Der Hauptgrund für fakeroot besteht darin, den Besitz root: root in erstellte Pakete zu bekommen, ohne tatsächlich root zu sein. Installierte Pakete haben jedoch die richtigen Dauerwellen.
  • Es war alles sehr verwirrend, bis ich den Kommentar von @ ntzrmtthihu777 ‚ gelesen habe!
  • Entschuldigung, Ich verstehe die Beschreibung nicht ‚. Warum patchen Sie die Tools nicht so, dass sie ‚ sich nicht beschweren, wenn Sie nicht root sind? Als verwandte Frage: Schließlich sind die Dateien, die Sie unter fakeroot erstellen, nicht tatsächlich im Besitz von root. Würde ‚ nicht bedeuten, dass bei der Installation einer solchen .deb -Datei alle meine /usr Dateien gehören dem Benutzer fakeroot?
  • @ JohannesSchaub-litb, nein, ‚ ist der Punkt. Die Dateien gehören nicht root, aber in einer fakeroot -Shell sehen sie so aus, wie sie sind . Wenn das .deb-Paket in dieser Shell erstellt wird, wird der Dateieigentümer aus dem Dateisystem gelesen (das fakeroot abfängt und root zurückgibt). und in der Verpackung gespeichert. Bei der Installation des Pakets benötigt dpkg dann Root-Zugriff, da das Paket angibt, dass die Datei Root gehören soll.

Antwort

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

1. Was passiert in fakeroot

Nichts weiter als was mit Ihrem eigenen Benutzer passiert. Absolut nichts mehr. Wenn Sie fakeroot (was beim Aufrufen eine neue Shell ergibt, wie sudo), geben Sie vor, Dinge zu tun, für die Sie die Erlaubnis benötigen, und beenden Sie, es würde absolut nichts passieren.

Wenn Sie darüber nachdenken, ist dies eine reine Zeitverschwendung. Warum sollten Sie Dinge tun, die eigentlich nicht passieren? Es 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.

Warten Sie eine Minute …

2. Die Spur von fakeroot

Es könnte eine Spur von fakeroot übrig sein. Schauen wir uns die Befehle in MortenSickels Antwort , 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 Die Verwendung von fakeroot war eine reine Zeitverschwendung. Wenn Sie fakeroot nicht verwendet hätten, hätten Sie am Ende dasselbe

Das Feinste hier ist Folgendes:

$ cat root.tst Wow I have root access 

Dies bedeutet, dass sich der Inhalt der Datei immer noch daran erinnert, 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 

Lassen Sie uns sehen, was passiert ist. Ich gab vor, root zu sein, was völlig ineffektiv ist, und erstellte x und y. Ich gab vor, x zu myuser und y zu . Sie gehören eigentlich beide zu myuser (wie wir am Ende sehen können), aber ich habe nur so getan, als wäre es 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 noch einmal?

Du kannst sagen, dass ich nicht wirklich fälschen musste, dass ich root bin, um diese Auflistung zu erstellen. Ich hätte die Auflistung einfach erstellen und sie dann bearbeiten können, um sie wiederzugeben Meine Phantasie. 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. Das Bearbeiten der Liste kann nicht trivial sein.Wie bei einem Paket, das auf Ihrem System installiert werden kann, haben Sie eine tar ed, gzip ed, xz ed, bzip2 ed 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 Sie, 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?

Zunächst benötigen Sie keine Root-Berechtigungen, um Software zu erstellen, und Sie benötigen keine Root-Berechtigungen, 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.

Nehmen wir außerdem an, Sie haben Root-Berechtigungen. Nehmen wir an, Sie möchten so tun, als hätte eine Datei nur Lesezugriff auf das Wurzel. 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. Effektiv müssen Sie dies tun Alles als Root.

Dies ist Bad TM .

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 im Besitz von root.

Kommentare

  • Hervorragende Beschreibung, dies macht es deutlich.
  • So either you could fake the ownerships before compressing, or change them after. Debian people decided the former is easier. Dies hat mir geholfen, als ich immer wieder darüber nachdachte, ‚ warum nicht danach ändern? ‚.
  • Danke, dies klärt die Verwirrung, die ich nach dem Lesen von @Morten ‚ s Antwort

Antwort

AFAIK, fakeroot führt einen Befehl in einer Umgebung aus, in der es anscheinend über Root-Berechtigungen für die Dateimanipulation verfügt. 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

Kommentare

  • @MaskTheSmokin: Mit fakeroot erhalten Sie also Super-User-Power nur für Dateimanipulationsvorgänge, richtig.
  • Es gibt nicht wirklich Super User Power, es fälscht es nur – das darin ausgeführte Programm glaubt, dass es Root-Rechte hat, während es wirklich noch die normalen Berechtigungen des Benutzers ‚ verwendet.
  • Wo liegt der Unterschied zwischen the program running in it thinks it has root privileges und dem Programm mit Root-Rechten? Wenn ich ein rm -rf / und das Programm ausführen kann, denke ich, dass ich Root-Rechte habe …
  • @userunknown Möglicherweise können Sie rm ‚ prüft, ob Sie über ausreichende Berechtigungen verfügen, aber der Kernel selbst würde ‚ dies nicht zulassen ;; Der Systemaufruf unlink schlägt fehl. ‚ ist nicht allein Sache der Anwendung, um Berechtigungen zu verarbeiten, oder Sie ‚ können Ihre eigene Anwendung schreiben, die nicht ‚ t Berechtigungen nicht prüfen und damit machen, was Sie wollen
  • Ein Beispiel, um die Notwendigkeit von fakeroot zu erläutern, wäre fantastisch. Ich kann die Verwendung von fakeroot sehen, aber ich sehe ‚ nicht, warum Leute ‚ nicht so weit um Root-Berechtigungen herumarbeiten können, dass dies der Fall ist ‚ ist einfacher zu fälschen.

Antwort

Ich habe es für Paketerstellungsskripte verwendet. Ich war mir nicht sicher, ob die Person, die das ausführt Das Skript hat Zugriff auf Root-Ebene, 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 Skript zum Erstellen von Paketen unter fakeroot auszuführen, was den Archivierer dazu verleitete, zu glauben, dass das Dateien gehören zu root und werden als solche in das Archiv gepackt. 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.

Kommentare

  • fakeroot ist ein Workaround-Tool für fehlerhafte Verpackungssoftware: Es gibt keinen Grund, warum Sie root sein müssen, um etwas zu erstellen solche Pakete, b ut da sie ‚ nicht zulassen, dass Sie Dateiberechtigungen auf andere Weise angeben, als sie direkt in das Dateisystem zu setzen, bevor Sie keine andere Wahl haben

Antwort

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

Antwort

Sie können Verwenden Sie fakeroot, 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 /, aber mit fakeroot würden Sie höchstens Ihr Home-Verzeichnis entfernen.

Kommentare

  • Das ist nicht ‚ erklärt nicht die Notwendigkeit von fakeroot. Sie können Ihr Home-Verzeichnis als sich selbst entfernen.

Antwort

Die einfache Antwort:

su und sudo führen Befehle als root aus. fakeroot nicht, außerhalb der partiellen Sandbox-Anordnung.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.