Pour limiter l’accès sécurisé d’un utilisateur au mode SFTP uniquement, le plus simple est d’utiliser un shell prévu à cet effet. C’est le cas de rssh (Restricted Secure Shell) qui autorise l’accès unique, et au choix, aux commandes suivantes : scp, sftp, rsync et cvs. L’environnement peut être également chrooté (pour éviter le parcours de l’arborescence) mais cela implique une cohérence dans les accès au répertoire de base du chroot (par exemple /home), auquel sera ajouté automatiquement le login de l’utilisateur (/home/user).

Voici un exemple de fichier de configuration /etc/rssh.conf où seul l’accès SFTP est autorisé par défaut :

logfacility = LOG_USER
# Leave these all commented out to make the default action for rssh to lock
# users out completely...
#allowscp
allowsftp
#allowcvs
#allowrdist
#allowrsync
# set the default umask
umask = 022
# If you want to chroot users, use this to set the directory where the root of
# the chroot jail will be located
chrootpath = /home

La configuration étant faite, les comptes utilisateurs sont à modifier avec le changement du shell et également du groupe primaire, afin de gérer au mieux les permissions d’accès aux fichiers :

# usermod -s /usr/bin/rssh bhuisgen
# usermod -g clients bhuisgen

Enfin, un petit test de connexion :

$ ssh bhuisgen@127.0.0.1
Password:
Last login: Fri Mar 26 11:46:29 CET 2010 from bart.interact.lu on pts/3

This account is restricted by rssh.
Allowed commands: sftp

If you believe this is in error, please contact your system administrator.

Connection to 127.0.0.1 closed.

C’est bon, l’utilisateur n’a donc plus d’accès shell et il doit utiliser obligatoirement un client SFTP.