SFTP: Vérouiller un utilisateur dans un répertoire

Lorsque vous créez un serveur qui sera utilisé par plusieurs personnes il peut être intéressant de leur donner un accès à un répertoire mais par mesure de sécurité pas à toute l’arborescence. De plus si l’on utilise SFTP afin d’éviter de multiplier les ports à ouvrir ou de renforcer la sécurité on ne veut pas non plus que ces utilisateurs puissent ouvrir une ligne de commande sur le serveur. Voyons voir comment l’on peut faire dans la suite.

Je vais tout expliquer ici car j’ai moi même pas mal galéré à trouver la bonne combinaison de paramètres. Heureusement Google et les sympathiques utilisateurs du forum Ubuntu-fr m’ont aidé et, ensemble, on a pu avancer.

Création des utilisateurs et du groupe

La première chose à faire et de créer les utilisateurs dont on a besoin bien sur mais aussi le groupe qui va nous permettre de gérer nos accès. Pour la suite de cet article on va prendre l’utilisateur Bob et le groupe utilisateurs_sftp. C’est donc ce groupe qui va permettre de décider si tel ou tel utilisateur a accès a sftp.

adduser bob

addgroup utilisateurs_sftp

adduser bob utilisateurs_sftp

Dans le fichier /etc/passwd on va définir le répertoire racine et le shell de l’utilisateur bob par /home/bob, il sera créé à l’étape suivante:

bob:x:1000:1000::/home/bob:/bin/false

Création du répertoire:

On va créer un répertoire bob dans /home dans lequel se trouvera notre répertoire final

mkdir /home/bob

mkdir /home/bob/stockage

Le premier doit appartenir à root et seul root peut y écrire

chown root:root /home/bob

chmod go-w /home/bob

et le deuxième appartient a bob et seul bob et les membres de son groupe peuvent y écrire:

chown -R bob:utilisateurs_sftp /home/bob/stockage

chmod ug+rwX /home/bob/stockage

Paramétrage de SSH/SFTP

SFTP fonctionne via SSH et se paramètre donc dans /etc/ssh/sshd_config.

On ne veut pas que l’utilisateur utilise SSH et puisse ouvrir un shell sur la machine c’est pour cela que lors de sa création on lui a définit le shell /bin/false mais cela ne suffit pas. On va utiliser une directive dans Match qui va nous permettre de lui dire d’utiliser que SFTP:

Match group utilisateurs_sftp
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Cette directive va faire en sorte que tous les utilisateurs de utilisateurs_sftp démarrent directement dans leur racine et qu’ils utilisent uniquement la fonction sftp. Attention à bien placer cette directive en toute fin de fichier et d’ajouter les utilisateurs autorisés à la directive Allowusers.

Si vous avez suivi toutes ces étapes normalement vous devriez avoir une utilisateur avec son propre répertoire duquel il ne peut pas sortir.