Was ist die Notwendigkeit für "Fakeroot" -Befehl in Linux

93

Warum brauchen wir überhaupt ein fakerootKommando? Können wir nicht einfach die Befehle sudooder verwenden su?

Die Manpage sagt:

fakeroot - Führt einen Befehl in einer Umgebung aus, in der Root-Rechte für die Dateimanipulation vorgetäuscht werden

About.com sagt:

Gibt eine gefälschte Root-Umgebung. Dieses Paket soll so etwas wie Folgendes ermöglichen: Es dpkg-buildpackage -rfakerootmuss nicht mehr root für eine Paketerstellung sein. Dies wird dadurch getan , LD_PRELOADum libfakeroot.so, die Wrapper um bietet getuid, chown, chmod, mknod, stat, ..., wodurch eine gefälschte Wurzelumgebung zu schaffen. Wenn Sie nichts davon verstehen, brauchen Sie es nicht fakeroot!

Meine Frage ist, welchen speziellen Zweck löst es, dass eine einfache suoder sudonicht? Um beispielsweise alle installierten Pakete in Ubuntu neu zu packen, geben wir folgenden Befehl ein:

$ 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:

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?

gkt
quelle
6
Aus Sicherheitsgründen ist es eine gute Idee, zu vermeiden, dass als Root alles ausgeführt wird, was als normaler Benutzer ausgeführt werden kann, auch wenn Sie es ausführen können sudooder suweil es sich um Ihren Computer handelt. fakeroothat zwei Verwendungszwecke: 1) Es täuscht Programme vor, Sie seien in der Tat Root-Benutzer, was für einige schlecht geschriebene proprietäre Software möglicherweise erforderlich ist, auch wenn sie nicht benötigt wird (normalerweise Windows-Entwickler auf Linux umgestellt). Ansonsten ist es nicht möglich, hauptsächlich eine tarDatei mit den richtigen Berechtigungen und Eigentümern zu erstellen , was beispielsweise beim Packen von Software nützlich ist.
pqnet
1
Ich denke, der Hinweis im Auszug von About.com bringt es auf den Punkt: Wenn Sie nichts davon verstehen, brauchen Sie es nicht fakeroot! Wenn Sie sich keine Situation fakerootvorstellen können, in der es nützlich ist, dann brauchen Sie sie buchstäblich nicht. Aber Leute, die es tatsächlich brauchen, verstehen den Anwendungsfall vollständig.
Christopher Schultz

Antworten:

69

Stellen Sie sich vor, Sie sind Entwickler / Paketverwalter 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 ihn erstellen usw. Bei diesen Versuchen werden Sie feststellen, dass für einige Schritte rootRechte erforderlich sind ( UIDund GID0) aus verschiedenen Gründen (Sicherheit, übersehene Berechtigungen usw.). Es ist jedoch nicht möglich, rootRechte zu erhalten , da Sie auf einem Remotecomputer arbeiten (und viele andere Benutzer haben das gleiche Problem wie Sie). Genau das fakeroottut es: Es gibt der Umgebung, die es benötigt, ein effektives UIDund GIDvon 0 vor.

In der Praxis erhalten Sie nie echte rootPrivilegien (im Gegensatz zu suund sudodie Sie erwähnen).

Sakisk
quelle
Also kann ich nicht verwenden fakeroot, um die Systemeinstellungen zu ändern? Weil der Befehl, den wir ausführen, denkt, dass er als root ausgeführt wird und macht, was immer wir wollen. wird es nicht?
mrid
3
@mrid Beachten Sie die "In der Praxis erhalten Sie nie echte Root-Rechte". Die Antwort lautet also no
sakisk
53

Um den Unterschied zwischen fakeroot und einem echten sudo / su klar zu erkennen, tun Sie einfach Folgendes:

$ 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-Rechte benötigt. Und genau das benötigt ein Verpackungswerkzeug, um Pakete zu erstellen, die auf jeder Maschine sinnvoll sind.

Wenn Sie fakeroot zum Verpacken verwenden, möchten Sie die Tools, die Sie unter fakeroot ausführen, so einrichten, dass Ihre Dateien als Eigentum von root betrachtet werden. Nicht mehr, nicht weniger. Tatsächlich funktioniert su oder sudo nicht, um den richtigen Dateibesitz zu erlangen.

