Forcer le propriétaire et le groupe pour le contenu d'un fichier tar?

21

Je voudrais créer un fichier tar avec un contenu appartenant à un propriétaire: paire de groupes qui n'existe pas sur le système à partir duquel le fichier est créé.

Voici la direction que j'ai essayée:

tar ca --owner='otherowner' --group='othergroup' mydata.tgz mydata

Et lors de l'exécution de cette commande, j'obtiens l'erreur suivante:

tar: otherowner: Invalid owner
tar: Error is not recoverable: exiting now

Existe-t-il un moyen de forcer tar à accepter le propriétaire: groupe, même si aucun d'eux n'existe sur le système à partir duquel le fichier est créé?

David
la source
1
Notez que --owner n'est pas une option prise en charge par tar. Il s'agit d'un GNUisme non portable. Avec star, vous utilisez par exemple la recherche intégrée et spécifiez -chown username / userid -chgrp groupname / groupid.
schily

Réponses:

19

Linux n'utilise pas en interne les noms des propriétaires et des groupes mais des numéros - UID et GID. Les noms des utilisateurs et des groupes sont mappés à partir du contenu des fichiers / etc / passwd et / etc / group pour la commodité de l'utilisateur. Puisque vous n'avez pas d'entrée «autre propriétaire» dans aucun de ces fichiers, Linux ne sait pas réellement quel UID et GID doivent être attribués à un fichier. Essayons plutôt de passer un nombre:

$ tar cf archive.tar test.c --owner=0 --group=0
$ tar -tvf archive.tar 
-rw-rw-r-- root/root        45 2013-01-10 15:06 test.c
$ tar cf archive.tar test.c --owner=543543 --group=543543
$ tar -tvf archive.tar 
-rw-rw-r-- 543543/543543    45 2013-01-10 15:06 test.c

Cela semble fonctionner.

Nykakin
la source
Intéressant! La commande tar doit donc interroger le système pour que les numéros d'utilisateur et de groupe correspondent aux noms que j'essayais d'utiliser. Merci!
David
1
Une note pour les autres personnes rencontrant ceci: tar affiche automatiquement les noms d' utilisateurs / groupes lors de l'utilisation des -tvfdrapeaux. Pour afficher les numéros actuels des fichiers dans une archive, utilisez une commande comme celle-ci:$ tar --numeric-owner -tvf archive.tar
David
En fait, avec ma version tar, je peux entrer n'importe quel nom d'utilisateur que je voudrais et le stocker dans le fichier tar (mais avec mon identifiant numérique par défaut). Lors de la liste, vous obtenez les noms d'utilisateur par défaut, mais les identifiants utilisateur à l'aide du --numeric-ownerdrapeau. Ce qui est plus intéressant, c'est que vous pouvez définir les deux en utilisant --owner=name:1234ou --group=groupname:4711. Source: fonction parse_owner_group du code source tar
Bluehorn
Il est probablement intéressant de noter que l'en-tête tar ustar (standard sur BSD et Linux) code à la fois les valeurs numériques UID / GID ainsi que les noms d'utilisateur et de groupe. Lors du déballage, les noms sont utilisés en premier, s'ils sont présents dans l'en-tête et correspondent aux utilisateurs et groupes définis sur le système. L'UID et le GID numériques ne seront utilisés que comme solution de secours.
kbolino
1

Ajoutez les paramètres --no-same-owner --no-same-permissionsavec tar. Jetez un œil aux documents .

Bruno Wego
la source
2
Ces options ne sont utilisées que lors de l'extraction de fichiers à partir d'une archive tar - pas en créer un.
Anthony G - justice pour Monica
Vous avez raison @AnthonyGeoghegan!
Bruno Wego
-2

Voici un morceau de code pour remplacer l'utilisateur / groupe avec des identifiants à la volée:

tar ca --owner="$(id -u ***otherowner***)" --group="$(id -g ***othergroup***)" mydata.tgz mydata
poussma
la source
5
Non. Si id sait comment résoudre le nom, tar le sait aussi. La question concerne un nom d'utilisateur inconnu du système.
Daniel S