Ändern Sie den Dateibesitz für Dateien im Tar-Archiv

10

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, fakerootwas 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/
user1968963
quelle

Antworten:

12

Wie kann ich ein tar.xz-Archiv erstellen, damit die Dateien beim Entpacken durch root den Root-Besitz haben?

Das liegt an der Wurzel, die auspackt:

tar --no-same-owner -xf ...

Wenn Sie sie alle zunächst als Root festlegen möchten, können Sie sie verwenden

tar --owner=root --group=root -cf ...
Goldlöckchen
quelle
das funktioniert bei mir nicht: tar --owner=root --group=root cfpJ files.tar.xz files/gibt mir den Fehler tar: You must specify one of the -Acdtrux 'oder --test-label' options Try tar --help' odertar --usage' for more information.
user1968963
Sie benötigen -vor Ihrer kurzen Optionszeichenfolge eine Zeichenfolge: tar --owner=root --group=root -cfpJ ...Dh -cfpJ, nicht cfpJ.
Goldlöckchen
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 errorsund außerdem erstellt es eine Datei namens pJ.
user1968963
3
In Ordnung. Ich setze das immer fam Ende (weil es intuitiver sinnvoller ist) und niedrig und siehe da, ich bekomme den gleichen Fehler mit -cfpJABER -cpJffunktioniert.
Goldlöckchen
@ user1968963: f sollte immer kurz vor dem Dateinamen stehen, da dies bedeutet, dass "der nächste Parameter der Dateiname ist". Wenn Sie es nicht direkt vor den Dateinamen setzen, denkt tar, dass der Dateiname "" ist, und versucht dann, eine "" Datei zu öffnen, die (natürlich) nicht angegeben werden kann.
Olivier Dulac
8

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 chownerfolgreich 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 fakerootes 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:

  1. Erstellen Sie einige Dateien, verschieben Sie sie, ändern Sie ihren Besitz und ihre Modi usw.
  2. 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
Gilles 'SO - hör auf böse zu sein'
quelle
Netter Trick mit 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 fehl chown, sodass eine Art von Tools fakerootoder Namespaces von Drittanbietern verwendet werden müssen , zu.
Anton Samsonov