Léa-Linux & amis :   LinuxFR   GCU-Squad   Zarb.Org   GNU
SFTP & RSSH : Créer un serveur de fichiers sécurisé


Introduction

Le SFTP (Secure File Transfert Protocol) permet de transferer des fichiers par une connexion sécurisée utilisant le protocole SSH. SFTP peut effectuer les mêmes opérations que le FTP. Du côté du client, on peut :

  • Supprimer et créer des fichiers
  • Envoyer et recevoir des fichiers
  • Déplacer et renommer des fichiers

Du côté du serveur, on peut :

  • Gerer l'espace alloué à chaque client (Admin-admin fs-quotas)
  • Administrer les accès de chaque utilisateur sur chaque fichier ou dossier (Gestion des ACL).
  • Ajouter, supprimer, modifier les paramètres de chaque groupe ou utilisateur.

Il est important de noter que le SFTP n'est pas une simple connexion FTP passant par un tunnel SSH : Du côté du serveur, on lance sftp-server, qui utilise OpenSSH. Du côté client on utilise un client SFTP graphique ou en ligne de commande. Dans cet article, on utilisera RSSH, un shell restreint qui va faciliter et sécuriser d'avantage l'utilisation du SFTP.

Installation des logiciels

Installation de OpenSSH

OpenSSH est installé nativement sur les principales distributions Linux. Il doit être installé sur la machine cliente et serveur. Si vous n'avez aucune idée de ce qu'est le SSH, lisez préalablement cet article : Reseau-secu-ssh. Si OpenSSH n'est pas installé sur votre ordinateur, lisez cet article : SSH2 Rapellons que OpenSSH embarque sftp-server (commande serveur) et sftp (commande cliente).

Installation de RSSH

Rssh est un shell restreint qui va sécuriser et faciliter l'utilisation du SFTP. Grâce à RSSH, l'utilisateur distant pourra uniquement échanger, supprimer, modifier des fichiers : il ne pourra executer de commandes à distance, susceptibles d'exploiter des failles de sécurité.

  • Sur Mandriva :
    # urpmi rssh
  • Sur Debian :
    # apt-get install rssh

Pour les autres, téléchargez les sources disponibles ici pour compilez-les :

$ tar -fvzx rssh-xxx.tar.gz
$ cd rssh-xxx
$ ./configure --orefix=/usr --sysconfdir=/etc
$ make
$ su
# make install


Configuration du serveur

Configuration de rssh

Rssh est un shell (restreint). Il faut donc s'assurer qu'il soit présent dans le fichier /etc/shells :

$ cat /etc/shells

Si il n'est pas présent, ajouter la ligne suivante au fichier à l'aide de votre éditeur de texte favori :

/usr/local/bin/rssh

Il faut maintenant éditer le fichier de configuration de rssh :

On déplace le fichier de configuration présent, puis on en créé un vide :

# mv /etc/rssh.conf /etc/rssh.conf.old
# touch /etc/rssh.conf

On édite le nouveau fichier /etc/rssh.conf en le remplissant comme ceci :

logfacility = LOG_USER
allowsftp
umask = 022

Maintenant, le shell rssh se limitera à l'utilisation du sftp.


Chroot de la connexion SFTP

