Ich arbeite als Benutzer und möchte ein Tar-Archiv erstellen, das beim Entpacken (von root) seine Dateien mit Root-Besitz extrahiert (andernfalls müsste root den Besitz für jede Datei manuell ändern, nachdem die Dateien extrahiert wurden an sein Ziel).
Ich habe herausgefunden, fakeroot
was genau das zu tun scheint. Aber ich kann die Syntax nicht finden, die ich zum Erstellen meines Archivs verwenden muss.
Wie kann ich ein tar.xz-Archiv erstellen, damit die Dateien beim Entpacken durch root den Root-Besitz haben?
do something with fakeroot ...
tar cfpJ foo.tar.xz foo/
files
permissions
tar
user1968963
quelle
quelle
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.
-
vor Ihrer kurzen Optionszeichenfolge eine Zeichenfolge:tar --owner=root --group=root -cfpJ ...
Dh-cfpJ
, nichtcfpJ
.tar --owner=root --group=root -cfpJ files.tar.xz files/
gibt mir einen weiteren Fehler:tar: files.tar.xz: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errors
und außerdem erstellt es eine Datei namenspJ
.f
am Ende (weil es intuitiver sinnvoller ist) und niedrig und siehe da, ich bekomme den gleichen Fehler mit-cfpJ
ABER-cpJf
funktioniert.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, dafakeroot
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:
Beispiel:
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.
quelle
archivemount
, aber es erfordert immer noch eine Erhöhung der Berechtigungen, und selbst wenn sich der Benutzer in einer vertrauenswürdigen Gruppe befindet, die ein- und aushängen darf, schlägt der Prozess fehlchown
, sodass eine Art von Toolsfakeroot
oder Namespaces von Drittanbietern verwendet werden müssen , zu.