L’Informaticien Libre

Maîtrisez Linux pour une informatique libre et sans frontières

SFTP Créez votre stockage en réseau sécurisé

par | Oct 20, 2022 | Linux, Serveur, Tutoriel | 0 commentaires

SFTP pour SSH File Transfer Protocol est un très bon moyen d’avoir un système de fichier en réseau avec une liaison chiffrée par SSH, donc avec un bon niveau de sécurité.

Ici on va comme d’habitude s’intéresser à la mise en place d’un tel système de fichier sur notre serveur. Afin de disposer d’une sauvegarde/stockage dans le « cloud » 😊.

Prérequis

  • Un serveur avec un Linux récent installé et avoir les droits d’administration
  • OpenSSH plus OpenSSH SFTP server installé sur la machine serveur
  • OpenSSH installé sur la machine client

Si comme moi vous êtes sur une distribution basée sur Debian (Ubuntu, Mint, …) il faut lancer la commande suivante sur la machine serveur

sudo apt install openssh-client openssh-server openssh-sftp-server

Sur la machine client c’est la même commande sans les deux dernier paquets

Mise en place

Une fois tout ça installé on vérifie que le serveur SSH tourne correctement.

systemctl status sshd
Service sshd actif

Créer un utilisateur dédié

Maintenant que tout tourne correctement on va créer un utilisateur sur notre machine serveur. En tant que root entrez la commande

/usr/sbin/useradd -d /home/trans_opvpn -G olivier -s /sbin/nologin trans_opvpn

Cette commande crée un utilisateur nommé trans_opvpn lui attribue le répertoire par défaut /home/trans_opvpn l’ajoute au groupe olivier (bien entendu on utilise un groupe qui existe déjà) et surtout lui interdit d’utiliser un shell, ainsi cet utilisateur ne pourra pas se connecter avec SSH mais uniquement utiliser SFTP.

Par mesure de sécurité le répertoire qui va devenir le point d’entrée de la connexion doit appartenir à l’utilisateur root

chown root:root /home/trans_opvpn

Le fichier de configuration

Maintenant on doit éditer le fichier /etc/ssh/sshd_config

On vérifie que la ligne « Subsystem » correspond bien à ce qu’on voit ci-dessous.

# override default of no subsystems
Subsystem       sftp    /usr/lib/openssh/sftp-server

Puis à la fin du fichier on ajoute

Match User trans_opvpn
    ChrootDirectory /home/trans_opvpn/
    ForceCommand internal-sftp
    PasswordAuthentication yes
    PermitTunnel no
    AllowAgentForwarding no
    AllowTcpForwarding no
    X11Forwarding no

Dans le texte ci-dessus on voit la ligne Match User puis le nom de l’utilisateur (ici trans_opvpn) qui indique que seul cet utilisateur va pouvoir se connecter au serveur. Il est aussi possible d’écrire cette ligne Match Group , ainsi tous les utilisateur du groupe spécifié pourront avoir accès au serveur SFTP.

ChrootDirectory quant à lui indique le répertoire dans lequel on va arriver lors de la connexion, ici on lui indique le « home-dir » de l’utilisateur que l’on a défini lors de la création de ce dernier.

Il ne reste plus qu’à appliquer ces changements en restartant (oui je sais ça ce dit pas mais comme je suis un rebelle je le dis quand même) le processus sshd

systemctl restard sshd

Connexion au service

Bon tout ça c’est bien mignon mais il est temps de tester notre service, pour ça on a besoin d’un logiciel client capable de ce connecter à notre serveur. Il en existe plein, perso en mode graphique j’ai utilisé Filezilla à une époque, maintenant j’utilise directement le gestionnaire de fichier Caja de mon environnement de bureau (Mate). Pour ce qui est d’un client en ligne de commande pour faire des scripts j’aime beaucoup lftp car il est très complet.

Test du serveur

Maintenant pour tester si le serveur fonctionne on va se connecter à la boucle locale sur la machine serveur, en utilisant l’outil de base fourni avec .

sftp trans_opvpn@127.0.0.1

Après avoir entré le mot de passe de l’utilisateur trans_opvpn on arrive sur un shell.

First connection to SFTP server

