Résumé

Nous avons une machine distante à laquelle nous voulons accéder, mais celle-ci n'offre que le service ssh, à l'exclusion de tout autre service. Nous allons voir comment accéder aux fichiers de cette machine d'une manière quasi transparente.

Le cas de Konqueror

Si vous utilisez KDE, c'est très simple : ouvrez Konqueror et tapez dans la barre d'adresse :

fish://login@host

ou login est votre nom de login distant et host est le nom, ou l'adresse IP, de la machine distante.

Plus d'info sur le protocole fish

L'avantage est que ici nous avons un accès direct aux fichiers sans avoir rien fait. C'est du vrai Plug N'Play. Mais seul Konqueror accède à ces fichiers. comment faire pour que tous les programmes puissent accéder à ces fichiers ?

sshfs-fuse

Nous allons utiliser sshfs-fuse. Fuse est un LKM qui permet de monter un système de fichier dans l'espace utilisateur. sshfs est une application adaptée au protocole ssh.

Tout d'abord, installons le package :

# emerge -av sshfs-fuse

sshfs-fuse est peut-être masqué, dans ce cas : (remplacez ~amd64 par ~x86 si vous utilisez cette architecture)

# echo sys-fs/sshfs-fuse ~amd64 >> /etc/portage/package.keywords
# echo sys-fs/fuse ~amd64 >> /etc/portage/package.keywords

Chargez le module dans le noyau :

# modules-update
# modprobe fuse

Pour monter le système de fichier :

# mkdir /mnt/distant
# sshfs login@host /mnt/distant
Password:
#

Et voilà ! on vérifie :

# mount
(sortie coupée)
sshfs#login@host:/ on /mnt/distant type fuse (rw,nosuid,nodev,max_read=65536)
#

Pour démonter le système de fichier :

# umount /mnt/distant

Plus d'options

Par défaut, le système de fichier monté avec sshfs n'est accessible que par l'utilisateur qui l'a monté, root ou un autre utilisateur. Comment faire pour que les autres utilisateurs aient accès ?

sshfs propose plusieurs options pour gérer les utilisateurs et les droits d'accès. Commençons par créer le fichier /etc/fuse.conf :

# echo user_allow_other >> /etc/fuse.conf

Ce paramétrage permet à tout utilisateur de pouvoir partager son point de montage avec tout le monde. Pour mettre en pratique cette propriété, il faut utiliser l'option allow_other de sshfs. De plus, si nous voulons que les droits d'accès soient contrôlés, nous ajoutons également l'option default_permissions :

# sshfs -o allow_other,default_permissions login@host /mnt/distant
Password:
#

Maintenant, tout le monde peut accéder au système de fichier /mnt/distant, du moment qu'il dispose des droits nécessaires, et quelque soit l'utilisateur ayant monté le système de fichier. Attention, ce sont les id utilisateurs qui sont utilisés pour vérifier ces droits, et non les login.

Et les simples utilisateurs ?

Il n'est pas nécessaire d'être root pour monter un système de fichier. La seule condition à respecter est d'avoir accès en écriture au point de montage. Par exemple :

# chmod a+rwx /mnt/distant

ou bien :

# chown username:usergroup /mnt/distant

ou encore un simple utilisateur exécutera :

$ mkdir ~/fichiers_distants
$ sshfs [-o allow_other,default_permissions] login@host ~/fichiers_distants

Pour démonter le système de fichier :
# fusermount -u /mnt/distant

Sécurisation

nous voulons maintenant monter un système de fichier qui sera accessible par tout le monde. Pour ne pas utiliser le compte root pour faire cette opération, nous créons un utilisateur spécial sshfs qui ne pourra être utilisé que pour lancer le programme sshfs :

# adduser --system --disabled-login --no-create-home \
 --home / --shell /usr/bin/sshfs

Nous donnons le dossier /mnt/distant à l'utilisateur sshfs :

# chown sshfs:root /mnt/distant

Pour monter le système de fichier en étant root, nous préférons maintenant faire :

# su - sshfs -o allow_other,default_permissions login@host /mnt/distant
The authenticity of host 'host (192.168.0.2)' can't be established.
RSA key fingerprint is 60:69:10:70:21:c4:13:48:7e:19:7e:0e:a5:ea:34:68.
Are you sure you want to continue connecting (yes/no)? yes
Password:
#

Pour ne pas avoir à confirmer à chaque fois la clé d'authentification du serveur distant, nous copions le fichier ~/.ssh/known_hosts vers /etc/ssh/ssh_known_hosts :

cp ~/.ssh/known_hosts /etc/ssh/ssh_known_hosts

Automatisation

Ecrivons un script qui lancera le service sshfs et montera automatiquement la système de fichiers :

# cat /etc/init.d/sshfs <<END
#!/sbin/runscript

depend() {
       need net
}

start() {
       modprobe fuse
       su - sshfs -o allow_other,default_permissions root@host:/ /mnt/distant
}

stop() {
       fusermount -u /mnt/distant
}

restart() {
       stop
       start
}
END

Utilisation

Pour monter le système de fichiers :

# /etc/init.d/sshfs start

Pour démonter :

# /etc/init.d/sshfs stop