Mettre en place un environnement sftp chrooté (2)

Il y a quelque temps, j’avais publié un billet indiquant comment mettre en place un environnement sftp chrooté, dans lequel l’utilisateur ne peut pas sortir du répertoire qui lui est assigné.

La solution que j’avais proposée (modifier la configuration de sshd) était compliquée et lourde à mettre en place. Parmi les commentaires, le logiciel mysecureshell avait été évoqué.

Présentation

Mysecureshell est une commande qui se lance au login de l’utilisateur sur la machine. Il dispose de nombreuses possibilité de paramétrage (débit, droits), tout en restant très simple à administrer. De plus, il empêche l’utilisateur d’ouvrir une connexion sur la machine, il ne peut que se connecter en sftp.

Nous allons voir ici comment le mettre en place sur une machine Debian destinée à accueillir des connexions sftp.

La documentation en ligne est complète et accessible voici néanmoins une description qui reprend les principes de l’installation.

Installation

Mysecureshell n’est malheureusement pas disponible dans les dépôts debian. Il est donc nécessaire d’ajouter un dépôt externe pour l’installer. Le site web fournit des paquets d’installation pour la plupart des distributions (debian, fedora…)

Une fois que le dépôt est ajouté, il suffit de l’installer en lançant la commande suivante (toujours sous debian) :

# aptitude install mysecureshell

Configuration

Configuration de mysecureshell

La configuration se fait dans le fichier /etc/ssh/sftp-config

Voici les champs importants à noter:

Champs Signification
GlobalDownload Il s’agit du débit maximal qui sera utilisé quand le serveur uploadera des fichiers vers les clients
GlobalUpload La même chose pour l’upload
StayAtHome Empêcher l’utilisateur de naviguer hors de son répertoire personnel
VirtualChroot Met en place un faux home pour l’utilisateur
Home Défini le home que verra l’utilisateur lorsqu’il se connectera

Je conseille de séparer le home «unix» de l’utilisateur de son home «chrooté». Cela permet de mettre en place des fichiers dans le fichier home de l’utilisateur, sans que celui-ci ne puisse les consulter:

Cela se fait tout simplement en mettant l’option VirtualChroot à True, et en définissant le Home mysecureshell vers un sous-répertoire du home unix :

StayAtHome              true
VirtualChroot           true
Home                    /home/$USER/sftp

Cela oblige à créer pour chaque utilisateur un répertoire sftp dans son home. Lorsque l’utilisateur se connectera, il accedera uniquement à répertoire sftp, mais ne pourra pas naviguer plus haut, ni consulter les autres répertoires des autres utilisateurs.

Gestion des comptes

La configuration est assez simple: pour chaque utilisateur nous allons indiquer que mysecureshell est la commande à exécuter lors du login de l’utilisateur. Cela se fait en modifiant le fichier /etc/passwd.

invite:x:1002:1002:,,,:/home/invite:/bin/bash

et le remplacer le dernier champs ainsi:

invite:x:1002:1002:,,,:/home/invite:/bin/Mysecureshell

Sauvegarder, et voilà, la configuration va s’appliquer lors de la prochaine connexion de l’utilisateur.

Mise à jour de la configuration

Lorsque les fichiers de configuration sont mis à jour, les connexions existantes ne sont affectées. Elles ne le deviennent qu’à partir de la prochaine reconnexion de l’utilisateur.

Il est tout à fait possibile de forcer mysecureshell à appliquer les modifications, mais cela oblige à reconnecter les utilisateurs

Au final

Il n’y a pas grand chose à faire finalement, et c’est agréable de voir la configuration se faire aussi rapidement! Il est vrai que le site web de l’application peut sembler amateur, mais cela ne reflète en rien la qualité de l’application.

J’abandonne donc avec plaisir la méthode que j’avais mis en place dans mon précédent billet pour passer sur mysecureshell!