Qu'est-ce que l'indicateur -p (conserver les autorisations) de tar conserve réellement?

22

Qu'est-ce que le -pdrapeau conserve réellement lors de la création et de l'extraction d'une archive tar? S'agit-il des rwxautorisations qu'il conserve?

Lorsque j'ai créé une htdocs/archive tar appartenant à root, son extraction sur ma machine locale a changé la propriété de root à mon utilisateur.

nicoX
la source
5
Vous devriez peut-être essayer d'extraire l'archive en tant que root. Il n'est pas possible de définir des autorisations pour un autre utilisateur en tant qu'utilisateur normal, je pense donc tarqu'il ne pourra pas le faire également. Veuillez me dire si cela a fonctionné.
Louis Matthijssen
"machine locale"? Veuillez clarifier le système d'exploitation de cette machine;)
Rinzwind
Dites-nous également quels systèmes de fichiers vous utilisez. Les sources et les cibles.
terdon
Source: Red Hat Enterprise Linux Server release 6.5 (Santiago) Target: Ubuntu 13.10 Both useGPT
nicoX
Note latérale: tarpréserve les autorisations. -pet --same-owner/ --no-same-owner(comme dans les réponses) sont des indicateurs d'extraction. Ils n'ont aucun effet lors de l'archivage
Fr0zenFyr

Réponses:

19

La propriété et les autorisations sont deux choses différentes. L' -pindicateur conserve les autorisations . Sur les systèmes * nix, les utilisateurs réguliers ne peuvent pas changer la propriété des fichiers en un utilisateur qui n'est pas eux-mêmes.

Comme expliqué ici :

Seuls les processus avec un ID utilisateur effectif égal à l'ID utilisateur du fichier ou avec les privilèges appropriés peuvent changer la propriété d'un fichier. Si _POSIX_CHOWN_RESTRICTED est en vigueur pour le chemin:

  • La modification de l'ID utilisateur est limitée aux processus disposant des privilèges appropriés.

  • La modification de l'ID de groupe est autorisée pour un processus avec un ID utilisateur effectif égal à l'ID utilisateur du fichier, mais sans les privilèges appropriés, si et seulement si le propriétaire est égal à l'ID utilisateur du fichier ou (uid_t) -1 et que le groupe est égal soit à l'ID de groupe effectif du processus appelant, soit à l'un de ses ID de groupe supplémentaires.

La raison derrière cela a été joliment expliquée par @Gilles dans cette réponse Unix et Linux:

La raison de cette restriction est que le fait de donner un fichier à un autre utilisateur peut permettre à de mauvaises choses de se produire dans des situations rares, mais toujours importantes. Par exemple:

  • Si un système a des quotas de disque activés, Alice pourrait créer un fichier accessible en écriture mondiale sous un répertoire accessible uniquement par elle (donc personne d'autre ne pourrait accéder à ce répertoire accessible en écriture par le monde), puis exécuter chown pour rendre ce fichier appartenant à un autre utilisateur Bill . Le fichier compterait alors sous le quota de disque de Bill même si seule Alice peut utiliser le fichier.
  • Si Alice donne un fichier à Bill, il n'y a aucune trace que Bill n'a pas créé ce fichier. Cela peut être un problème si le fichier contient des données illégales ou compromettantes.
  • Certains programmes nécessitent que leur fichier d'entrée appartienne à un utilisateur particulier afin d'authentifier une demande (par exemple, le fichier contient des instructions que le programme exécutera au nom de cet utilisateur). Ce n'est généralement pas une conception sécurisée, car même si Bill a créé un fichier contenant des instructions syntaxiquement correctes, il n'a peut-être pas eu l'intention de les exécuter à ce moment particulier. Néanmoins, permettre à Alice de créer un fichier avec un contenu arbitraire et de le prendre comme entrée de Bill ne peut qu'empirer les choses.

Ainsi, même si vous utilisez l' --same-ownerindicateur tar , vous devrez toujours extraire les fichiers rootpour conserver la propriété. Ce drapeau est activé par défaut pour root, donc ce que vous voulez, c'est:

sudo tar xpf foo.tgz
terdon
la source
9

Il y a 2 autres options pour tar qui sont intéressantes:

--same-owner
       try extracting files with the same ownership as exists in the ar‐
       chive (default for superuser)

--no-same-owner
       extract files as yourself (**default for ordinary users**)

Le 2e est celui par défaut, vous pouvez donc l'ajouter --same-ownerpour enregistrer votre utilisateur. Vous devrez probablement le faire avec sudo.

En plus de cela: cela ne fonctionnera que sur les systèmes prenant en charge POSIX. Et les systèmes d'exploitation autres que Ubuntu peuvent ne pas avoir ces 2 options (ils ne sont pas standard).

Rinzwind
la source
3
Le --same-ownerne fonctionnera pas pour les utilisateurs non-root, ils ne seront pas le droit de mettre la propriété à tout le monde , mais eux - mêmes. C'est défini par POSIX .
terdon
4

Pour conserver le propriétaire, exécutez en tant que root ou utilisez l'indicateur --same-owner à côté de l'indicateur -p lors de l'extraction.

NGRhodes
la source
3
Il doit être exécuté en tant que root dans tous les cas. Les utilisateurs non root ne peuvent pas changer la propriété du fichier pour d'autres utilisateurs.
terdon