1. Homepage
  2. Articoli
  3. Video
  4. Bash scripting
  5. Sistema
  6. Tips
  7. News


Montare un filesystem remoto con shfs e Debian Sarge

» Author: Andrea Ganduglia Date: 2006-04-29 22:19:06 Copyright: (c)2006 Andrea Ganduglia

Montare un filesystem in remoto può essere molto comodo, perché permette di lavorare sui file della macchina remota come se si fosse in locale. Per farlo ci sono molte possibilità, come NFS o Samba, ma quasi sempre queste soluzioni hanno bisogno di configurazioni sia sul client che sul server, inoltre, la gestione degli utenti e delle password sono spesso faticosi, con ripercussioni non indifferenti sulla sicurezza.

Qualsiasi utente Linux conosce OpenSSH, un insieme di programmi che permettono il trasferimento di file e sessioni crittografate in una rete di computer usando il protocollo SSH. La semplicità d'uso di questo software è stupefacente: basta infatti possedere un account di sistema sulla macchina remota per lavorarvi in tutta sicurezza.

Oggi, grazie a shfs (ssh-file-system), un modulo del kernel Linux, è possibile usare questo protocollo per montare un filesystem remoto, senza che sia necessario impostare preventivamente la macchina server[1].

Installare e configurare shfs

L'installazione su Debian Sarge non presenta grandi difficoltà. Una volta accreditati come root è suffiente installare qualche pacchetto.

sancho:~# apt-get install shfs-source shfs-utils module-assistant

Durante l'installazione vi verrà chiesto se volete permettere via SUID agli utenti di usare shfsmount, e quindi permettergli di montare filesystem remoti via SSH: a voi la scelta!

Ottenuti e installati i pacchetti è necessario costruire il modulo, per farlo però è necessario disporre dei kernel-headers giusti, che possono essere scaricati e installati attraverso dselect.

sancho:~# module-assistant build shfs

L'output del comando dovrebbe essere simile a:

Extracting the package tarball, /usr/src/shfs.tar.bz2
modules/
modules/shfs/
modules/shfs/Linux-2.4/
modules/shfs/Linux-2.4/Makefile
modules/shfs/Linux-2.4/dcache.c
modules/shfs/Linux-2.4/dir.c
modules/shfs/Linux-2.4/fcache.c
modules/shfs/Linux-2.4/file.c
modules/shfs/Linux-2.4/inode.c
modules/shfs/Linux-2.4/ioctl.c
modules/shfs/Linux-2.4/kernel-config.diff
modules/shfs/Linux-2.4/proc.c
modules/shfs/Linux-2.4/proc.h
modules/shfs/Linux-2.4/shell.c
modules/shfs/Linux-2.4/shfs.h
modules/shfs/Linux-2.4/shfs_debug.h
modules/shfs/Linux-2.4/shfs_fs.h
modules/shfs/Linux-2.4/shfs_fs_i.h
modules/shfs/Linux-2.4/shfs_fs_sb.h
modules/shfs/Linux-2.4/symlink.c
modules/shfs/Linux-2.6/
modules/shfs/Linux-2.6/Makefile
modules/shfs/Linux-2.6/dcache.c
modules/shfs/Linux-2.6/dir.c
modules/shfs/Linux-2.6/fcache.c
modules/shfs/Linux-2.6/file.c
modules/shfs/Linux-2.6/inode.c
modules/shfs/Linux-2.6/ioctl.c
modules/shfs/Linux-2.6/kernel-config.diff
modules/shfs/Linux-2.6/proc.c
modules/shfs/Linux-2.6/proc.h
modules/shfs/Linux-2.6/shell.c
modules/shfs/Linux-2.6/shfs.h
modules/shfs/Linux-2.6/shfs_debug.h
modules/shfs/Linux-2.6/shfs_fs.h
modules/shfs/Linux-2.6/shfs_fs_i.h
modules/shfs/Linux-2.6/shfs_fs_sb.h
modules/shfs/Linux-2.6/symlink.c
modules/shfs/Makefile
modules/shfs/debian/
modules/shfs/debian/changelog
modules/shfs/debian/compat
modules/shfs/debian/control
modules/shfs/debian/control.modules.in
modules/shfs/debian/copyright
modules/shfs/debian/rules
modules/shfs/debian/shfs-module-_KVERS_.postinst.modules.in
Done with
/usr/src/shfs-module-2.6.8-2-386_0.35-2+2.6.8-16sarge1_i386.deb .

