Par Catageek, dimanche 13 novembre 2005 à la maison :: Gentoo Linux :: Lien permanent
Comment monter un système de fichier situé sur un serveur distant comme si il était local, via SSH ? En utilisant sshfs, un module Fuse pour monter un système de fichier via SSH. Une solution simple pour se passer de ftp ou nfs.
Fuse agissant au niveau du noyau, l'accès aux fichiers distants se fait de manière transparente, via un montage de partition classique. Ce guide est adapté à la distribution Gentoo, en particulier les scripts shell de démarrage et d'arrêt du service.
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_distantsPour 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

Commentaires
1. Le mardi 29 janvier 2008 à la maison, par Cruise
2. Le lundi 18 février 2008 à la maison, par Catageek
S'abonner au fil rss des commentaires de ce billet
Ajouter un commentaire