Il est en fait assez simple d'obtenir exactement ce que vous décrivez ; la clé est l'option "commande forcée" de ssh. En fait, vous dites à ssh que, quelle que soit la commande que le client essaie d'exécuter, il exécute toujours la commande forcée. Vous définissez la commande forcée pour pointer vers un simple wrapper script qui vérifie que la commande est svnserve -t
. Si c'est le cas, il s'exécute comme demandé. Sinon, il se termine. C'est le script que j'utilise :
#!/bin/bash
#
# Verify that the requested command is an svnserve call.
#
# Note that sshd stores the command requested by the client in
# the variable "SSH\_ORIGINAL\_COMMAND".
if \[\[ $SSH\_ORIGINAL\_COMMAND = "svnserve -t" \]\]
then
exec $SSH\_ORIGINAL\_COMMAND
else
echo "You are only allowed svn access to this server."
fi
Il y a deux façons de régler cette commande forcée :
- Si vos utilisateurs se connectent en utilisant l'authentification par clé (et ils devraient le faire), vous pouvez ajouter ``command="/usr/local/sbin/validate_svn'' comme premier champ de leur clé publique dans le fichier
~/.ssh/authorized_keys
. Pour que cela soit sûr, vous devez cependant désactiver l'authentification par mot de passe. Sinon, ils peuvent se connecter avec un mot de passe (en contournant la commande forcée) et éditer ~/.ssh/authorized_keys
pour supprimer la restriction.
-
Ajouter une strophe "Match" à la fin de /etc/ssh/sshd_config
pour le ou les utilisateurs qui ne devraient pouvoir utiliser que svn. Cela devrait ressembler à quelque chose comme ceci :
Match user svn
ForceCommand /usr/local/bin/validate_svn