SFTP : Transfert de fichiers sécurisé

07 Jun. 2011
Auteur : DarkRaziel
Responsable : paulriluma
Score ( voter ) :
Connexes : Même auteur | Même responsable | Historique
Le sftp est une amélioration du ftp qui fonctionne au-dessus d'un tunnel ssh. Pour que ça fonctionne il faut que le PC distant ait installé sftp-server et que le PC local dispose de la commande sftp. Ce qu'il faut savoir c'est que quand vous lancez une connexion sftp, une connexion ssh est initiée sur le serveur et c'est elle qui lance sftp-server. De plus, comme sftp-server est lancé depuis ssh, aucun privilège root n'est requis. Notez également qu'en sftp, toutes les commandes habituelles de ftp sont acceptées.

1. Installation des logiciels nécessaires

1.1 Installation d'OpenSSH

Sur la machine cliente et sur la machine serveur installez SSH comme indiqué installation de SSH

1.2 Installation de rssh

rssh est un shell restreint qui s'utilise avec OpenSSH et permet de faire uniquement du scp ou du sftp. Téléchargez les sources et installez-les comme suite :
$ tar -xzvf /où_est/rssh-xxx.tar.gz $ cd rssh-xxx/ $ ./configure --prefix=/usr --sysconfdir=/etc $ make $ su # make

2. Configuration du serveur

2.1 Fichier de configuration

Editez le fichier /etc/shells et assurez-vous d'avoir la ligne suivante :
/usr/bin/rssh
Nettoyez votre fichier /etc/rssh.conf comme suite :
# cd /etc/ # mv rssh.conf rssh.conf.old # sed /^#/d rssh.conf.old > rssh.conf
Maintenant éditez-le avec votre éditeur favori et assurez-vous qu'il ressemble à ceci :
logfacility = LOG_USER
allowsftp
umask = 022

2.2 Chroot de l'environnement

Cette partie concerne les personnes qui souhaitent chrooter leurs utilisateurs. Si ce n'est pas votre cas, passez au 2.3. Le chroot est une technique qui permet de déplacer la racine du système pour enfermer l'utilisateur dans un dossier. Dans notre cas ce sera "/home". L'avantage de cette technique est que toutes les actions des utilisateurs du sftp n'auront d'impact que sur cet univers clos. Mais pour que ça fonctionne il faut que tout ce dont auront besoin les utilisateurs soit accessible dans cet univers. Préparons maintenant le chroot en copiant les exécutables dont auront besoin les utilisateurs du sftp dans le dossier "/home".
# cd /home # mkdir -p usr/bin # cp /usr/bin/sftp usr/bin # cp /usr/bin/scp usr/bin # cp /usr/bin/rssh usr/bin # mkdir -p usr/libexec # cp /usr/libexec/rssh_chroot_helper usr/libexec # cp /usr/libexec/sftp-server usr/libexec # mkdir lib # mkdir usr/lib
Les exécutables peuvent ne pas être à ces endroits chez vous, alors adaptez ! Déterminons maintenant les dépendances de sftp :
# ldd /usr/bin/sftp
Vous devrez avoir quelque chose comme ceci (il peut y avoir des variations) :
linux-gate.so.1 => (0xffffe000) libresolv.so.2 => /lib/libresolv.so.2 (0x4002d000) libcrypto.so.0 => /usr/lib/libcrypto.so.0 (0x40041000) libutil.so.1 => /lib/libutil.so.1 (0x40140000) libz.so.1 => /usr/lib/libz.so.1 (0x40144000) libnsl.so.1 => /lib/libnsl.so.1 (0x40155000) libcrypt.so.1 => /lib/libcrypt.so.1 (0x4016b000) libc.so.6 => /lib/libc.so.6 (0x40199000) libdl.so.2 => /lib/libdl.so.2 (0x402b7000) /lib/ld-linux.so.2 (0x40000000)
Vous devez copier les dépendances qui sont dans /lib dans /home/lib et celles de /usr/lib dans /home/usr/lib en respectant l'arborescence. Un exemple :
# cd /home # cp /lib/libresolv.so.2 lib/
Quand vous aurez, fini vous devrez taper :
# ldd /usr/bin/rssh # ldd /usr/libexec/rssh_chroot_helper # ldd /usr/libexec/sftp-servers # ldd /usr/bin/scp
et copier toutes les dépendances correspondantes dans /home, comme vous l'avez fait pour /usr/bin/sftp. Finissez en ajoutant la ligne :
chrootpath="/home"
à la fin du fichier /etc/rssh.conf.

2.3 Gestion des utilisateurs

Créez maintenant les utilisateurs autorisés à faire du sftp et autorisés à ne faire que du sftp. Pour fixer les idées, je vais créer l'utilisateur toto et lui attribuer comme dossier personnel /home/toto :
# adduser --home /home/toto --shell /usr/bin/rssh toto
Vérifier que l'utilisateur toto a bien rssh comme shell :
# su - toto
Vous devriez avoir quelque chose comme ça :
This account is restricted to sftp only. If you believe this is in error, please contact your system administrator

3. Connexion au serveur sftp

Vous pouvez tester en local :
$ sftp toto@localhost
Après avoir entrer le mot de passe, vous devriez obtenir ceci :
sftp>
Et tester en réseau :
$ sftp toto@IP_du_Serveur
Si vous obtenez l'invite sftp> , c'est gagné ! sinon vérifiez que vous avez bien copié toutes les dépendances dans l'environnement de chroot. Si vous ne souhaitez plus utiliser l'environnement chrooté, il suffit d'enlever la ligne :
chrootpath="/home"
du fichier /etc/rssh.conf.

4. Utilisation de sftp

Pour vous connecter, à un PC distant, il suffit de taper :
$ sftp toto@IP_du_Serveur
Une fois connecté : Quelques commandes utiles : Attention : Pour ceux qui ont une allergie chronique au mode console et qui frise l'embolie cérébrale quand ils entendent les mots lignes de commandes, il existe des logiciels avec GUI qui gèrent le sftp, par exemple GFTP ou LFTP alors plus d'excuses.