SSHFS (SSH File System) est une implémentation d'un système de fichiers dans l'espace utilisateur (FUSE) qui permet aux clients de monter un système de fichiers distant via une connexion SSH. SSHFS utilise le protocole de transfert de fichiers SSH (SFTP) pour monter le système de fichiers distant sur la machine cliente, et les connexions entre le client et le serveur sont sécurisées et cryptées.
SSHFS peut être utilisé comme une alternative au protocole FTP traditionnel. Il est sécurisé par défaut via une connexion SSH et aucun package ou configuration supplémentaire n'est nécessaire. Le SSHFS fonctionne avec une simple configuration SSH par défaut.
Dans ce tutoriel, vous apprendrez à monter un répertoire distant de manière sécurisée à l'aide du SSHFS entre deux machines Linux (client et serveur). Ce guide explique également comment configurer un chroot sur SSHFS qui empêchera les utilisateurs d'accéder aux répertoires d'autres utilisateurs.
Prérequis
Pour suivre ce guide, vous aurez besoin de deux machines Linux, un client et un serveur. Vous pouvez utiliser n'importe quelle distribution Linux et vous assurer que le serveur dispose d'un serveur OpenSSH et que vous avez un utilisateur non root avec les privilèges sudo root.
Installation de SSHFS sur votre ordinateur local
Par défaut, SSHFS Les packages sont disponibles sur la plupart des distributions Linux, y compris Debian/Ubuntu, RHEL/CentOS/Rocky et ArchLinux/Manjaro. Vous pouvez facilement l'installer à l'aide de votre gestionnaire de packages système. Dans cette section, vous allez installer SSHFS sur votre ordinateur local/client.
Tout d'abord, mettez à jour votre liste d'index de packages en exécutant la commande suivante.
# Pour Debian/Ubuntu
sudo apt update
# Pour RHEL/CentOS/RockyLinux
sudo dnf check-update
# Pour ArchLinux /Manjaro
sudo pacman -Syu
Une fois l'index de votre package mis à jour, installez le package SSHFS à l'aide de votre gestionnaire de packages comme ci-dessous. Sur les distributions Debian et Archlinux, le paquet est nommé 'sshfs ', mais sur la distribution basée sur RHEL, le package s'appelle 'fuse-sshfs '.
# Pour Debian/Ubuntu
sudo apt install sshfs
# Pour RHEL/CentOS/RockyLinux
sudo dnf install fuse-sshfs
# Pour ArchLinux/Manjaro
sudo pacman -S sshfs
Vous avez maintenant terminé l'installation du package SSHFS sur votre ordinateur local. Ensuite, vous apprendrez la commande de base pour monter et démonter un répertoire/partition distant sur votre machine locale à l'aide de la commande SSHFS.
De base :monter et démonter à l'aide de SSHFS
Avant de commencer avec la commande SSHFS, assurez-vous que vous disposez d'un serveur Linux sur lequel OpenSSH est activé. Pour l'authentification de l'utilisateur auprès du serveur, vous pouvez utiliser l'authentification basée sur un mot de passe SSH ou l'authentification basée sur une clé SSH. Cependant, vous pouvez envisager d'utiliser l'authentification basée sur une clé SSH, qui est plus sécurisée que l'authentification basée sur un mot de passe.
Dans cette section, vous apprendrez la commande de base de 'sshfs' pour monter un répertoire/partition distant du serveur sur la machine locale/cliente. De plus, vous apprendrez à démonter sshfs de votre machine locale.
1. La commande de base de 'sshfs ' pour monter un répertoire sur la machine locale via le protocole SSH est ci-dessous.
sshfs [email protected] :/distant/répertoire /local/répertoire
En pratique, montez le répertoire distant '/srv/data ' du serveur '172.16.1.10 ' dans le répertoire de la machine locale '~/data '. Cet exemple utilise l'utilisateur SSH 'johndoe'.
sshfs [protégé par e-mail] :/srv/data ~/data
Vous serez maintenant invité à vous authentifier par mot de passe si vous utilisez l'authentification par mot de passe pour votre SSH.
Pour vérifier, exécutez la commande 'ls' dans le répertoire '~/data ' sur la machine locale.
ls -lah ~/data
Vous verrez une liste de fichiers du serveur distant sur votre ordinateur local.
2. Maintenant, pour démonter le répertoire distant de votre machine locale, exécutez la commande 'fusermount ' comme ci-dessous. Cette commande est utilisée pour monter et démonter les systèmes de fichiers FUSE.
fusermount -u ~/data
3. Un autre exemple de 'sshfs ' commande qui pourrait vous intéresser.
La commande 'sshfs' avec l'option de débogage '-d '. Chaque fois que vous rencontrez des problèmes avec la commande 'sshfs', utilisez l'option supplémentaire '-d' pour afficher tous les messages de débogage lors de la connexion au serveur.
sshfs [email protected] :/remote/directory /local/directory -d
Maintenant, si vous utilisez un serveur avec un port SSH non standard, vous pouvez ajouter l'option '-p' suivi de votre port SSH.
sshfs [email protected] :/remote/directory /local/directory -C -p 2222
L'option '-C ' activera la compression, équivalente à l'option '-o compression=yes' dans la commande ssh.
Pour une référence complète, vous pouvez utiliser l'option '--help' ou utiliser la page de manuel SSHFS.
sshfs --help
man sshfs
Configuration de Chroot sur SSHFS
Dans cette section, vous apprendrez comment activer le chroot sur SSHFS, ce qui peut être réalisé en configurant le serveur SSH et en spécifiant l'utilisateur et le répertoire. L'environnement chroot limitera l'accès au répertoire, mais votre utilisateur pourra toujours lire et écrire sur le répertoire de montage.
1. Tout d'abord, vous allez créer un nouveau répertoire chroot pour votre utilisateur et autoriser l'accès en lecture et en écriture. Dans ce guide, vous allez créer un nouveau répertoire partagé "/srv/shared", puis créer un nouveau répertoire personnel et un répertoire de données pour chaque utilisateur.
Exécutez la commande suivante pour créer un nouveau répertoire partagé principal '/srv/shared' et changez la propriété de l'utilisateur et du groupe 'root '.
mkdir -p /srv/shared
sudo chown -R root:root /srv/shared
2. Maintenant, créez un autre répertoire pour chaque utilisateur sous le '/srv/shared' annuaire. Et assurez-vous de changer la propriété de ce répertoire pour l'utilisateur et le groupe 'root '.
mkdir -p /srv/shared/johndoe
sudo chown -R root:root /srv/shared/johndoe
3. Ensuite, créez les 'données ' dans le répertoire personnel de l'utilisateur '/srv/shared/johndoe '. Changez ensuite la propriété de ce répertoire en utilisateur 'root ' et groupe 'johndoe '. Enfin, autorisez le groupe 'johndoe ' pour lire et écrire dans ce répertoire.
mkdir -p /srv/shared/johndoe/data
sudo chown -R root:johndoe /srv/shared/johndoe/data
sudo chmod g+rwx /srv/shared/johndoe/data
Maintenant, vous pouvez monter le répertoire distant '/data ', mais il est équivalent au répertoire '/srv/shared/johndoe/data' sur le serveur.
4. Après avoir créé le répertoire chroot pour votre utilisateur, vous devrez modifier la configuration SSH '/etc/ssh/sshd_config'. Modifiez-le à l'aide de nano ou de votre éditeur de texte préféré.
sudo nano /etc/ssh/sshd_config
Ajoutez les lignes suivantes au fichier.
Subsystem sftp internal-sftp
Match User johndoe
ChrootDirectory /srv/shared/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
La configuration 'internal-sftp ' permettra à SSH d'agir également en tant que serveur SFTP. Définissez ensuite le 'ChrootDirectory ' pour l'utilisateur 'johndoe ' au '/srv/shared/%u ' répertoire. Le '%u ' signifie comme nom d'utilisateur.
Enregistrez et fermez le fichier.
5. Ensuite, exécutez la commande suivante pour vérifier la configuration SSH et assurez-vous que vous n'obtenez pas d'erreurs de syntaxe. Redémarrez ensuite le service SSH pour appliquer une nouvelle configuration.
sudo sshd -t
sudo systemctl restart sshd
6. Maintenant, revenez à la machine client/locale, puis montez le répertoire distant dans l'environnement chroot. Vous devez utiliser le répertoire '/data', au lieu du répertoire de chemin complet '/srv/shared/johndoe/data'. Et vous avez les privilèges de lire, d'écrire et d'exécuter dans le répertoire 'data'.
sshfs [protégé par e-mail] :/data ~/data
Pour vérifier l'accès en écriture, créez un nouveau fichier sur votre ordinateur client à l'aide de la commande suivante.
cd ~/data
echo "Ce fichier de la machine cliente">> another-file.md
Maintenant, de retour sur le serveur, accédez au répertoire '/srv/shared/johndoe/data ', vérifiez le fichier disponible dans ce répertoire.
cd /srv/shared/johndoe/data/
ls
cat another-file.md
Vous verrez le fichier que vous venez de créer à partir de la machine cliente.
Dans cette section, vous avez créé le répertoire chroot pour les utilisateurs SSHFS et configuré le service SSH pour activer le chroot.
Dépannage
Si vous obtenez une erreur sur la connexion SSHFS, vous pouvez dépanner votre connexion en utilisant les méthodes suivantes.
Vous pouvez utiliser le mode débogage avec l'option '-d' . Avec cette option, vous verrez les journaux de votre connexion sur votre terminal shell.
Exécutez le 'sshfs ' avec le mode débogage comme ci-dessous.
sshfs [protégé par e-mail] :/data ~/mnt -d
Vous pouvez également essayer de vérifier le journal SSH sur votre serveur. Avant d'utiliser la commande 'sshfs', ouvrez un nouveau terminal et connectez-vous à votre serveur, puis exécutez la commande 'tail ' pour vérifier le service de journalisation SSH.
Sur le système basé sur Ubuntu/Debian, le journal SSH est disponible à '/var/log/auth.log '. Et pour le système basé sur RHEL/CentOS, le journal SSH est disponible dans '/var/log/secure' .
# Pour Ubuntu/Debian
tail -f /var/log/auth.log
# Pour RHEL/CentOS
tail -f /var/log/secureConclusion
Félicitations ! Vous avez maintenant appris à utiliser SSHFS pour monter un répertoire distant du serveur sur votre machine locale. De plus, vous avez appris à configurer l'environnement chroot sur SSHFS et à dépanner votre connexion SSHFS.