Installation d'un serveur sFTP chroot
Installer et configurer un serveur sFTP en environnement sécurisé
Problématique
De plus en plus la sécurité des échanges devient une problématique majeure. La protection de la vie privée également. Dans ces conditions, il est nécessaire de pouvoir garantir la sécurité des données échangées, y compris sur un serveur FTP. Pour cela, il faut installer un serveur FTP sécurisé : sFTP.
Par défaut, sous FreeBSD, le SFTP n'est pas configuré. Nous allons voir comment transformer une machine classique en serveur SFTP. Ce n'est pas très compliqué, mais sans explications, l'on peut chercher longtemps.
Dans notre exemple nous prendrons un serveur sous FreeBSD, un client FileZilla (libre, gratuit, gérant le SFTP) et un poste Windows.
Solution
Le SFTP repose sur une communication chiffrée par SSH. Il faut donc commencer par configurer le SSH correctement.
Mise en place du SSH
Création d'une clef de chiffrement
Le chiffrage repose sur une clef de chiffrement permettant à la fois de chiffrer un message clair et de déchiffrer un message chiffrer. Cette clef peut être unique ou double (publique/privée).
Sous Windows, puttygen permet de créer des clefs de chiffrement aisément.
Sélectionnons SSH2-RSA pour générer une clef RSA (ici de longueur 1024 bits, par défaut) puis cliquons sur Generate. L'application demande de faire bouger le pointeur de la souris sur la zone key, de façon à générer des nombres aléatoires.
Une fois la clef générée :
Prenons le temps d'observer cette fenêtre. Dans la zone key, nous avons un message qui nous indique que pour OpenSSH, il faut copier et coller le contenu dans un fichier authorized_keys. Comme nous utilisons OpenSSH (ce qui est le cas du SSH par défaut sous freeBSD), suivons donc cette invitation : copions-collons le contenu dans un fichier authorized_keys (créé avec notepad) et mettons ce fichier de côté pour l'instant. Nous pouvons aussi décider de nous occuper de cela plus tard (en ouvrant une clef existante avec puttygen et en effectuant alors l'opération à ce moment).
Ensuite, nous avons un champ présentant l'empreinte de la clef puis deux champs demandant le mot de passe. C'est ici que nous le définissons. Choisissons donc le mot de passe et entrons le (deux fois) dans l'application et sauvons la clef privée (save private key) et la clef publique (save public key).
La partie génération de clef est finie.
Création du compte unix
Cette partie se passe sur le serveur (ici freeBSD). Nous créons un groupe spécifique dans /etc/group, par exemple ftpusers :
ftpusers:*:201:
Créons des utilisateurs attachés à ce groupe, par exemple sftpuser, avec la configuration par défaut. Il faut absolument qu'il puisse se connecter, évitons donc l'option nologin pour le Shell. Pour le reste, mettons ce que nous voulons :
adduser
Username : ...
Pour Home directory, laissons aussi son répertoire par défaut /home/sftpuser, cela nous sera fort utile pour y déposer la clef publique.
Pour le mot de passe, choisissons un mot de passe.
Le compte étant créé, nous allons dans le répertoire de notre nouvel utilisateur et nous créons un répertoire .ssh dans lequel nous transférons (par exemple par FTP classique ou samba) le fichier authorized_keys généré par puttygen. Le répertoire et le fichier doivent appartenir au propriétaire, c'est-à-dire le nouvel utilisateur créé (sftpuser). Et le fichier authorized_keys accessible uniquement pour le propriétaire (chmod 600).
Remarque
Si l'utilisateur existe déjà et qu'il possède déjà un fichier authorized_keys, alors il faut ajouter la nouvelle clef publique à la suite des autres dans ce fichier. authorized_keys est un trousseau de clefs publiques authentifiées pour le compte.
Création du répertoire partagé (chroot)
Pour notre groupe, nous voulons qu'il ait accès à un répertoire et seulement celui-là, sans pouvoir en sortir. Avec le compte root, créons donc ce répertoire :
mkdir /chemin/vers/mon_rep_partagé
chmod -R 755 /chemin/vers/mon_rep_partagé
Remarque
Ce répertoire doit appartenir à root et ne doit pas être accessible en écriture aux autres. Placez donc les droits à 755.
Pour que les utilisateurs puissent modifier le contenu de ce répertoire, il faudra créer des sous-répertoire accessibles, eux, en écriture.
Configuration de SSH
Editons /etc/ssh/sshd_config et ajoutons les lignes suivantes :
Match Group ftpusers
ChrootDirectory /chemin/vers/mon_rep_partagé
Pour le groupe ftpusers (groupe de notre nouvel utilisateur), nous redirigeons les connexions ssh vers /chemin/vers/mon_rep_partagé.
Modifions aussi la ligne :
Subsystem sftp /usr/libexec/sftp-server
en :
Subsystem sftp internal-sftp
En effet, il semble que, par défaut, ssh ne sache pas utiliser le serveur sftp FreeBSD (/usr/bin/sftp).
Démarrons le serveur :
/etc/rc.d/sshd start
Pour chaque modification du fichier de configuration, il faudra redémarrer le serveur ssh :
/etc/rc.d/sshd restart
Pour le démarrer automatiquement au démarrage de la machine, il ne faudra pas oublier de modifier le /etc/rc.conf :
sshd_enable="YES"
Connexion avec FileZilla
FileZilla gérant le sFTP, nous utiliserons cet outil pour nous connecter.
Dans Edition/Configuration/sFTP :
Importons notre nouvelle clef privée (Ajouter). Un message nous indique que les fichiers protégés par un mot de passe ne sont pas pris en charge par fileZilla. Acceptons alors de le convertir et enregistrons le sous un nouveau nom. Une fois cela fait, notre nouvelle clef apparaîtra dans la configuration :
Validons : OK
Dans Fichier/Gestionnaire de sites, créons un nouveau site, de type SFTP- SSH file Transfert Protocol, en authentification Normale, avec l'utilisateur créé (sftpuser) et comme mot de passe, le mot de passe UNIX.
Cliquons sur Connexion. Et voilà !
Erreurs possibles
FileZilla : Couldn't initialise connection to server
Si le fichier de log ne donne aucune erreur particulière, c'est que le problème se situe au niveau du sous-système sftp. Pensez bien à utiliser internal-sftp
Syslog : fatal: bad ownership or modes for chroot directory…
Si le fichier de log donne cette erreur, c'est que le répertoire indique n'appartient pas à root ou possède les droits d'écriture pour les étrangers. Effectuez un changement de propriétaire (chown) ou restreignez les droits (chmod)