Autorisations du répertoire utilisateur sur le serveur SSH

J'ai un serveur SSH fonctionnant principalement pour moi-même, mais j'ai maintenant un code que j'aimerais partager avec mes collègues via SVN.

Je peux le partager avec svn + ssh en créant un compte séparé appelé 'svn', mais 'svn' peut également être utilisé pour se connecter et afficher mes fichiers (dans / home / mine / Documents / etc.). J'ai essayé de définir le shell de bin / sh à bin / false dans / etc / passwd, mais cela empêchera également les utilisateurs d'obtenir mes programmes via svn + ssh.

Avez-vous des suggestions?

Merci beaucoup! -Stephen

Il est en effet assez simple d'obtenir exactement ce que vous décrivez; La clé est l'option "commande forcée" de ssh. Essentiellement, vous dites à ssh que, quelle que soit la commande que le client tente d'exécuter, exécute toujours la commande forcée. Vous définissez la commande forcée pour pointer vers un script wrapper simple qui vérifie que la commande est svnserve -t . Si c'est le cas, il s'exécute comme demandé. Sinon, il sort. C'est le script que j'utilise:

 #! / Bin / bash
 # 
 # Vérifiez que la commande demandée est un appel svnserve.
 #
 # Notez que sshd stocke la commande demandée par le client dans 
 # La variable "SSH_ORIGINAL_COMMAND".


 Si [[$ SSH_ORIGINAL_COMMAND = "svnserve -t"]]
 puis
         Exec $ SSH_ORIGINAL_COMMAND
 autre
         Echo "Vous ne pouvez autoriser l'accès svn qu'à ce serveur".
 Fi

Il existe deux façons de définir cette commande forcée:

  1. Si vos utilisateurs se connectent en utilisant l'authentification par clé (et ils devraient), vous pouvez ajouter “ command = "/ usr / local / sbin / validate_svn '' comme premier champ de leur clé publique dans ~/.ssh/authorized_keys . Pour que cela soit sécurisé, vous devrez désactiver l'authentification par mot de passe. Sinon, ils peuvent se connecter avec un mot de passe (contournement de la commande forcée) et éditer ~/.ssh/authorized_keys pour supprimer la restriction.
  2. Ajoutez une strophe "Match" à la fin de /etc/ssh/sshd_config pour les utilisateurs qui ne devraient pouvoir utiliser que svn. Ça devrait ressembler a quelque chose comme ca:
 Match svn utilisateur
     ForceCommand / usr / local / bin / validate_svn

Vous devez modifier les autorisations sur votre répertoire personnel.

 $ chmod 750 /home/mine 

Ne pouvez-vous pas utiliser http / https? Vous pouvez simplement utiliser un mécanisme d'authentification par type .htaccess / htpasswd plutôt que créer des comptes shell appropriés.

Vous pourriez peut-être spécifier une authentification alternative (à l'aide d'un fichier de mot de passe séparé) pour svn + ssh aussi, mais je ne l'ai jamais fait.

Si vous ne souhaitez pas que l'utilisateur nommé "svn" puisse afficher vos fichiers – c'est-à-dire que vous souhaitez que cet utilisateur ait accès à tout autre élément que le référentiel SVN, il vous suffit de modifier un peu les autorisations. Savez-vous comment utiliser chmod?

Merci à tous pour votre aide!! Je ne me suis pas rendu compte que je n'avais qu'à chmod le répertoire de niveau supérieur. J'écris beaucoup de programmes de recherche de numérisation pour la recherche scientifique, mais je viens de commencer le contrôle de la révision et la distribution du code (si j'avais des points de «réputation», je vous tiendrais compte "). Insyte: Je suis incroyablement ravi de vos instructions pour utiliser ForceCommand. J'ai une autre tâche de partage (données archivées pour lesquelles je n'utilise pas SVN, alors je vais essayer de comprendre comment utiliser pour scp) pour lequel ce sera une solution très élégante ! -Stephen

A pensé à chroot le serveur SSH et à démarrer le serveur de subversion dans cet environnement chrooté?

Il peut être un peu difficile à configurer, mais devrait être plus sécurisé, car personne ne devrait pouvoir faire quelque chose en dehors de cette « prison » (cela empêche également l'escalade des privilèges).