J'héberge mon propre référentiel git sur un VPS. Disons que mon utilisateur est John.
J'utilise le protocole ssh pour accéder à mon référentiel git, donc mon URL ressemble à quelque chose ssh://[email protected]/path/to/git/myrepo/
.
Root est le propriétaire de tout ce qui est sous /path/to/git
J'essaie de donner un accès en lecture / écriture à John à tout ce qui est sous /path/to/git/myrepo
J'ai essayé les deux chmod
et setfacl
contrôler l'accès, mais les deux échouent de la même manière: ils appliquent les droits de manière récursive (avec les bonnes options) à tous les sous - répertoires existants actuels/path/to/git/myrepo
, mais dès qu'un nouveau répertoire est créé, mon utilisateur ne peut pas écrire dans le nouveau répertoire.
Je sais qu'il y a des hooks dans git qui me permettraient de réappliquer les droits après chaque commit, mais je commence à penser que je vais dans le mauvais sens car cela semble trop compliqué pour un objectif très basique.
Q : Comment dois-je configurer mon droit d'accorder l'accès rw à john à tout ce qui se trouve en dessous /path/to/git/myrepo
et le rendre résistant aux changements de structure d'arbre?
Q2 : Si je devais prendre du recul pour changer l'approche générale, dites-le moi.
Edit : La question a été répondue telle quelle, mais ce n'était pas la bonne question. La bonne question aurait été "Comment configurer un dépôt bare git sur le serveur pour l'utiliser avec un accès ssh?". Voir ma propre réponse.
la source
g+s
. Bien sûr, vous devrez d'abord comprendre les bases dechmod
trop.{}
- est un espace réservé pour la substitution de nom de fichier.;
est le terminateur de la commande exécutée par-exec
. Comme cela;
a une signification particulière,bash
il doit être échappé avec \. voirman find
pour plus de détailsEn fait, ce n'était pas la bonne approche. Après des recherches supplémentaires, j'ai découvert que dans mon cas, je dois utiliser les fonctionnalités de build de git pour gérer le droit du système de fichiers dans le référentiel.
Cela se fait essentiellement avec l'
shared
option degit init
, qui peut avoir (entre autres) les valeurs suivantes:group
: initialise le référentiel pour que les fichiers et les répertoires aient un accès en écriture aux utilisateurs et aux groupes, et que tout le monde ait un accès en lecture0660
: même mais sans accès en lecture pour les autres.Les répertoires et fichiers nouvellement créés disposent automatiquement des autorisations appropriées. Vous pouvez également utiliser
git init
sur un référentiel existant pour le reconfigurer sans perdre son contenu.Donc à la fin ce que je devais faire:
mygitrepo
root:mygitrepo
Et maintenant, tous les utilisateurs du groupe peuvent tirer / pousser, et personne d'autre ne le peut, et cela sans se soucier des droits du système de fichiers.
http://www.kernel.org/pub/software/scm/git/docs/git-init.html pour plus d'informations.
la source
Si les ACL sont prises en charge, vous pouvez le faire avec les ACL par défaut. Attention, il est facile de les oublier car ils n'apparaissent pas lorsque vous faites un
ls -l
.Mais je suppose que vous voudrez peut-être faire quelque chose d'un peu plus organisé. Le déploiement de gitolite peut fournir une meilleure solution.
la source
ls
(et je pense que Squeeze aussi), vous obtenez+
à la fin des autorisations de dire qu'il y a une ACL:drwxr-xr-x+ 2 anthony anthony 4096 Sep 28 11:16 i-have-an-acl
find ... -exec cmd {} +
syntaxe, où{}
est remplacé par autant de noms de fichiers trouvés que possible (comme oppsed à{} \;
où{}
n'est remplacé que par un fichier trouvé à la fois)