Le protocole SFTP ressemble beaucoup au célèbre FTP qui sert surtout à transférer des fichiers, mais se base sur un tunnel SSH. À vrai dire, chaque utilisateur disposant d'un accès SSH peut envoyer et télécharger des données en SFTP avec ses identifiants habituels. Un des avantages intéressant est de pouvoir reprendre un chargement partiel là où il en était, très utile pour envoyer/recevoir des fichiers volumineux.
Si vous voulez déployer un serveur SFTP pour un plus grand nombre d'utilisateurs, la mise en place d'un “chroot” est conseillée. Cette procédure est décrite plus loin dans le document car un poil plus complexe.
Pour copier des fichiers, vous pouvez utiliser la commande sftp
qui s'utilise
ainsi :
sftp -P <port> utilisateur@chezmoi.tld
Si vous avez désactivé l'identification par mot de passe au profit des clés, indiquez quelle est votre clé privée ainsi :
sftp -P <port> -o IdentityFile=~/.ssh/clessh utilisateur@chezmoi.tld
Vous voilà alors devant une invite de commande.
Voici quelques commandes utiles :
put fichier
: sert à envoyer un fichier.get fichier
: télécharge un fichier.ls
: liste les documents sur le serveur.cd repertoire
: se déplace dans un autre répertoire sur le serveur.lcd repertoire
: se déplace dans un autre répertoire sur l'ordinateur client.mkdir
: crée un dossier sur le serveur.quit
: ferme la session.help
: liste les commandes disponibles :).Rien de bien compliqué finalement, mais vous préférerez peut-être un client graphique comme expliqué ci-dessous.
Le logiciel Filezilla peut se télécharger ou s'installer directement via le gestionnaire de paquets de votre distribution. Vérifiez qu'il s'agit bien d'une version à jour.
Ouvrez Filezilla, puis cliquez sur la petite icône en haut à gauche “Gestionnaire de sites”. Une nouvelle fenêtre s'ouvre :
Cliquez sur “Nouveau Site”, puis remplissez les champs ainsi :
Il ne vous reste plus qu'à cliquer sur Connexion. Sélectionnez les fichiers que vous souhaitez envoyer ou récupérer, puis faites un clic-droit pour les télécharger. La même chose est possible avec des glisser/déposer.
D'autres clients graphiques existent, on pourra notamment citer WinSCP disponible sous Windows.
Selon votre système d'exploitation, il y a fort à parier que votre gestionnaire de fichiers (Dolphin sous KDE ou Nautilus sous Gnome par exemple) soit lui même capable d'ouvrir une session SFTP. Comme chemin vers le dossier, indiquez simplement :
sftp://utilisateur@chezmoi.tld:222
Remplacez 222 par le port ssh du serveur (22 si vous ne mettez rien). Bien sûr, “utilisateur” est aussi à remplacer (par exemple jean_eudes ou toto).
Cela donne sur Nautilus :
ou encore avec Thunar (XFCE) :
sshfs est un outil qui permet de monter un dossier disponible via SFTP comme s'il s'agissait d'un point de montage de votre système. Peu importe votre gestionnaire de fichiers, vous pourrez copier vos documents comme s'il s'agissait d'un dossier classique.
sshfs s'utilise tout simplement ainsi :
sshfs -d utilisateur@chezmoi.tld:/dossier/distant /mnt/sftp
Ensuite, le dossier /mnt/sftp
contiendra le contenu du dossier distant.
Dans le cas où vous utilisez une identification par clé uniquement, indiquez quelle clé privée utiliser ainsi :
sshfs -d utilisateur@chezmoi.tld:/dossier/distant /mnt/sftp -o IdentityFile=/home/toto/.ssh/rqfdkj
L'idée ici est d'enfermer dans un dossier les utilisateurs appartenant au groupe
sftpusers
que l'on crée pour cette occasion afin de gérer finement les permissions. Cela leur évitera de copier n'importe où leurs documents, mais
aussi de supprimer des éléments importants du serveur.
À titre d'exemple, nous allons mettre le chroot dans le dossier /var/sftp
.
Chaque utilisateur aura dans ce dernier un dossier qui lui sera propre. Il ne
pourra pas en sortir. Les utilisateurs auront l'impression qu'il s'agit d'une
nouvelle racine /
. Un dossier “docs
” leur permettra d'envoyer ses
fichiers.
Créons de suite le groupe en question : groupadd sftpusers
.
Éditez le fichier /etc/ssh/sshd_config
puis ajoutez les lignes suivantes :
Match Group sftpusers ChrootDirectory /var/sftp/%u ForceCommand internal-sftp AllowTcpForwarding no
Pensez à bien modifier la ligne déjà existante qui contient Subsystem
.
Si vous souhaitez ne permettre que l'identification par clé; précisez dans cette section :
PasswordAuthentication no
Ensuite, relancez SSH : rcctl reload sshd
Créez maintenant un dossier /sftp
dans le dossier /var/
pour que les
utilisateurs y soient automatiquement placés à leur connexion.
# mkdir -p /var/sftp
Modifiez les permissions pour assurer une sécurité supplémentaire :
# chown root:wheel /var/sftp # chmod 700 /var/sftp
Chaque utilisateur du groupe sftpusers
sera placé dans ce dossier dès qu'il
se connectera au serveur.
Notez que ces utilisateurs ne pourront qu'utiliser le protocole sftp, et
donc la commande sftp
(ou un client graphique), mais pas scp
ou
openrsync
au travers d'un tunnel ssh.
Ajouter un compte SFTP revient à créer un nouvel utilisateur et mettre ce dernier dans le groupe sftpusers
.
Il faut quand même faire attention à plusieurs points :
docs
prévu à cet effet.Voici la marche à suivre :
groupadd sftpusers
.# useradd -G sftpusers -s /sbin/nologin -m utilisateur
passwd utilisateur
.# mkdir -p /var/sftp/utilisateur
# mkdir -p /var/sftp/utilisateur/docs # chown utilisateur:sftpusers /var/sftp/utilisateur/docs
Finalement, personne d'autre ne doit pouvoir accéder à la racine de l'utilisateur :
# chown root:wheel $CHROOT/$user
L'utilisateur peut maintenant utiliser le protocole SFTP. Il sera enfermé dans son dossier précédemment créé.
Je vous invite à créer un script pour vous faciliter cette procédure :
#!/bin/sh # addsftpuser.sh : if [ $# -ne 1 ]; then echo "usage: $0 user" exit fi # CHANGE MOI CHROOT=/var/sftp/ user="$1" mkdir -p "${CHROOT}" useradd -G sftpusers -s /sbin/nologin -m "${user}" mkdir -p "${CHROOT}/${user}/docs chown "${user}":sftpusers "${CHROOT}/${user}/docs" chown root:wheel "${CHROOT}/${user}" exit
Si vous avez activé l'identification par clé, vous remplirez le
fichier .ssh/authorized_keys
dans le dossier personnel de l'utilisateur :
celui placé dans /home
.