modifier la propriété des fichiers pour les fichiers dans l'archive tar

10

Je travaille en tant qu'utilisateur et je voudrais créer une archive tar qui, une fois décompressée (par root), extraira ses fichiers avec la propriété root (sinon root devrait changer la propriété manuellement pour chaque fichier, une fois les fichiers extraits. à destination).

J'ai trouvé fakerootce qui semble faire exactement cela. Mais je n'arrive pas à trouver la syntaxe que je dois utiliser pour créer mon archive.

Comment puis-je créer une archive tar.xz, afin que les fichiers aient la propriété root lorsqu'ils sont décompressés par root?

do something with fakeroot ...
tar cfpJ foo.tar.xz foo/
user1968963
la source

Réponses:

12

Comment puis-je créer une archive tar.xz, afin que les fichiers aient la propriété root lorsqu'ils sont décompressés par root?

C'est à la racine qui déballe:

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

Si vous voulez les faire tous root pour commencer, vous pouvez utiliser

tar --owner=root --group=root -cf ...
boucle d'or
la source
cela ne fonctionne pas pour moi: me tar --owner=root --group=root cfpJ files.tar.xz files/donne une erreur tar: You must specify one of the -Acdtrux 'ou --test-label' options Try tar --help' outar --usage' for more information.
user1968963
Vous avez besoin d'un -avant votre courte chaîne d'options: tar --owner=root --group=root -cfpJ ...c'est -cfpJ-à- dire pas cfpJ.
goldilocks
tar --owner=root --group=root -cfpJ files.tar.xz files/me donne une autre erreur: tar: files.tar.xz: Cannot stat: No such file or directory tar: Exiting with failure status due to previous errorset en plus, ça crée un fichier appelé pJ.
user1968963
3
D'accord. J'ai toujours mis le fà la fin (car cela a plus de sens, intuitivement) et bas et voici, j'obtiens le même échec avec -cfpJMAIS les -cpJfœuvres.
goldilocks
@ user1968963: f doit toujours être juste avant le nom de fichier, car cela signifie "le paramètre suivant est le nom de fichier". Si vous ne le placez pas juste avant le nom de fichier, tar pensera que le nom de fichier est "", puis il essaie d'ouvrir un fichier "", qu'il ne peut pas stat (bien sûr).
Olivier Dulac
8

Fakeroot

L' utilitaire fakeroot , ou le nouvel utilitaire fakeroot-ng (même objectif, technique d'implémentation différente) exécute un programme et prétend au programme qu'il s'exécute en tant que root et que les appels système tels que chownréussis. Seul le programme estime que ces appels ont réussi, rien n'est réellement reflété dans le système de fichiers (il ne peut pas l'être car il fakerootn'a pas de privilèges supplémentaires). Toutefois, si le programme modifie la propriété d'un fichier et prend ensuite des mesures en fonction de la propriété de ce fichier, cela peut modifier le comportement du programme.

Une façon typique d'obtenir un travail utile de fakeroot en exécutant un environnement fakeroot où les événements suivants se produisent:

  1. Créez des fichiers, déplacez-les, changez leur propriétaire et leurs modes, etc.
  2. Créez une archive de ces fichiers.

Exemple:

fakeroot sh -c '
    chown root:root usr/bin/foo
    tar cf foo.tar usr
'

Vous devez utiliser une seule invocation de fakeroot, car il n'y a pas de mémoire entre les invocations.

Espaces de noms Linux

Juste pour être complet, je mentionnerai que si vous avez un noyau Linux ≥3.8, les espaces de noms sont une autre façon de créer un environnement prétendant root. Le support de l'espace utilisateur n'est pas encore là, donc je n'entrerai pas dans les détails.

Montez l'archive

Une autre façon de résoudre votre problème consiste à monter l'archive en tant que répertoire. Vous pouvez utiliser archivemount , qui est capable de modifier plusieurs formats d'archive via libarchive , y compris le tar compressé.

mkdir mnt
archivemount foo.tar.xz mnt
chown root:root mnt/usr/bin/foo
fusermount -u mnt
Gilles 'SO- arrête d'être méchant'
la source
Belle astuce avec archivemount, mais cela nécessite toujours une élévation de privilèges, et même si l'utilisateur se trouve dans un groupe de confiance autorisé à monter et à démonter, le processus échoue chown, donc une sorte d'outils tiers comme fakerootou des espaces de noms doivent être utilisés , aussi.
Anton Samsonov