NAME¶
fakeroot - einen Befehl zur Dateimanipulation in einer Umgebung mit
gefälschten Root-Rechten ausführen
ÜBERSICHT¶
fakeroot [-l|--lib Bibliothek] [--faked
gefälschtes_Programm ] [-i
zu_ladende_Datei] [-s zu_speichernde_Datei]
[-u|--unknown-is-real ] [-b|--fd-base ] [-h|--help ]
[-v|--version ] [--] [Befehl]
BESCHREIBUNG¶
fakeroot führt einen Befehl in einer Umgebung aus, in der es
scheint, als habe er Root-Rechte zur Dateimanipulation. Dies ist
nützlich, um Benutzern zu erlauben Archive (tar, ar, .deb etc.) mit
Dateien darin zu erstellen, die Root-Rechte haben/Root gehören. Ohne
fakeroot müsste jemand Root-Rechte haben, um die einzelnen Dateien
des Archivs mit den korrekten Zugriffs- und Besitzrechten zu erstellen und sie
zu verpacken oder jemand müsste diese Archive direkt, ohne Benutzung des
Archvierungsprogramms, erstellen.
fakeroot funktioniert, indem es die Bibliotheksfunktionen zur
Dateimanipulation (chmod(2),
stat(2) etc.) durch solche ersetzt, die die
Auswirkungen simulieren, die die echten Funktionen hätten, wenn der
Benutzer Root wäre. Diese Wrapper-Funktionen liegen in einer gemeinsam
benutzten Bibliothek
/usr/lib/libfakeroot.so*, die durch den
LD_PRELOAD-Mechanismus des dynamischen Ladeprogramms geladen wird.
(Siehe
ld.so(8))
Falls Sie beabsichtigen, Pakete mit
fakeroot zu bauen, versuchen Sie
bitte zuerst, das fakeroot-Paket zu bauen: Die Ebene »debian/rules
build« hat ein paar Tests (meist wird getestet, ob Fehler in alten
fakeroot-Versionen vorliegen). Falls diese Tests fehlschlagen (zum Beispiel,
weil Sie bestimmte libc5-Programme auf Ihrem System haben), wird der Bau
anderer Pakete mit fakeroot ziemlich wahrscheinlich ebenfalls scheitern, aber
möglicherweise auf subtilere Art.
Beachten Sie außerdem, dass es am Besten ist, nicht den Bau der Pakete
selbst unter fakeroot vorzunehmen. Insbsondere mögen es
»configure« und Co. nicht, wenn sich das System plötzlich
anders als von ihnen erwartet verhält (oder sie löschen den Inhalt
einiger Umgebungsvariablen, die fakeroot benötigt).
OPTIONEN¶
- -l Bibliothek, --lib
Bibliothek
- gibt eine alternative Wrapper-Biliothek an.
- --faked Programm
- gibt ein alternatives Programm an, das als gefälscht
benutzt werden soll.
- [--] Befehl
- jeder Befehl, den Sie als fakeroot ausführen
möchten. Benutzen Sie ‘--’, falls Sie im Befehl andere
Optionen haben, die fakeroots Auswertung der Optionen verwirren
könnte.
- -s zu_speichernde_Datei
- speichert die fakeroot-Umgebung beim Beenden in
zu_speichernde_Datei. Diese Datei kann benutzt werden, um die Umgebung
später mit -i wiederherzustellen. Diese Datei wird jedoch undicht
sein und fakeroot wird sich seltsam verhalten, sofern Sie nicht die
angefassten Dateien innerhalb von fakeroot belassen, wenn die Umgebung
außerhalb liegt. Dies kann dennoch nützlich sein. Es kann
beispielsweise mit rsync(1) benutzt werden, um ganze Verzeichnisbäume
mit Benutzer-, Gruppen und Geräteinformationen zu sichern und
wiederherzustellen, ohne dass Sie Root sein müssen. Weitere
Einzelheiten finden Sie in
/usr/share/doc/fakeroot/README.saving.
- -i zu_ladende_Datei
- lädt eine vorher mit -s gespeicherte fakeroot-Umgebung
aus zu_ladende_Datei. Beachten Sie, dass dies nicht implizit die Datei
speichert, benutzen Sie für dieses Verhalten zusätzlich -s. Die
Benutzung der gleichen Datei sowohl für -i als auch für -s in
einem einzigen fakeroot-Aufruf ist ungefährlich.
- -u, --unknown-is-real
- benutzt die echten Besitzrechte von Dateien, die fakeroot
vorher unbekannt waren, anstatt so zu tun, als gehörten sie
root:root.
- -b Datei_Deskriptor
- gibt die Datei-Deskriptor-Basis an (nur im TCP-Modus).
Datei_Deskriptor ist die minimale Datei-Deskriptor-Nummer, die für
TCP-Verbindungen benutzt wird; dies könnte wichtig sein, um Konflikte
mit den Datei-Deskriptoren von Programmen zu vermeiden, die unter fakeroot
laufen.
- -h
- zeigt die Hilfe an.
- -v
- zeigt die Version an.
BEISPIELE¶
Hier folgt eine Beispielsitzung mit
fakeroot. Beachten Sie, dass
innerhalb der gefälschten Root-Umgebung Dateimanipulation, die
Root-Rechte erfordert, erfolgreich ist, obwohl sie nicht wirklich stattfindet.
$ whoami
joost
$ fakeroot /bin/bash
# whoami
root
# mknod hda3 b 3 1
# ls -ld hda3
brw-r--r-- 1 root root 3, 1 Jul 2 22:58 hda3
# chown joost:root hda3
# ls -ld hda3
brw-r--r-- 1 joost root 3, 1 Jul 2 22:58 hda3
# ls -ld /
drwxr-xr-x 20 root root 1024 Jun 17 21:50 /
# chown joost:users /
# chmod a+w /
# ls -ld /
drwxrwxrwx 20 joost users 1024 Jun 17 21:50 /
# exit
$ ls -ld /
drwxr-xr-x 20 root root 1024 Jun 17 21:50 //
$ ls -ld hda3
-rw-r--r-- 1 joost users 0 Jul 2 22:58 hda3
In Wirklichkeit geschieht nur das, was Benutzer
joost sowieso tun
könnte.
fakeroot wurde insbesondere geschrieben, um es Benutzern zu
ermöglichen, Debian-GNU/Linux-Pakete (im
deb(5)-Format) zu
erstellen, ohne ihnen Root-Rechte zu geben. Dies kann durch Befehle wie
dpkg-buildpackage -rfakeroot oder
debuild -rfakeroot
erledigt werden (tatsächlich ist -rfakeroot heutzutage in debuild
Vorgabe, so dass Sie dieses Argument nicht brauchen).
SICHERHEITSASPEKTE¶
fakeroot ist ein normales nicht-setuid-Programm. Es vergrößert
weder die Benutzerrechte, noch vermindert es die Sicherheit des Systems.
DATEIEN¶
/usr/lib/libfakeroot/libfakeroot.so* – die gemeinsam benutzte
Bibliothek, die die Wrapper-Funktionen enthält
UMGEBUNG¶
- FAKEROOTKEY
- der Schlüssel, der benutzt wird, um mit dem
fakeroot-Daemon zu kommunizieren. Jedes Programm, das mit dem richtigen
LD_PRELOAD und einem FAKEROOTKEY eines laufenden Daemons
gestartet wird, verbindet sich automatisch zu diesem Daemon und hat die
gleiche »gefälschte« Sicht auf die Zugriffs- und
Besitzrechte des Dateisystems (unter der Annahme, dass Daemon und
verbindendes Programm vom gleichen Benutzer gestartet wurden).
- LD_LIBRARY_PATH
- LD_PRELOAD
- fakeroot wurde durch Verhüllen von Systemaufrufen
implementiert. Dies wird durch die Einstellungen
LD_LIBRARY_PATH=/usr/lib/fakeroot und LD_PRELOAD=libfakeroot.so.0
bewerkstelligt. Diese Bibliothek wird vor der C-Bibliothek des Systems
geladen. Daher werden die meisten Bibliotheksfunktionen von ihr
abgefangen. Falls Sie entweder LD_LIBRARY_PATH oder
LD_PRELOAD aus einer fakeroot-Umgebung heraus setzen müssen,
sollte es relativ zum angegebenen Pfad geschehen wie in
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/foo/bar/
EINSCHRÄNKUNGEN¶
- Bibliotheksversionen
- Jeder innerhalb fakeroot ausgeführte Befehl
muss zu der gleichen Version der C-Bibliothek gelinkt werden wie
fakeroot selbst.
- open()/create()
- fakeroot umhült nicht open(), create(), etc. Falls
Benutzer joost also entweder
touch foo
fakeroot
ls -al foo
oder andersherum
fakeroot
touch foo
ls -al foo
ausführt, hat fakeroot im ersten Fall keine Möglichkeit zu wissen,
dass der Benutzer von foo wirklich joost sein soll, während es
im zweiten Fall root gewesen sein soll. Für die
Debian-Paketierung ist es immer in Ordnung, allen »unbekannten«
Dateien uid=gid=0 zu geben. Der wahre Weg, dies zu umgehen ist,
open() und create() zu verhüllen, aber dies erzeugt
neue Probleme, wie vom Paket libtricks gezeigt wird. Dieses Paket
verhüllte mehr Funktionen und versuchte viel mehr als fakeroot
zu tun. Es stellte sich heraus, dass ein unbedeutendes Upgrade von libc
(von einer, in der die Funktion stat() open() nicht nutzte,
zu einer mit einer stat()-Funktion, die (in einigen Fällen)
open() benutzte), unerklärbare Schutzverletzungen verursachen
würde (das heißt, das libc6- stat() ruft das
verhüllte open() auf, das dann libc6-stat() aufrufen
würde, etc). Das Beheben war alles andere als einfach, aber einmal
behoben, war es nur eine Frage der Zeit, bevor eine andere Funktion begann
open() zu benutzen, ganz zu schweigen vom Versuch, es auf andere
Betriebssysteme zu portieren. Daher wurde entschieden, die Anzahl der von
fakeroot verhüllten Funktionen so klein wie möglich zu halten,
um die Wahrscheinlichkeit von ‘Zusammenstößen’ so
gering wie möglich zu halten.
- GNU configure (und andere derartige Programme)
- fakeroot ändert in der Tat die Art, wie sich das
System verhält. Programme, die das System gründlich prüfen,
wie GNU configure könnten dadurch verwirrt werden (oder, wenn nicht,
könnten sie fakeroot so beanspruchen, dass fakeroot selbst verwirrt
wird). Daher ist es ratsam, »configure« nicht innerhalb von
fakeroot auszuführen. Da configure im »debian/rules
build«-Ziel aufgerufen werden sollte, erledigt dies
»dpkg-buildpackage -rfakeroot« korrekt.
FEHLER¶
Es umhüllt nicht open(). Dies ist an sich nicht schlecht, aber falls ein
Programm open("Datei", O_WRONLY, 000) aufruft, in die Datei
»Datei« schreibt, sie schließt und dann erneut versucht, die
Datei zum Lesen zu öffnen, schlägt das Öffnen fehl, da der
Modus der Datei 000 sein wird. Der Fehler liegt darin, dass, falls Root das
Gleiche tut, open() erfolgreich sein wird, da die Dateirechte für Root
überhaupt nicht geprüft werden. Es wurde entschieden, open() nicht
zu verhüllen, da open() von vielen anderen Funktionen in libc benutzt
wird (auch von jenen, die bereits verhüllt sind), wodurch Schleifen
erzeugt werden (oder möglicherweise zukünftige Schleifen, wenn die
Implementierung verschiedener libc-Funktionen sich ein wenig ändert).
KOPIEREN¶
fakeroot wird unter den Bedingungnen der GNU General Public License. (GPL
2.0 oder höher) weitergegeben.
AUTOREN¶
- Joost Witteveen
- <joostje@debian.org>
- Clint Adams
- <clint@debian.org>
- Timo Savola
ÜBERSETZER¶
Übersetzung bei Chris Leick <debian-l10n-german@lists.debian.org>
HANDBUCHSEITE¶
größtenteils von J.H.M. Dassen <jdassen@debian.org>. Ziemlich
viele Mods/Zusätze von Joost und Clint.
SIEHE AUCH¶
debuild(1),
dpkg-buildpackage(1),
faked(1),
/usr/share/doc/fakeroot/DEBUG