Fakeroot
Das Dienstprogramm fakeroot oder das neuere Dienstprogramm fakeroot-ng (gleicher Zweck, unterschiedliche Implementierungstechnik) führt ein Programm aus und gibt dem Programm vor, dass es als root ausgeführt wird und dass Systemaufrufe wie chown
erfolgreich ausgeführt werden. Nur das Programm glaubt, dass diese Aufrufe erfolgreich waren, nichts spiegelt sich tatsächlich im Dateisystem wider (es kann nicht sein, da fakeroot
es keine zusätzlichen Berechtigungen hat). Wenn das Programm jedoch den Besitz einer Datei ändert und dann basierend auf dem Besitz dieser Datei eine Aktion ausführt, kann dies das Verhalten des Programms ändern.
Ein typischer Weg, um nützliche Arbeit aus fakeroot herauszuholen, indem Sie eine fakeroot-Umgebung ausführen, in der Folgendes passiert:
- Erstellen Sie einige Dateien, verschieben Sie sie, ändern Sie ihren Besitz und ihre Modi usw.
- Erstellen Sie ein Archiv dieser Dateien.
Beispiel:
fakeroot sh -c '
chown root:root usr/bin/foo
tar cf foo.tar usr
'
Sie müssen einen einzelnen Aufruf von verwenden fakeroot
, da zwischen den Aufrufen kein Speicher vorhanden ist.
Linux-Namespaces
Der Vollständigkeit halber möchte ich erwähnen, dass Namespaces eine weitere Möglichkeit sind, eine Pretend-Root-Umgebung zu erstellen , wenn Sie einen Linux-Kernel ≥3,8 haben . Der Userland-Support ist noch nicht ganz da, daher werde ich nicht näher darauf eingehen.
Hängen Sie das Archiv ein
Eine andere Möglichkeit, Ihr Problem zu lösen, besteht darin, das Archiv als Verzeichnis bereitzustellen. Sie können archivemount verwenden , mit dem mehrere Archivformate über libarchive geändert werden können , einschließlich komprimiertem tar.
mkdir mnt
archivemount foo.tar.xz mnt
chown root:root mnt/usr/bin/foo
fusermount -u mnt
tar --owner=root --group=root cfpJ files.tar.xz files/
gibt mir den Fehlertar: You must specify one of the
-Acdtrux 'oder--test-label' options Try
tar --help' odertar --usage' for more information.