Filesystems condivisi e criptati
by admin on Jun.29, 2009, under Hacking, Linux, Sicurezza
Chi deve frequentemente accedere a computers, tipicamente dei servers, da remoto, per operazioni di manutenzione o monitoraggio, lo fa normalmente a linea di comando, tramite ssh.
Si trova spesso dunque a rimpiangere di non poter utilizzare i propri programmi preferiti sui dati di interesse, e se il loro impiego dovesse proprio rivelarsi irrinunciabile, è obbligato a trasferire i files in locale, e successivamente a ritrasferirli in remoto, dopo averli modificati o elaborati.
Una soluzione generale a questo inconveniente sta nel fare in modo che il server remoto metta a disposizione il proprio filesystem, o porzioni di esso, come filesystem di rete, ovviamente senza rinunciare all’elevato standard di sicurezza garantito da ssh.
In questo post esaminerò due metodi: il primo consiste nell’utilizzare NFS, criptandone il traffico, mentre il secondo, molto più comodo da implementare, consiste nell’utilizzo di SSHFS.
Per poter utilizzare il primo metodo occorre disporre di una versione di software NFS in grado di supportare TCP, cosa del resto molto comune.
Supponendo che il server abbia un indirizzo 192.168.1.11, occorre modificarne il file /etc/exports perché contenga una riga del genere:
/home/nfsusers 127.0.0.1(rw,insecure,root_squash)
dove in pratica viene indicato al server di esportare via nfs la directory indicata verso sè stesso, con le opzioni che sono racchiuse tra parentesi.
Dopo aver fatto rileggere al server la propria configurazione, con:
# exportfs -ra
diviene possibile interrogarlo sulla sua mappatura dei servizi RPC:
# rpcinfo -p 192.168.1.11
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 54434 status
100024 1 tcp 44565 status
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100021 1 udp 60664 nlockmgr
100021 3 udp 60664 nlockmgr
100021 4 udp 60664 nlockmgr
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100021 1 tcp 55390 nlockmgr
100021 3 tcp 55390 nlockmgr
100021 4 tcp 55390 nlockmgr
100005 1 udp 45970 mountd
100005 1 tcp 56778 mountd
100005 2 udp 45970 mountd
100005 2 tcp 56778 mountd
100005 3 udp 45970 mountd
100005 3 tcp 56778 mountd
per poterne ricavare le informazioni necessarie per proseguire con la creazione di due tunnel ssh, uno relativo al servizio TCP nfs e l’altro, sempre TCP, al servizio mountd.
Perciò, sempre a partire dal client, si può dare:
# ssh 192.168.1.11 -L 250:localhost:2049 -f sleep 60m
root@192.168.1.11's password:
# ssh 192.168.1.11 -L 251:localhost:56778 -f sleep 60m
root@192.168.1.11's password:
Il primo comando fa in modo che ssh presente sul client inoltri qualsiasi richiesta diretta alla locale porta 250, attraverso il demone sshd presente sul server, alla porta 2049 (sempre del server). Il secondo comando fa qualcosa di simile per le richieste indirizzate alla locale porta 251, inoltrandole al server sshd, che a sua volta le indirizzerà alla propria porta locale 56778. Il nome localhost è qui relativo al server; ovvero, il forwarding avviene verso il server stesso.
L’ultima opzione, -f sleep 60m, indica al server di attendere per 60 minuti una richiesta di connessione; a questo punto, il forwarding continuerà fino al termine della connessione oppure fino alla scadenza dei 60 minuti.
Se si prevede di collegasi al server con una certa frequenza, i precedenti comandi, opportunamente modificati, potrebbero venire inseriti negli scripts di avviamento del client, subito dopo l’attivazione del networking.
Infine basta impartire:
# mount -t nfs -o tcp -o port=250 -o mountport=251 127.0.0.1:/home/localnfs /mnt
Da questo momento è possibile utilizzare il proprio filemanager preferito per navigare nel filesystem remoto, in tutta sicurezza.
Il secondo metodo, che invece fa uso di SSHFS, è molto più semplice ed immediato, inoltre non necessità di alcun software particolare, sulla macchina remota, che non sia semplicemente il servizio ssh.
SSHFS (Secure SHell FileSystem) è un file system per Linux ed altri sistemi operativi con una propria implementazione di FUSE (Filesystem in Userspace), come Mac OS X o FreeBSD. Sul computer locale, dove SSHFS viene montato, l’ implementazione fa uso appunto del modulo kernel FUSE, mentre sul computer remoto viene usato il sottosistema SFTP di SSH.
L’effetto pratico è che l’utente può interagire coi files remoti, serviti in modo sicuro attraverso SSH, come se fossero files locali.
Una volta installato sul client il pacchetto sshfs, è sufficiente il comando:
# sshfs 192.168.1.11:/opt /mnt
root@192.168.1.11's password:
per poter navigare nell’albero del filesystem remoto relativo a /opt, semplicemente esplorando il mountpoint locale (/mnt).
Per poter correttamente smontare il filesystem:
# fusermount -u /mnt



June 30th, 2009 on 7:28 am