SFTP – FTP over SSH
L’objectif de cet article est de vous présenter l’extension FTP du protocole SSH : FTP over SSH.
Un protocole de communication fonctionnant au-dessus de SSH pour transférer et gérer des fichiers à distance.
Le plan
–> Mise au point
–> Présentation de SFTP
–> Caractéristiques
–> Mise en œuvre de SFTP
–> SFTP vs FTPS
Mise au point
On parle ici de SSH File Transfer Protocol, Secure File Transfer Protocol, Secure FTP, ou SFTP – FTP over SSH
Ne pas confondre avec le protocole FTP (File Transfer Protocol) et son extension SSL/TLS, protocole FTPS – FTP over SSL/TLS
Nous verrons dans la seconde partie de l’atelier, les principales différences entres les deux protocoles. Mais intéressons nous tout d’abord à SFTP
Présentation de SFTP
Pour commencer, nous ne pouvons pas parler de SFTP, sans parler du protocole qui le supporte : SSH.
A la base, la principale fonction de SSH était de sécuriser l’accès à un Shell distant sur un système UNIX.
Mais depuis son origine en 1995, les fonctions de SSH ont bien évolués et ont été étendus, notamment, au protocole de transfert de fichiers :
le bien connu SCP (en SSH 1.x),
et le moins connu SFTP (depuis SSH2)
La dernière révision de SFTP est la version 6, elle date de 2006.
Le protocole fait l’objet d’un draft (juillet 2006)
http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13
Je vous conseille de parcourir le draft pour vous donner une idée de l’étendu des possibilités offertes par SFTP…
mais je vous épargne cela pour le moment et je vous propose de faire un petit résumé des caractéristiques de SFTP
Quelques caractéristiques
SFTP a été développé pour fournir non seulement des opérations de téléchargements (put, get), mais aussi pour effectuer des opérations courantes,
si vous fêtes un man sftp
vous constaterez qu’il est possible de lister et manipuler les fichiers (chown, ls…) et passer des commandes interactives (mkdir, symlink…)
J’ai même pu tester la reprise des transferts interrompus et le verrouillage des fichiers ouverts (.~lock)
Niveau sécurité, ce sont les mécanismes de SSH qui sont utilisés.
La confidentialité des transactions est une combinaison d’algorithmes asymétriques (RSA, DAS), d’algorithmes symétriques (DES/3DES, AES…) et des clés algorithme de clés d’échange.
L’authentification est assurée par des clés SSH (clés public et clés privé stockées séparément) et ne contiennent, par contre, aucune information sur le propriétaire de la clés.
Alors, maintenant, passons aux choses sérieuses
Mise en œuvre de SFTP
Tout d’abord une précision, SFTP est présent par défaut dans la configuration SSH.
Si vous avez un serveur SSH sous la main, regardez dans /etc/ssh/sshd_config
Vous y trouverez cette ligne :
Subsystem sftp /usr/lib/openssh/sftp-server
Cela indique à sshd où se trouve sftp-server.
sftp-server est appelé par sshd et gère les requêtes sftp.
APARTÉ: Un man sftp-server vous donnera plus de détail sur cette commande.
Alors, si vous tentez une connexion via un terminal
# sftp user@server
Chez moi ça donne :
sftp alex@localhost
Connecting to localhost…
alex@localhost’s password:
sftp> ls -lat /
drwxrwxrwt 13 root root 4096 Sep 1 12:37 tmp
drwx—— 14 root root 4096 Sep 1 12:34 root
drwxr-xr-x 2 root root 0 Sep 1 12:27 net
drwxr-xr-x 151 root root 12288 Sep 1 11:04 etc
vous constaterez que vous aurez accès à l’ensemble de l’arborescence du serveur, sans rien faire de particulier dans la configuration SSH….
Maintenant que nous avons compris le principe (enfin j’espère…)
Je vous propose donc d’étudier une mise en application à travers un exemple concret .
Le but est de créer un partage réseau accessible depuis un RPV, afin de stocker des documents professionnels dans des répertoires sécurisés.
Techniquement, cela se traduit par la création d’un environnement « chroot » qui limite l’accès à certains répertoires et à certains utilisateurs.
Commençons par créer une arborescence de répertoires :
# mkdir -p /srv/files/DS1 /srv/files/DS2
Un truc important, les droits :
Le répertoire «chroot» doit avoir les droits «root » en «rwxrr-xr-x»
# chown root:root /srv/files ; chmod u+rwx,go+rx /srv/files/
Ensuite il faut créer un groupe contenant les utilisateurs concernés par l’accès à SFTP.
PRÉCISION : Attention d’exclure le compte root des configurations, sous peine de ne plus pouvoir se connecter en SSH….
Alors allons-y, nous allons créer un utilisateur « alexandre », le groupe « chrooted » et mettre l’utilisateur « alexandre » dans ce groupe :
# addgroup chrooted
# adduser alexandre
# adduser alexandre chrooted
Nous poursuivons la configuration dans /etc/ssh/sshd_config
Nous avons vu plus haut que sftp-server était configuré par défaut, mais pour simplifier la configuration du chroot, nous allons utiliser « internal-sftp »
Nous allons donc commenter cette ligne
# Subsystem sftp /usr/lib/openssh/sftp-server
Et la remplacer par :
Subsystem sftp internal-sftp
EXPLICATIONS : Nous indiquons ici d’utiliser le sftp interne de Openssh. Ce qui nous permettra d’utiliser certains mots clés définis dans un bloque conditionnel
Nous ajoutons ensuite :
Match group chrooted
ChrootDirectory /srv/files # chroot le répertoire partagé /srv/files
X11Forwarding no # Interdit le forwarding X11
AllowTcpForwarding no # Interdit le forwarding TCP
ForceCommand internal-sftp # force la connexion sftp pas de ssh normal
EXPLICATIONS : Match définie ici un bloque conditionnel, si les critères de la ligne Match sont satisfaites, les lignes contenues dans le bloque sont appliquées.
Une dernière chose à régler : l’authentification
Idéalement, il faut créer une pair de clés SSH pour authentifier l’utilisateur mais pour simplifier les choses en interne, nous autoriserons l’authentification par mot de passe :
PasswordAuthentication yes
Attention aussi de vérifier le AllowGroups, le groupe chrooted doit y être.
Nous en avons terminé avec la configuration du serveur, nous pouvons redémarrer le service SSH.
# /etc/init.d/ssh restart
Sur le Client maintenant
Trois possibilités :
Depuis Nautilus
Soit vous ouvrez Nautilus, puis Ctrl+L, et ssh://user@serveur
ou depuis un terminal c’est plus rapide : # nautilus ssh://user@serveur
Depuis un navigateur Web
# sftp://user:pwd@serveur
Depuis un Terminal
# sftp utilisateur@serveur
Chez moi ça donne :
# sftp alexandre@localhost
Connecting to localhost…
alexandre@localhost’s password:
sftp> ls -lat /
drwxr-xr-x 2 root root 4096 Aug 31 16:00 DS1
drwxr-xr-x 2 root root 4096 Aug 31 16:00 DS2
drwxr-xr-x 4 root root 4096 Aug 31 16:00 ..
drwxr-xr-x 4 root root 4096 Aug 31 16:00 .
Une vérification sur /etc
# ls -lat /etc
Couldn’t stat remote file: No such file or directory
Can’t ls: « /etc » not found
DÉCRYPTAGE : l’utilisateur alexandre est bien chrooté dans le répertoire /srv/files/
Ensuite, il faut ajuster les droits en fonctions des besoins…ce que nous n’aborderons pas ici.
voilà…s’en est fini avec la configuration.
Maintenant, nous pouvons nous demander pourquoi utiliser SFTP plutôt qu’un FTP sécurisé !?
Je vous propose donc un petit comparative rapide des deux solutions
SFTP vs FTPS
SFTP
Avantages
–> A une bonne base de normes qui définit strictement les aspects les plus (sinon tous) des opérations
–> Une seule connexion est nécessaire (pas besoin de « DATA » connexion)
–> La connexion est toujours sécurisée
–> Simplicité de mis en œuvre
–> Le protocole inclus des opérations sur les permissions et les attributs
Inconvénients
–> La communication est binaire et ne peut pas être lisible directement sans une interprétation
–> Les clés SSH sont plus difficiles à gérer et à valider pour un usage étendu
–> Les normes définissent certaines choses comme facultatives ou recommandées, ce qui conduit à des problèmes de compatibilité entre différents logiciels provenant de différents fournisseurs
–> Pas de transfert de fichiers de serveur à serveur
FTPS
Avantages
–> Largement connu et utilisé
–> La communication peut être lu et compris par les humains
–> Fournit des services de transfert de fichiers de serveur à serveur
–> SSL / TLS a de bons mécanismes d’authentification (X.509)
–> FTP et SSL/TLS est supporté par plusieurs Frameworks de communication Internet.
Inconvénients
–> Il n’y a pas de format uniforme pour lister les répertoires…
–> Requière un second canal pour les DATA, plus ennuyeux pour passer les pares-feu.
–> Aucun standard pour l’encodage des caractères pour les noms de fichiers.
–> Tous les serveurs FTP ne support pas SSL/TLS
–> Aucun standard pour les attributs des fichiers et des répertoires.
A vous de juger, mais pour ma part, je trouve que SFTP offre une solution rapide et simple à mettre en œuvre. Le SSH est souvent installé sur les serveurs, il pourrait convenir dans de nombreuses situations. FTP, quand à lui, demande un peu plus de configuration mais reste une alternative complémentaire. Pensez y si vous avez à ouvrir des accès de stockages ou à des zones d’hébergement Web.
A suivre….
Multiple instances de SSH
http://www.fprimex.com/linux/sftpjail.html
Cet article SFTP – FTP over SSH est apparu en premier sur PointRoot.org.