Outils pour utilisateurs

Outils du site


telnew_sftp

Serveur SFTP et isolation d'environnements (chroot)

Par mesure de sécurité et parce que les clubs de l'école ne tienne pas toujours leur site à jour, chaque site web est isolé dans son répertoire.

La procédure de création du serveur SFTP et de l'isolation de l'environnement se font dans cette même procédure.

La procédure a été rédigée à partir du tuto de Linux Pratique. Sur Telnew, nous utilisons le chroot pré-intégré à OpenSSH.

Étape 1 : Préparation de l'environnement

Installation d'OpenSSH

Commençons par installer OpenSSH (si ce n'est déjà fait).

sudo apt-get update && sudo apt-get install openssh

Choix et préparation de l'environnement utilisateur

Nous choisissons d'isoler les environnements web. Donc tout les dossiers des sites/applications web se situent dans /home/apps/.

De plus, nous créons un groupe spécifique pour les utilisateurs avec un compte SFTP.

sudo groupadd sftpusers

Étape 2 : Configuration

Configuration d'OpenSSH

La configuration du serveur OpenSSH se fait par le biais du fichier de configuration /etc/ssh/sshd_config. Nous allons commencer par remplacer le mode de gestion SFTP par défaut par le mode interne à SSH :

# Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem       sftp    internal-sftp

Juste après cette section, nous allons définir les utilisateurs pour lesquels va s'appliquer ce mode de gestion :

Match Group sftpusers
      ChrootDirectory /home/apps/%u
      ForceCommand  internal-sftp
      AllowTCPForwarding no
      X11Forwarding no

Vous pourriez de la même façon définir un pattern par utilisateur plutôt que par groupe, avec la syntaxe Match User NOM_DU_USER. Bien entendu, il faudra remplacer /home par tout autre dossier de base que vous auriez choisi au point précédent.

Création de compte utilisateur

Il ne reste plus qu'à créer des utilisateurs :

sudo useradd -m -g sftpusers NOM_UTILISATEUR
sudo passwd NOM_UTILISATEUR

Validation de fonctionnement et configurations spécifiques

À ce niveau, vous pouvez déjà essayer depuis un poste client :

sftp NOM_UTILISATEUR@SERVEUR_DISTANT

Vous devriez avoir comme retour ces lignes suivant ou quelque chose s'en rapprochant :

NOM_UTILISATEUR@SERVEUR_DISTANT's password:
Connection closed

Vous aurez alors un message d'erreur du type : « Connection closed, Error code 255, … ». Il s'agit d'une sécurité incluse dans OpenSSH. En faisant un petit tour dans la manpage de sshd_config, nous noterons la description suivante :

ChrootDirectory Specifies the pathname of a directory to chroot(2) to after authentication. All components of the pathname must be root-owned directories that are not writable by any other user or group. After the chroot, sshd(8) changes the working directory to the user's home directory.

La solution consiste à changer le propriétaire et les droits du dossier utilisateur :

sudo chown root:root /home/NOM_UTILISATEUR
sudo chmod o-w /home/NOM_UTILISATEUR

Réessayons de nous connecter depuis le client :

sftp NOM_UTILISATEUR@SERVEUR_DISTANT
NOM_UTILISATEUR@SERVEUR_DISTANT's password:
Connected to SERVEUR_DISTANT.

sftp>

Parfait, ça fonctionne. Mais est-ce suffisant ? Essayons de vérifier que nous disposons bien d'un accès en écriture à l'environnement :

sftp> mkdir test
Couldn't create directory: Permission denied 

Comme indiqué précédemment, le premier niveau du dossier « chrooté » doit appartenir à root et ne doit pas être accessible en écriture aux autres utilisateurs. Donc, au niveau du principe de fonctionnement, il faut ajouter un sous-dossier qui, cette fois, appartiendra à l'utilisateur. Pour notre exemple, soit un dossier www :

sudo mkdir /home/NOM_UTILISATEUR/www
sudo chown NOM_UTILISATEUR /home/NOM_UTILISATEUR/www

Il ne nous reste plus qu'à valider que tout fonctionne correctement. Depuis le poste client :

sftp NOM_UTILISATEUR@SERVEUR_DISTANT
NOM_UTILISATEUR@SERVEUR_DISTANT's password:
Connected to SERVEUR_DISTANT.

sftp> cd www
sftp> mkdir test
sftp> ls
test
sftp>

Maintenant, qu'en est-il de la connexion SSH normale ? Tentons de nous connecter en SSH simple :

ssh NOM_UTILISATEUR@SERVEUR_DISTANT
NOM_UTILISATEUR@SERVEUR_DISTANT's password:

This service allows sftp connections only.
Connection to SERVEUR_DISTANT closed.

Nous venons donc de mettre en place un environnement isolé pour un utilisateur ! L'utilisateur ne pourra pas voir d'autres fichiers que ceux de son répertoire. De plus, la connexion SSH sera belle et bien désactivée.

Vous pouvez répéter cette procédure pour chaque nouvel utilisateur.

Attention le port SSH a été changé sur telnew c'est maintenant le 9123.

telnew_sftp.txt · Dernière modification: 2017/10/10 11:55 par deldel