Tar conserve-t-il les autorisations si les ID utilisateur changent?

20

J'ai besoin de sauvegarder certaines données avec l'option "p" sur la commande tar. Le problème est que l'endroit où je vais restaurer ces données aura tous les mêmes utilisateurs, mais ces utilisateurs peuvent avoir des ID différents. Est-ce que cela fait une différence pour tar ou restaurera-t-il correctement les autorisations par nom d'utilisateur?

Marius
la source

Réponses:

9

tarenregistre les autorisations basées sur l'UID et le GID, et non sur la chaîne qui leur est associée. Donc, si l'UID sur un serveur était 3300 et qui était lié à «bob», sur le nouveau serveur, le fichier appartiendra à l'utilisateur qui possède l'UID 3300.

Tout virtuel (je veux tout dire, mais vous ne pouvez jamais être sûr à 100%) sous UNIX utilise les valeurs UID: GID, car c'est ce qui est réellement stocké au niveau du système de fichiers. Le nom n'est qu'une simple recherche dans le fichier passwd, les vérifications sous-jacentes sont effectuées à l'aide des valeurs numériques.

EightBitTony
la source
Ah, ce n'est pas bon ... Je suppose que dans la plupart des situations, cela convient. Malheureusement, pas pour moi ... Merci, EightBitTony.
Marius
3
Vous voulez probablement dire GID (identifiant de groupe), pas GUID (identifiant globalement unique).
un CVn
6
GNU tar enregistre également les données de nom d'utilisateur / groupe, car je peux le voir si je liste une archive sur une machine qui n'a pas ces utilisateurs. Il doit y avoir un moyen de le faire utiliser pendant l'extraction.
Rob H
3
Cette réponse est tout simplement incorrecte. tar ne noms record du propriétaire.
Steffen Heil
55

Résumant les réponses précédentes et ajoutant quelques informations importantes:

  • Lors de la création d' archives, tartoujours préserver l' utilisateur et l'ID groupe de fichiers, à moins d'avis contraire avec --owner=NAME, --group=NAME. Mais il y aura toujours un utilisateur et un groupe associés à chaque fichier.

  • Le tar GNU, et peut-être d'autres versions de tar, stockent également les noms d' utilisateur et de groupe , sauf s'il --numeric-ownerest utilisé. bsdtar stocke également les noms d'utilisateurs et de groupes par défaut, mais la prise en charge de l' --numeric-owneroption lors de la création n'apparaissait pas avant bsdtar 3.0 (notez que bsdtar a pris en charge l'option lors de l' extraction pendant beaucoup plus longtemps).

  • Lors de l'extraction en tant qu'utilisateur normal , tous les fichiers appartiendront toujours à l'utilisateur. Et cela ne peut pas être différent, car l'extraction d'un fichier crée un nouveau fichier sur le système de fichiers, et un utilisateur ordinaire ne peut pas créer un fichier et donner la propriété à quelqu'un d'autre.

  • Lors de l'extraction en tant que root , tarrestaurera par défaut la propriété des fichiers extraits, sauf si elle --no-same-owner est utilisée, ce qui donnera la propriété de se rooter.

  • Dans GNU tar, bsdtar, et peut - être d' autres versions de tar, propriété restaurée se fait par l' utilisateur (et groupe) nom , si cette information est dans l'archive et il y a un utilisateur correspondant dans le système de destination. Sinon, il restaure par ID. Si l' --numeric-owneroption est fournie, les noms d'utilisateur et de groupe sont ignorés.

  • Les autorisations et les horodatages sont également enregistrés dans l'archive et restaurés par défaut, sauf si des options --no-same-permissionset / ou --touchsont utilisées. Lorsqu'il est extrait par l'utilisateur, l'utilisateur umaskest soustrait des autorisations, sauf s'il --same-permissionsest utilisé.

  • --preserve-permissionset --same-permissionssont des alias, et ont les mêmes fonctionnalités que-p

J'espère que cela aide à clarifier le problème! :)

MestreLion
la source
3
Excellente réponse; Répond à cette question ainsi qu'à toute autre question pouvant se poser sur le sujet.
user1107893
Il convient de noter que seules les versions récentes de GNU tarpermettent de spécifier des noms arbitraires dans --ownerou --group, dans le passé, tarfaisaient une recherche gratuite dans la machine actuelle /etc/passwdet refusaient de s'exécuter s'il n'y avait pas de correspondance.
Matteo Italia
Que se passe-t-il si vous créez une archive avec un nom spécifié avec --ownermais également ajouté dans l' --numeric-ownerindicateur? Comment tar gère-t-il ces exigences concurrentes?
CMCDragonkai
@CMCDragonkai: --owneret --numeric-ownerne s'excluent pas mutuellement, et servent à des fins très distinctes: --owner=USERNAMEremplaceront le ou les propriétaires des fichiers et des répertoires lors de l'archivage des fichiers, tout --numeric-owneren ne stockant tout simplement pas le nom d'utilisateur, juste son ID numérique.
MestreLion
4

Utilisez l'option --same-owner sur GNU tar. Voir http://www.gnu.org/software/tar/manual/html_section/Attributes.html

Colin 't Hart
la source
Ceci est documenté comme la valeur par défaut pour les superutilisateurs et semble répondre à la question de l'OP différemment de la réponse acceptée. (Le lien indique que lorsque GNU tar restaure en utilisant --same-owner, il recherche d'abord les noms dans / etc / passwd.) Le seul problème en suspens est de savoir si la version OP de tar implémente --same-owner.
Mike Sherrill 'Cat Recall'
L'OP utilise une distribution Linux tellement meilleure que la chance d'utiliser GNU tar, methinks. Et en passant par la documentation , il est possible alors que la réponse acceptée indique ce n'est pas ...
Colin « t Hart
@Catcall - désolé, j'ai accepté la réponse sans même avoir eu la chance de la tester. Parfois, je fais juste aveuglément confiance aux gens. Pourtant, la personne qui a répondu avait plutôt raison, puisque je ne restaurais pas avec "--same-owner" et que vous avez ajouté à la réponse. Dommage que je ne puisse pas accepter les deux. J'utilise debian squeeze qui prend en charge "--same-owner". Merci pour le conseil.
Marius
@Marius: Je suis presque sûr que vous pouvez changer la réponse acceptée quand vous le souhaitez. (Je ferai simplement remarquer que je n'ai pas répondu à cette question, seulement des commentaires. Je n'ai aucun représentant en jeu.)
Mike Sherrill 'Cat Recall'
4

Si vous essayez de transférer des fichiers entre deux systèmes, rsync définira par défaut les autorisations par nom d'utilisateur au lieu de uid, en regardant les noms d'utilisateur aux deux extrémités. Ce n'est que si l'utilisateur n'existe pas sur l'un des systèmes qu'il le copiera avec l'uid, sauf indication contraire.

Subvention
la source
Cela ne répond pas directement à la question du PO, mais quiconque pose la question du PO devrait également l'apprendre.
Mike Sherrill 'Cat Recall'