Comment puis-je configurer les autorisations sous Linux afin que deux utilisateurs puissent mettre à jour la même copie de travail SVN sur le serveur?

StackOverflow https://stackoverflow.com/questions/164597

  •  03-07-2019
  •  | 
  •  

Question

Subversion et Apache sont installés sur mon serveur et le répertoire Web Apache est également une copie de travail Subversion. La raison en est que la commande simple svn update / server / staging déploiera la dernière source sur le serveur de transfert.

Répertoire Web public Apache: / server / staging - & nbsp; (Ceci est une copie de travail SVN.)

J'ai deux utilisateurs sur mon serveur, "richard" et "austin". Ils sont tous deux membres du groupe des "développeurs". J'ai récursivement défini les autorisations sur le répertoire / server sur richard: développeurs, à l'aide de "sudo chown -R richard: développeurs / serveur".

J'ai ensuite défini les autorisations de lecture, d'écriture et d'exécution pour les groupes "richard" et "développeurs".

Alors sûrement, "austin" devrait maintenant pouvoir utiliser la commande svn update / server / staging ? Cependant, quand il essaie, il obtient l'erreur:

svn: Can't open file '/server/staging/.svn/lock': Permission denied

Si je change de manière récursive le propriétaire de / server en austin: développeurs, il peut exécuter la commande sans problème, mais "richard" ne le peut pas.

Comment résoudre le problème? Je souhaite créer un point d'ancrage post-validation pour déployer automatiquement le site intermédiaire lorsque les fichiers sont validés, mais je ne vois pas comment cela fonctionnerait pour les deux utilisateurs. Le crochet serait:

/usr/bin/svn update /server/staging

Utiliser le même compte d'utilisateur pour les deux ne serait pas vraiment une solution acceptable, et je ne connais aucun moyen d'exécuter la commande dans le crochet en tant que 'root'.

Toute aide est appréciée!

Était-ce utile?

La solution

ID du groupe de répertoires

Si le bit setgid sur une entrée de répertoire est défini, les fichiers de ce répertoire auront la propriété du groupe comme répertoire plutôt que le groupe de l'utilisateur qui a créé le fichier.

Cet attribut est utile lorsque plusieurs utilisateurs ont besoin d'accéder à certains fichiers. Si les utilisateurs travaillent dans un répertoire avec l'attribut setgid, tous les fichiers créés dans ce répertoire par l'un des utilisateurs auront l'autorisation du groupe. Par exemple, l'administrateur peut créer un groupe appelé spcprj et ajouter les utilisateurs Kathy et Mark au groupe spcprj. Le répertoire spcprjdir peut être créé avec les bits GID définis et Kathy et Mark bien que dans différents groupes principaux puissent travailler dans le répertoire et avoir un accès complet à tous les fichiers de ce répertoire, mais ne puissent toujours pas accéder aux fichiers du groupe principal de l'autre. .

La commande suivante va définir le bit GID sur un répertoire:

chmod g+s spcprjdir

Liste du répertoire "spcprjdir":

drwxrwsr-x 2 kathy spcprj 1674 Sep 17 1999 spcprjdir

Le "s" à la place du bit d’exécution dans les autorisations de groupe entraîne l’écriture de tous les fichiers dans le répertoire " spcprjdir " appartenir au groupe " spcprj " .

modifier: source = Autorisations sur les fichiers et les fichiers Linux

Autres conseils

Je configurerais svnserve , qui est un simple serveur Subversion utilisant le protocole svn: // . Vous pouvez configurer cela pour qu'il s'exécute sous son propre compte utilisateur. Le référentiel ne serait alors accessible que par cet utilisateur. Cet utilisateur pourrait alors disposer des privilèges appropriés pour exécuter svn update / server / staging sur un hook post-commit.

dans votre svn repo, vous pouvez trouver un répertoire 'conf' où vous définissez les autorisations. vous avez 3 fichiers ici:

  • authz
  • passwd
  • svnserve.conf

vous définissez dans le fichier authz quels utilisateurs ont quel type d'accès, par utilisateur ou par groupe. vous y définissez des groupes, les groupes SVN et non les groupes d’utilisateurs sous Linux (les lignes hachées sont des commentaires):

[groups]
# harry_and_sally = harry,sally
projectgroup = richard,austin

# [/foo/bar]
# harry = rw  -- user harry has read/write access
# * =  -- everybody have no access

# [repository:/baz/fuz]
# @harry_and_sally = rw  -- harry_and_sally group members have read/write access
# * = r  -- everyone has read access

[/server/staging]
@projectgroup = rw
* = r

contourner cet exemple et définir votre configuration. dans le fichier 'passwd', vous définissez les mots de passe des utilisateurs. exécuter

cat passwd

vous obtiendrez un fichier commenté expliquant comment le configurer.

J'utilise WebDAV - toutes les mises à jour et les commits SVN sont gérés via apache et je n'ai jamais de tels problèmes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top