Ora è necessario installare il modulo che può essere fatto in due modi diversi, sempre con module-assistant

sancho:~# module-assistant install shfs

oppure con dpkg.

sancho:~# cd /usr/src
sancho:/usr/src# dpkg -i shfs-module-2.6.8-2-386_0.35-2+2.6.8-16sarge1_i386.deb 
Selecting previously deselected package shfs-module-2.6.8-2-386.
(Reading database ... 30906 files and directories currently installed.)
Unpacking shfs-module-2.6.8-2-386 (from
shfs-module-2.6.8-2-386_0.35-2+2.6.8-16sarge1_i386.deb) ...
Setting up shfs-module-2.6.8-2-386 (0.35-2+2.6.8-16sarge1) ...

Per essere certi che il modulo sia attivato al boot della macchina:

sancho:~# echo 'shfs' >> /etc/modules

shfs al lavoro

Una delle peculiarità di shfs è che potete montare qualsiasi albero di filesystem sulla macchina remota. Ad esempio potreste montare la root (e avere a disposizione tutto l'albero), oppure una particolare directory, come /var/www, o ancora la $HOME dell'utente ~/.

Ecco un esempio, montiamo l'intero filesystem del host Openclose.it come utente, questa macchima ha sshd che punta alla porta 6456.

sancho:~# mkdir -p /mnt/openclose
sancho:~# shfsmount -P 6456 -s -p gandu@openclose.it:/ /mnt/openclose
Password:
sancho:~# ll /mnt/openclose
total 134
drwxr-xr-x   2 root root  4096 2006-03-29 18:28 bin
drwxr-xr-x   3 root root  4096 2006-03-29 18:33 boot
lrwxrwxrwx   1 root root    11 2005-07-05 14:00 cdrom -> media/cdrom
drwxr-xr-x  11 root root 24576 2005-09-14 14:00 dev
drwxr-xr-x  66 root root  4096 2006-04-04 22:51 etc
drwxrwsr-x   4 root root  4096 2005-07-05 14:00 home
drwxr-xr-x   2 root root  4096 2005-07-05 14:00 initrd
lrwxrwxrwx   1 root root    27 2005-07-05 14:00 initrd.img -> boot/initrd.img-2.6.8-2-386
drwxr-xr-x   8 root root  4096 2005-07-05 14:00 lib
drwxr-xr-x   2 root root 49152 2005-07-05 14:00 lost+found
drwxr-xr-x   4 root root  4096 2005-07-05 14:00 media
drwxr-xr-x   2 root root  4096 2004-12-15 13:00 mnt
drwxr-xr-x   2 root root  4096 2005-07-05 14:00 opt
dr-xr-xr-x  49 root root     0 2005-08-03 14:00 proc
drwxr-xr-x  12 root root  4096 2006-04-27 17:17 root
drwxr-xr-x   2 root root  4096 2006-03-29 18:28 sbin
drwxr-xr-x   2 root root  4096 2005-07-05 14:00 srv
drwxr-xr-x   9 root root     0 2005-08-03 14:00 sys
drwxrwxrwt   2 root root  4096 2006-04-29 20:12 tmp
drwxr-xr-x  12 root root  4096 2005-07-05 14:00 usr
drwxr-xr-x  13 root root  4096 2005-07-05 14:00 var
lrwxrwxrwx   1 root root    24 2005-07-05 14:00 vmlinuz -> boot/vmlinuz-2.6.8-2-386
sancho:~#

Ovviamente ci siamo loggati come gandu, un utente che ha privilegi ristretti su questo filesystem; anche se ls -l riporta che i file sono di root, il nostro utente locale, se proveremo ad agire su quei file saremo gandu sulla macchina remota, che ha ragionevolmente accesso all'albero sotto /mnt/openclose/home/gandu.

shfsmount è dotato di molte caratteristiche interessanti, tra cui la possibilità di risolvere i link simbolici (-s), di preservare la connessione anche in caso questa si interrompa (-p) ed altro che può essere letto con man shfsmount.

Riferimenti


Note al documento

1

Ovviamente è necessario avere su questa un account di sistema e l'accesso SSH.