MortenSickel
quelle
Ist Fälscher nicht gefährlich? Wenn ich eine Datei mit dem suid-Bit und der rx-Perm erstelle, wird die Datei im Besitz von root erstellt und kann von jedem als root ausgeführt werden! Oder funktioniert das Setzen des suid-Bits möglicherweise nicht?
Frizlab
7
Nicht gut. Ich habe es selbst ausprobiert. Der Hauptgrund für fakeroot ist, das Eigentum root zu bekommen: root in gebauten Paketen, ohne tatsächlich root zu sein. Installierte Pakete haben jedoch die richtigen Perms.
Hanetzer
2
Es war alles sehr verwirrend, bis ich den Kommentar von @ ntzrmtthihu777 las!
Shahbaz,
Entschuldigung, ich verstehe die Beschreibung nicht. Warum nicht die Tools so patchen, dass sie sich nicht beschweren, wenn Sie nicht root sind? Als weitere Frage: Denn die Dateien , die Sie unter fakeroot erstellen , werden nicht tatsächlich im Besitz von Root. Bedeutet dies nicht, dass .deballe meine /usrDateien bei der Installation einer solchen Datei dem angerufenen Benutzer gehören fakeroot?
Johannes Schaub - litb
@ JohannesSchaub-litb, nein das ist der Punkt. Die Dateien gehören nicht root, aber in einer fakerootShell sehen sie so aus, wie sie sind. Wenn das DEB-Paket in dieser Shell erstellt wird, wird der Dateieigentümer aus dem Dateisystem (das fakerootabfängt und zurückgibt root) gelesen und im Paket gespeichert. Bei der Installation des Pakets benötigt dpkg dann root-Zugriff, da das Paket angibt, dass die Datei root gehören sollte.
Shahbaz
45

Da die Antworten (für mich) schwer zu verstehen sind und einige Überlegungen erforderlich waren, um sie zu verstehen ( dieser Kommentar hat mich 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 Aufruf eine neue Shell geben sudowürde) so tun , als würden Sie Dinge tun, für die Sie eine Erlaubnis benötigen, und beenden, würde absolut nichts passieren.

Wenn Sie darüber nachdenken, ist es eine reine Zeitverschwendung. Warum würdest du Dinge tun, die eigentlich nicht passieren werden? 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 Fälscherfuß

Von könnte noch eine Spur übrig sein fakeroot. Schauen wir uns die Befehle in MortenSickels Antwort an, die ziemlich nett ist und eine Gegenstimme 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 scheint es fakerootZeitverschwendung gewesen zu sein, etwas benutzt zu haben. Am Ende, wenn Sie nicht verwendet hätten fakeroot, hätten Sie das gleiche bekommen.

Das Feinste hier ist:

$ cat root.tst
Wow I have root access

Das heißt, der Inhalt der Datei merkt sich immer noch, dass er root ist. Man könnte sagen, fakerootwenn man nicht verwendet, hätte dies zu denselben Ergebnissen geführt. 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 habe so getan, als wäre rootdas völlig ineffektiv und erschaffen xund y. Ich gab vor, xzu gehören myuserund yzu gehören root. Sie gehören eigentlich beide dazu myuser(wie wir am Ende sehen können), aber ich habe nur so getan .

Dann habe ich eine Liste erstellt und meine Vorstellungskraft in einer Datei gespeichert. Wenn ich später auf die Datei zurückblicke, kann ich sehen, wem die Dateien gehören sollten. Auch hier sind sie nicht im Besitz von Leuten, die ich mir vorgestellt habe, ich habe mir das einfach nur vorgestellt.

3. Also ... warum willst du das nochmal?

Sie können sagen, dass ich nicht wirklich als Root vorgetäuscht werden musste, um diese Auflistung zu erstellen. Ich hätte einfach die Liste erstellen und sie dann nach meinen Vorstellungen bearbeiten können. Sie haben recht, das haben Sie nicht gebraucht fakeroot. Da Sie wissen, dass fakerootdies eigentlich nichts bewirkt, können Sie unmöglich eine Fähigkeit erworben haben, die Sie vorher nicht hatten.

Aber , und fakerootdarum geht es, könnte das Bearbeiten der Auflistung nicht trivial sein. Wie bei einem Paket, das auf Ihrem System installiert werden kann, verfügen Sie über ein tarEd, gzipEd xz, 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 mir fällt kein Weg ein.

Könnte es ein Tool geben, das, sobald alles komprimiert ist, die komprimierte Datei ändert und die Eigentumsrechte und Berechtigungen programmgesteuert bearbeitet? Ja da könnte. Sie können also entweder die Eigentumsrechte vor dem Komprimieren vortäuschen oder sie nachträglich ändern. Debian-Leute entschieden, dass Ersteres einfacher ist.

4. Warum nicht einfach benutzen sudo?

Zunächst 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 soll. Wenn Sie also sudoden Dateieigentümer und die Berechtigungen auf ändern root, verlassen Sie die Root-Shell und versuchen, alles zu packen. Sie schlagen fehl, weil Sie die Datei jetzt nicht mehr lesen können, da Sie keinen Root-Zugriff haben. Sie müssen sudodas Paket also komprimieren und als root erstellen. Eigentlich muss man alles als root machen.

Das ist Bad TM .