Cette partie s'adresse à ceux qui veulent chrooté la connexion SFTP. Pour les autres, passez directement à l'étape suivante. Le Chroot permettra ici de restreindre l'accès d'un utilisateur (pour en savoir plus, lisez le préambule de l'article Admin-admin env-chroot). Par exemple, on décide de chrooter un utilisateur dans /home : cet utilisateur verra /home comme son répertoire racine, et ne pourra aller au-delà. L'inconvénient de cette manière, c'est que tout les fichiers nécessaires doivent être inclus dans le dossier chrooté.

Préparation du dossier chrooté

Ici, on chrootera l'utilisateur dans le répertoire /home. Si vous vous êtes déjà familiariser avec le chroot, vous savez qu'il faut non seulement copier les executables nécessaires, mais en plus les librairies qui correspondent, ce qui devient un travail fastidieux ... . Voici les executables à copier : sftp, scp, rssh, rssh_root_helper, sftp-server. Ca fait beaucoup ... et pour vous faire gagner du temps, nous allons utiliser un script qui nous permettra d'automatiser la tâche ! Placez-vous dans le répertoire /home.

On télécharge le fichier mkdep, puis on lui attribue le droit d'exécution :

$ wget http://jeannedarc001.free.fr/mkdep
$ chmod +x mkdep

Ce script provient de cette page. J'ai modifié le script pour le rendre plus accessible en ligne de commande.

mkdep permet de copier automatiquement un fichier donné ainsi que ses librairies dans le dossier chrooté cible :

./mkdep <fichier à copier> <dossier chrooté>

C'est parti : on copie tous les fichiers cités plus hauts :

$su
# ./mkdep /usr/bin/rssh /home
#./mkdep /usr/bin/sftp /home
#./mkdep /usr/libexec/rssh_chroot_helper /home
#./mkdep /usr/libexec/sftp-server /home
#./mkdep /usr/bin/scp /home

Il ne reste plus maintenant qu'à modifier la configuration du fichier /etc/rssh.conf en ajoutant la ligne :

chrootpath="/home"

L'utilisateur sera maintenant connecté dans le répertoire /home.

Création d'un utilisateur

Maintenant que rssh est configuré, il faut l'associer à un utilisateur. Généralement, lorsqu'on créer un nouvel utilisateur, on lui attribu le shell "bash". Ici on lui attribura le shell "rssh". Exemple : je veut créer un utilisateur "Lise" restreint à l'utilisation du sftp. On utilise la commande adduser</div>. Lorsque <code>Shell [ /bin/bash ]</div> apparait, tapez <code>/usr/bin/rssh</div>. N'oubliez pas de lui créer un mot de passe :

#passwd lise

Connexion au serveur SFTP

Maintenant que le compte "lise" est créé, essayons de nous logger avec :

#su lise

Linux vous répondra ceci :

This account is restricted by rssh.
Allowed commands: sftp
If you believe this is in error, please contact your system administrator.

C'est tout à fait normal, étant donné que rssh accepte uniquement une connexion sftp! Essayons maintenant de nous y connecter avec le client sftp :

$ sftp lise@localhost
Connecting to localhost...
lise@localhost's password:
sftp> 

Une fois connecté :

  • Pour uploader un fichier : sftp> put le_fichier
  • Pour downloader un fichier : sftp> get le_fichier

Quelques commandes utiles :

  • help : permet de lister les commandes disponibles
  • pwd : affiche le nom du répertoire courant sur le FTP
  • ls : permet de lister le contenu du répertoire courant côté FTP
  • cd : permet de se déplacer dans l'arborescence du FTP
  • mkdir : créé un répertoire sur le FTP
  • delete et rm : effacent un fichier sur le FTP
  • get : récupère un fichier présent sur le serveur FTP et le place sur votre machine
  • put : transfère un fichier de votre disque dur vers le serveur
  • quit : pour quitter la session en cours


Remarque : Si vous avez configuré RSSH pour une connexion chrootée, vous remarquerez que l'utilisateur ne peut aller au-delà de sa "cage".

La ligne de commande étant peu maniable, il est pratique d'utiliser des clients SFTP graphiques :

  • WinSCP pour Windows (client SFTP).
  • Filezilla pour Windows, MAC et Linux (client FTP et SFTP).

Remarque : les clients FTP ne supportent pas le SFTP.

Conclusion

Le SFTP est une bonne alternative au FTP, plus sécurisée, mais aussi plus configurable : en effet, si ce tutorial nous montre uniquement comment créer un compte SFTP, les possibilités de configuration du serveur sont très importantes : Les ACL, les quotas,... permettent de moduler complètement l'accès de chaque utilisateur. Vous trouverez toutes ces possibilités dans la rubrique "Administrer" du wiki ;) .



@ Retour à la rubrique Réseau et sécurité

Affichages
Outils personnels

Serveur hébergé par ST-Hebergement et Lost-Oasis / IRC hébergé par FreeNode / NS secondaire hébergé par XName
Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons CC-BY-SA