Prise de la commande git push respect des autorisations?
Nous utilisons un repo git hébergé à un emplacement distant, et qui est partagé. Nous voulons que les pensions de titres à l'utilisateur & groupe lisible & accessible en écriture, mais ne pas avoir toutes les autorisations pour les autres. La distance pension de titres est détenue par un autre utilisateur (disons rUser). J'ai mis core.sharedRepository
à 0660
dans mon local de pensions, ainsi que la distance des pensions. Aussi, mon umask est 0027
. Donc, chaque fois que je créer un nouveau fichier, il n'a pas les autorisations pour d'autres.
En dépit de tout cela, pour une raison que chaque fois que je pousse un changement de la distance repo, il en crée de nouveaux objets dans la repo.git/objects/
répertoire avec des autorisations -r--r--r--
. Ce qui est encore plus étrange, c'est qu'il me fait (à la place de l'utilisateur à distance), le propriétaire des répertoires/fichiers. Une idée de ce qui se passe?
J'ai essayé de trouver la réponse en allant sur plusieurs apparemment liés à des questions sur stackoverflow, mais ne pouvait pas trouver quoi que ce soit.
host:path
ou ssh://host/path
référentiel d'Url). Si vous utilisez un système de fichier réseau au lieu de cela, il pourrait être de compliquer les choses.Je suis d'accéder à l'aide de ssh, et le système de fichiers distant est en fait un système de fichiers NFS (je ne suis pas sûr pourquoi le système de fichiers affecte en rien ici).
OriginalL'auteur user10 | 2011-03-10
Vous devez vous connecter pour publier un commentaire.
Note: je suis en supposant que vous utilisez SSH à base de mécanisme d'accès à chaque connexion de l'utilisateur au serveur en tant qu'utilisateur propre (c'est à dire que vous n'avez pas plusieurs utilisateurs de se connecter à un compte unique pour accéder au référentiel). Si cette hypothèse n'est pas vrai, alors la réponse suivante peut ne pas être entièrement utile.
La
core.sharedrepository
configuration de votre espace de stockage et le umask vous utilisez pour y accéder ne sont pas pertinents à la propriété et les autorisations utilisées sur un dépôt distant.Réglage
core.sharedrepository
à0660
dans le dépôt distant est la bonne façon d'obtenir ce que vous dites que vous voulez. Le umask de l'accès de l'utilisateur sur l'ordinateur distant est également hors de propos parce que Git va remplacer le masque quand il voit un0xxx
valeur pourcore.sharedrepository
. Vous devez assurez-vous que tous les fichiers et répertoires du groupe sont détenues par le votre commune au sein du groupe et que les autorisations sont correctes (2770
pour tous les répertoires (ou juste770
pour BSD-ish systèmes);440
pour les fichiers de moins deobjects/??
et/objects/pack/
;660
pour les autres fichiers).Il est normal qu'un nouveau fichier est l'utilisateur appartient à l'utilisateur qui l'a créé. Sur la non-systèmes BSD vous avez besoin le bit setgid (le
2000
bits) sur les répertoires de faire de nouvelles entrées hériter le groupe propriétaire de son répertoire parent. L'utilisateur propriétaire est rarement héréditaire (FreeBSD peut être configuré pour le faire avec le bit setuid, mais ce n'est pas dans les configurations). Ainsi, tous les fichiers et répertoires doivent avoir la même commune, le groupe propriétaire, mais chaque écriture dans le référentiel (par exemple, pousser) va laisser des fichiers et/ou répertoires qui sont détenues par l'écriture de l'utilisateur1 (c'est à dire qu'il n'est pas nécessaire qu'un utilisateur (votrerUser
?) l'utilisateur propriétaire de tous les fichiers et répertoires; tout utilisateur qui a besoin d'accéder à l'espace de stockage doit être un membre du même groupe).1
Chaque utilisateur sera bien évidemment de l'utilisateur-propre de tous les fichiers/répertoires qu'ils créent, mais ils seront également à l'utilisateur propriétaire de la plupart des fichiers qu'ils modifient parce que Git utilise “atomique réécrit” (il écrit le nouveau contenu à une nouvelle, distincte de fichier dans le même répertoire, puis renomme le sommet le fichier d'origine).
Peut-être il y a un bug dans la façon de Git est remplacer le umask pour les nouveaux fichiers. Exactement quels sont les fichiers les autorisations qui sont trop larges? Quelle est la version de Git que vous êtes sur l'extrémité à distance pour l'accès sur l'espace de stockage? Quel système d'exploitation êtes-vous en cours d'exécution sur l'extrémité distante?
Je n'ai pas pu reproduire ce problème avec Git 1.7.4.1 avec deux utilisateurs et un groupe commun sur mon Unixy machine.
Vous pouvez essayer de simplifier le scénario un peu. Essayer de pousser vers le dépôt distant directement à partir du serveur lui-même (c'est à dire faire un clone local et pousser à un jeter de la branche). De faire des accès seulement la rend plus facile à vérifier vos hypothèses (umask; uid; gid; l'utilisateur, de groupe et de la propriété, et les autorisations de fichiers et de répertoires avant et après la pousser) que lorsque vous avez un transport de quelque sorte dans le milieu (Git propre SSH-les transports, ou d'un réseau de système de fichiers qui pourraient ne pas les id de mappage et des autorisations avec une pleine fidélité).
Une remarque concernant les --partagé: Il ne fonctionne PAS comme umask ne, où vous êtes en soustrayant les autorisations, au contraire, vous indiquant les autorisations qu'il fixera. --shared=0077 signifie donc que le propriétaire ne peut pas y accéder, mais le groupe et le monde peut. (Il va rejeter cette option) tandis que --shared=0700 signifie que seul le propriétaire peut accéder.
OriginalL'auteur Chris Johnsen
Je vous encourage fortement à utiliser Gitolite qui est vraiment un outil efficace pour gérer le contrôle d'accès sur les dépôts git.
OriginalL'auteur Artusamak