Dans l’image ci-dessus on voit qu’après la connexion j’ai entré la commande help qui donne la liste des commandes possibles dans ce shell. On peut voir des commandes très classiques telles que cd, ls, rm, … mais aussi d’autres plus spécifiques comme put (pour uploader) ou encore get (pour downloader).

Bien ça fonctionne en local sur la machine serveur, et bien maintenant le principe est exactement le même sur la machine client sauf qu’à la place de 127.0.0.1 il faut mettre l’adresse IP du serveur 🙂

sftp trans_opvpn@<IP_machine_serveur>

Connexion en mode graphique

Comme je disais plus haut j’utilise « caja » mais je pense que tous les navigateurs de fichiers un tant soit peu moderne fonctionneront pareil (même sur windows 😁).

connexion au serveur SFTP avec le navigateur de fichier

Ici on entre l’adresse du serveur directement dans la barre d’adresse du navigateur

Il est aussi possible de créer un raccourci (signet)

On choisi de se connecter à un serveur

Puis on renseigne les informations de connexion. Maintenant il sera très facile de se connecter au serveur en cliquant sur le raccourcis.

LFTP

C’est un puissant utilitaire pour se connecter aux serveurs FTP et SFTP, il peut aussi utiliser des protocoles comme HTTP, FTPS, Bittorrent, FISH, … Je pense même qu’en lui demandant poliment il peut même se connecter à la cafetière 😃

Pour l’installer rien de plus simple.

apt install lftp

Par défaut lftp tente de se connecter en ftp donc si on veut un protocole différent il faut le spécifier

lftp -u trans_opvpn sftp://<ip_machine_serveur>/

Une fois connecté, pour avoir la liste des commandes on entre « help »

Menu d'aide de LFTP

Une des commandes que je trouve particulièrement pratique est « mirror », en effet elle permet de copier ou synchroniser récursivement le répertoire distant (sur lequel on est connecté en SFTP) et le répertoire local (là où on a lancé la commande pour se connecter), On note qu’il y a la possibilité de mettre l’option –reverse pour faire le « mirror » dans l’autre sens.

Script de sauvegarde

Ici on va analyser un script qui va sauvegarder des dossiers locaux sur le serveur SFTP

#!/bin/bash    
HOST="sftp://mon_serveur_sftp.eu"
USER="freebox"
PASS="mot_de_passe"
PORT="61666"
DELETE="--delete"
#DELETE=""

dir_local="/home/olivier/"
dir_distant="Save"
dir_lst="images nextcloud projets wordpress archives"

# Make the mirror of a local directory on the FTP
# $1 the local directory
# $2 the SFTP directory
function sync_dir(){
    date
    echo "-------"
    echo "SYNC DIR $1 TO $2"
    echo "-------"
    lftp -p $PORT -u $USER,$PASS -e "lcd $1; mkdir -pf $2; cd $2; mirror --reverse --verbose --no-perms $DELETE;" $HOST
}

for dir in $dir_lst; do
    sync_dir "$dir_local/$dir" "$dir_distant/$dir"
done

Ce script va effectuer des sauvegardes de répertoires, il s’exécute à partir du serveur pour sauvegarder sur un stockage en réseau (ici une clé usb sur ma Freebox) qu’on l’appellera NAS.

Les premières lignes sont des variables donc rien de bien extraordinaire. On notera tout de même DELETE qui est sur 2 lignes, ainsi on peut soit activer l’une ou l’autre. Si c’est celle qui est vide qui est activée alors les fichiers supprimés sur le serveur ne le seront pas sur le NAS

Ensuite vient la fonction sync_dir qui va effectuer la sauvegarde du répertoire sur le serveur vers le NAS Les 4 premières lignes c’est juste de l’affichage pour les log. La ligne vraiment importante est celle qui utilise lftp

Alors bien évidemment les options -p et -u servent pour la connexion, le -e lui exécute une commande :
– lcd $1 pour ‘local change directory » change de répertoire là où est exécuté le script, ici sur le serveur.
– mkdir -pf $2 va créer le répertoire sur le NAS, si celui-ci existe déjà il ne fait rien
– cd $2 On entre dans le répertoire
– mirror –reverse on copie/met à jour le contenu du serveur vers le NAS

Voila qui devrait pas mal aider pour la mise en place d’un serveur SFTP.

0 commentaires

Laisser un commentaire

Rejoins la Newsletter

Sois informé directement des nouveautés du site



Merci pour votre inscription