Warum brauchen wir überhaupt ein fakeroot
Kommando? Können wir nicht einfach die Befehle sudo
oder 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 -rfakeroot
muss nicht mehr root für eine Paketerstellung sein. Dies wird dadurch getan ,LD_PRELOAD
umlibfakeroot.so
, die Wrapper um bietetgetuid
,chown
,chmod
,mknod
,stat
, ..., wodurch eine gefälschte Wurzelumgebung zu schaffen. Wenn Sie nichts davon verstehen, brauchen Sie es nichtfakeroot
!
Meine Frage ist, welchen speziellen Zweck löst es, dass eine einfache su
oder sudo
nicht? 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?
sudo
odersu
weil es sich um Ihren Computer handelt.fakeroot
hat 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 einetar
Datei mit den richtigen Berechtigungen und Eigentümern zu erstellen , was beispielsweise beim Packen von Software nützlich ist.fakeroot
! Wenn Sie sich keine Situationfakeroot
vorstellen 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.Antworten:
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
root
Rechte erforderlich sind (UID
undGID
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 haben das gleiche Problem wie Sie). Genau dasfakeroot
tut es: Es gibt der Umgebung, die es benötigt, ein effektivesUID
undGID
von 0 vor.In der Praxis erhalten Sie nie echte
root
Privilegien (im Gegensatz zusu
undsudo
die Sie erwähnen).quelle
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?Um den Unterschied zwischen fakeroot und einem echten sudo / su klar zu erkennen, tun Sie einfach Folgendes:
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.
quelle
.deb
alle meine/usr
Dateien bei der Installation einer solchen Datei dem angerufenen Benutzer gehörenfakeroot
?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 (dasfakeroot
abfängt und zurückgibtroot
) 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.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 gebensudo
wü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:Auf den ersten Blick scheint es
fakeroot
Zeitverschwendung gewesen zu sein, etwas benutzt zu haben. Am Ende, wenn Sie nicht verwendet hättenfakeroot
, hätten Sie das gleiche bekommen.Das Feinste hier ist:
Das heißt, der Inhalt der Datei merkt sich immer noch, dass er root ist. Man könnte sagen,
fakeroot
wenn man nicht verwendet, hätte dies zu denselben Ergebnissen geführt. Sie haben recht, dieses Beispiel ist zu einfach.Nehmen wir ein anderes Beispiel:
Lass uns nachsehen, was passiert ist. Ich habe so getan, als wäre
root
das völlig ineffektiv und erschaffenx
undy
. Ich gab vor,x
zu gehörenmyuser
undy
zu gehörenroot
. Sie gehören eigentlich beide dazumyuser
(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, dassfakeroot
dies eigentlich nichts bewirkt, können Sie unmöglich eine Fähigkeit erworben haben, die Sie vorher nicht hatten.Aber , und
fakeroot
darum 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 eintar
Ed,gzip
Edxz
,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 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
sudo
den Dateieigentümer und die Berechtigungen auf ändernroot
, 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üssensudo
das 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 Siefakeroot
tun müssen, ist dies möglich zu machen. Damit kann der Packager die ListeA
als root-Besitzer für den Archivierer anzeigen. Wenn das Paket vom Benutzer dekomprimiert wird, fordert der Archivierer die Root-Berechtigung an und erstellt esA
als root-Besitzer.quelle
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.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:
Überprüfen Sie mehr hier: fakeroot
quelle
the program running in it thinks it has root privileges
und dem Programm mit Root-Rechten? Wenn ich arm -rf /
und das Programm ausführen kann, denke ich, dass ich Root-Rechte habe ...rm
Sie die Überprüfung, ob Sie über ausreichende Berechtigungen verfügen , umgehen , aber der Kernel selbst lässt Sie dies nicht zu. Derunlink
Systemaufruf 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 machtIch 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
fakeroot
ist 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 WahlEine 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.
quelle
Sie können fakeroot verwenden, ohne über Root-Rechte zu verfügen. Wenn Sie haben
su
und / odersudo
würden Sie in der Lage sein , Ihr System mit einem einfach zu zerstörenrm -rf /
, aber mit fakeroot höchstens würden Sie Ihr Home - Verzeichnis entfernen.quelle
fakeroot
. Sie können Ihr Home-Verzeichnis als Sie selbst entfernen.Die einfache Antwort:
su und sudo führen Befehle als root aus. fakeroot nicht, ausserhalb der teilweisen Sandbox-Anordnung.
quelle