Als Packager benötigen Sie keine Root-Berechtigungen und sollten diese auch nicht erhalten. Wenn Sie ein Paket installieren, müssen Sie möglicherweise eine Datei ( A) als root installieren, und dafür benötigen Sie root-Berechtigungen. Alles was Sie fakeroottun müssen, ist dies möglich zu machen. Damit kann der Packager die Liste Aals root-Besitzer für den Archivierer anzeigen. Wenn das Paket vom Benutzer dekomprimiert wird, fordert der Archivierer die Root-Berechtigung an und erstellt es Aals root-Besitzer.

Shahbaz
quelle
5
Hervorragende Berichterstattung, das macht es deutlich.
Christian Long
1
So either you could fake the ownerships before compressing, or change them after. Debian people decided the former is easier.Dies half mir, als ich mir überlegte, warum ich es nicht nachträglich ändern sollte.
aaaaaa
1
Danke, das klärt die Verwirrung, die ich hatte, nachdem ich @ Mortens Antwort
Johannes Schaub - am
33

AFAIK, fakeroot führt einen Befehl in einer Umgebung aus, in der er anscheinend Root-Rechte für die Dateibearbeitung besitzt. Dies ist nützlich, damit Benutzer Archive (tar, ar, .deb usw.) mit Dateien erstellen können, die über Root-Berechtigungen verfügen. Ohne fakeroot müsste man root-Rechte haben, um die Dateien der Archive mit den richtigen Berechtigungen und Inhabern 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 diejenigen, die den Effekt simulieren, den die eigentlichen Bibliotheksfunktionen gehabt hätten, wenn der Benutzer wirklich root gewesen wäre.

Inhaltsangabe:

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

Überprüfen Sie mehr hier: fakeroot


quelle
@MaskTheSmokin: Fakeroot bietet Ihnen also Superuser-Power nur für Dateimanipulationsoperationen, richtig.
24.
@ gkt.pro: Ich denke schon.
10
Es gibt nicht wirklich Superuser-Power, es täuscht es nur vor - das Programm, das darin läuft, glaubt, dass es Root-Rechte hat, während es die normalen Rechte des Benutzers wirklich noch verwendet.
Paŭlo Ebermann
2
Wo ist der Unterschied zwischen the program running in it thinks it has root privilegesund dem Programm mit Root-Rechten? Wenn ich a rm -rf /und das Programm ausführen kann, denke ich, dass ich Root-Rechte habe ...
Benutzer unbekannt
10
@userunknown Möglicherweise können rmSie die Überprüfung, ob Sie über ausreichende Berechtigungen verfügen , umgehen , aber der Kernel selbst lässt Sie dies nicht zu. Der unlinkSystemaufruf würde fehlschlagen. Es liegt nicht allein an der Anwendung, die Berechtigungen zu verwalten, oder Sie können eine eigene Anwendung schreiben, die die Berechtigungen nicht überprüft und alles Mögliche damit macht
Michael Mrozek
11

Ich habe es für die Erstellung von Paketen verwendet. Ich war mir nicht sicher, ob die Person, die das Skript ausführt, Root-Zugriff hat, aber das Skript musste immer noch eine Tar-Datei generieren, die Dateien enthielt, die zu Root gehören. Die einfachste Möglichkeit bestand darin, das Skript zur Paketerstellung unter fakeroot auszuführen, was den Archivierer dazu verleitete, zu glauben, dass die Dateien zu root gehören, und sie als solche in das Archiv zu packen. Auf diese Weise gehörten die Dateien beim Entpacken des Pakets auf den Zielcomputer (auf einem anderen Computer insgesamt) keinen seltsamen oder nicht vorhandenen Benutzern.

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


quelle
1
fakerootist ein Workaround-Tool für fehlerhafte Paketsoftware: Es gibt keinen Grund, warum Sie root sein müssen, um solche Pakete zu erstellen. Da Sie jedoch keine anderen Dateiberechtigungen angeben können, als sie direkt im Dateisystem festzulegen, bevor Sie keine haben Wahl
pqnet
3

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

Eero Ketonen
quelle
1

Sie können fakeroot verwenden, ohne über Root-Rechte zu verfügen. Wenn Sie haben suund / oder sudowürden Sie in der Lage sein , Ihr System mit einem einfach zu zerstören rm -rf /, aber mit fakeroot höchstens würden Sie Ihr Home - Verzeichnis entfernen.

Gabrielhidasy
quelle
2
Das erklärt nicht die Notwendigkeit für fakeroot. Sie können Ihr Home-Verzeichnis als Sie selbst entfernen.
JMCF125
1

Die einfache Antwort:

su und sudo führen Befehle als root aus. fakeroot nicht, ausserhalb der teilweisen Sandbox-Anordnung.

jdmayfield
quelle