web-dev-qa-db-fra.com

Que conserve réellement l'indicateur -p (préserver les autorisations) de tar?

Que conserve réellement l'indicateur -p lors de la création et de l'extraction d'une archive? S'agit-il des autorisations rwx qu'il préserve?

Lorsque j'ai créé une archive htdocs/ appartenant à la racine, son extraction sur ma machine locale a modifié le droit de propriété de la racine sur mon utilisateur.

22
nicoX

La propriété et les autorisations sont deux choses différentes. L'indicateur -p conserve les autorisations . Sur les systèmes * nix, les utilisateurs normaux ne peuvent pas changer la propriété d'un fichier à 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 modifier 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 dotés 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 propriétaire est égal à l'ID utilisateur du fichier ou (uid_t) -1 et si le groupe est égal. soit à l'identifiant de groupe effectif du processus appelant, soit à l'un de ses identifiants de groupe supplémentaires.

La raison derrière ceci a été bien expliquée par @Gilles dans la réponse this Unix & Linux:

La raison de cette restriction est que donner un fichier à un autre utilisateur peut permettre à de mauvaises choses de se produire dans des situations peu communes, mais néanmoins importantes. Par exemple:

  • Si des quotas de disque sont activés sur un système, Alice peut créer un fichier accessible en écriture universelle dans un répertoire accessible uniquement par elle (personne d'autre ne peut accéder à ce répertoire accessible en écriture), puis exécuter chown pour que ce fichier appartienne à un autre utilisateur, Bill. . Le fichier serait alors comptabilisé dans le quota de disque de Bill même si seule Alice pouvait utiliser le fichier.
  • Si Alice cède un fichier à Bill, il n'y a aucune trace que Bill n'ait pas créé ce fichier. Cela peut poser problème si le fichier contient des données illégales ou compromettantes.
  • Certains programmes requièrent que leur fichier d'entrée appartienne à un utilisateur particulier pour authentifier une demande (par exemple, le fichier contient certaines instructions que le programme exécutera pour le compte de cet utilisateur). Ce n'est généralement pas une conception sécurisée, car même si Bill créait un fichier contenant des instructions syntaxiquement correctes, il n'aurait peut-être pas eu l'intention de les exécuter à ce moment précis. 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'aggraver les choses.

Ainsi, même si vous utilisez l'indicateur --same-owner de tar, vous devrez toujours extraire les fichiers sous le nom root pour conserver la propriété. Cet indicateur est activé par défaut pour root. Vous voulez donc:

Sudo tar xpf foo.tgz
19
terdon

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

--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 second est la valeur par défaut, vous pouvez donc ajouter --same-owner pour enregistrer votre utilisateur. Vous devrez probablement le faire avec Sudo.

En outre, cela ne fonctionnera que sur les systèmes prenant en charge POSIX. Et les systèmes d'exploitation autres que Ubuntu pourraient ne pas avoir ces 2 options (elles ne sont pas standard).

8
Rinzwind

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

4
NGRhodes