[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 187.   FUSE: introduzione

FUSE, ovvero File system in user space, è un file system virtuale generico per i sistemi GNU/Linux. In pratica questa funzione è gestita all'interno del kernel Linux, ma il file system virtuale che si ottiene dipende da un programma apposito esterno, che comunica con il kernel secondo il protocollo di FUSE.

Attraverso il meccanismo di FUSE, si evita di dover inserire nel kernel la gestione di ogni tipo di file system (reale o virtuale che sia), lasciando il compito di interfacciarsi con quello a un programma esterno. Inoltre, si danno delle possibilità in più agli utenti, ma per comprendere questa cosa occorre provare.

187.1   Attivazione di FUSE

Nei kernel attuali delle distribuzioni GNU/Linux comuni, la funzionalità di FUSE viene inclusa quasi sempre come modulo; eventualmente occorre intervenire nel menù {File systems}:

Se la funzionalità di FUSE è relegata in un modulo del kernel, occorre provvedere a caricarlo:

modprobe fuse[Invio]

Tuttavia, perché FUSE sia attivo è necessario che sia presente anche un file di dispositivo particolare: /dev/fuse. Se non ci sono sistemi automatici per la gestione dei file di dispositivo, potrebbe essere necessario crearlo la prima volta:

mknod -m 0660 /dev/fuse c 10 229[Invio]

chown root:fuse /dev/fuse[Invio]

Per la gestione di FUSE si utilizza il programma fusermount, che deve essere installato.

I permessi del programma fusermount, assieme a quelli del file di dispositivo /dev/fuse, condizionano la facoltà degli utenti di innestare i file system compatibili con FUSE. Di norma, i permessi potrebbero essere 47508, appartenendo all'utente root e al gruppo fuse:

ls -l /usr/bin/fusermount[Invio]

-rwsr-x--- 1 root fuse ... /usr/bin/fusermount

In questo modo, solo l'utente root e gli utenti associati al gruppo fuse possono eseguire gli innesti. Eventualmente, per consentire a tutti di agire in tal modo, basta aggiungere i permessi di lettura e di esecuzione al programma:

chmod a+rx /usr/bin/fusermount[Invio]

ls -l /usr/bin/fusermount[Invio]

-rwsr-xr-x 1 root fuse ... /usr/bin/fusermount

Inoltre, sempre per consentire a tutti gli utenti di innestare un file system, occorre dare al file di dispositivo /dev/fuse i permessi di lettura e scrittura per tutti:

chmod a+rw /dev/fuse[Invio]

ls -l /dev/fuse[Invio]

crw-rw-rw- 1 root fuse 10, 229 ... /dev/fuse

187.2   Limiti di accesso

Quando si innesta un file system attraverso FUSE, viene sempre usato il programma fusermount, anche se non in modo diretto. Pertanto, come descritto nella sezione precedente, i permessi di questo programma, assieme a quelli del file di dispositivo /dev/fuse, possono limitare agli utenti la facoltà di eseguire tali innesti. Tuttavia, una volta eseguito un innesto, in condizioni normali solo l'utente che lo ha eseguito può accedere alla gerarchia che si articola a partire da quel punto (dalla directory che costituisce il punto di innesto), escludendo anche l'utente root.

Se il file system che si va a gestire con FUSE, contiene informazioni riconducibili a utenze, permessi ed eventualmente numeri inode, possono essere utili delle opzioni di innesto, per far sì che gli accessi siano gestiti in modo più o meno usuale. Sotto vengono elencate le opzioni più comuni, ma dipende dal programma frontale usato il modo in cui vi si fa riferimento effettivamente.

Tabella 187.4. Alcune opzioni comuni relative all'innesto di un file system con FUSE.

Opzione Descrizione
allow_root
Si consente l'accesso all'utente root con tutti i suoi privilegi.
allow_other
Si consente l'accesso anche agli altri utenti.
default_permissions
Si considerano i permessi dei file nel modo consueto.
use_ino
Abilita l'uso dei numeri inode.

Si osservi che, in generale, l'utente comune non può usare l'opzione allow_other, a meno di inserire la direttiva user_allow_other nel file /etc/fuse.conf:

...
user_allow_other
...

Inoltre, è evidente che un utente comune che innesta un file system con FUSE, volendo attribuire le opzioni allow_other e default_permissions, permette sì agli altri utenti di accedere in base ai permessi esistenti, ma i file che vengono creati (ammesso che ci siano tali permessi), appartengono generalmente a un utente prestabilito, che di solito coincide con quello che ha eseguito l'innesto. Infatti, non si deve dimenticare che l'accesso al file system avviene tramite un programma, che generalmente funziona con i privilegi di quel tale utente. Pertanto, le opzioni allow_other e default_permissions sono più utili quando chi esegue l'innesto è proprio l'utente root.

Figura 187.6. Schema intuitivo dell'interazione tra i vari componenti del sistema di FUSE.

FUSE

Esempi di programmi frontali per i file system che si innestano attraverso FUSE sono SSHfs e EncFS.

187.3   Innesto e distacco

In condizioni normali, l'innesto di un file system per il sistema di FUSE, avviene attraverso l'uso diretto del programma frontale che lo gestisce. Di solito si usa uno schema simile a quello seguente:

xyz risorsa punto_di_innesto

Qui, xyz rappresenta il programma frontale ipotetico xyz (probabilmente /usr/bin/xyz). Per esempio, attraverso sshfs, si potrebbe innestare la risorsa brot.dg:/home nella directory /home/, con il comando seguente:

sshfs brot.dg:/home /home[Invio]

Quando il contesto lo consente e quando il programma frontale è stato realizzato con cura, è possibile eseguire l'innesto in modo trasparente, lasciando a mount il compito di avviare il programma frontale appropriato:

mount -t fuse xyz#risorsa punto_di_innesto

L'unico svantaggio di questo approccio sta nella necessità di avere i privilegi dell'utente root. Ecco in che modo si trasforma l'esempio riferito a sshfs:

mount -t fuse sshfs#brot.dg:/home /home[Invio]

Il fatto di poter usare direttamente il comando mount, consente anche di inserire tali informazioni nel file /etc/fstab:

xyz#risorsa punto_di_innesto fuse opzioni 0 0

Sempre riutilizzando l'esempio con sshfs:

...
sshfs#brot.dg:/home    /home    fuse   defaults   0  0
...

Per staccare invece un file system gestito attraverso FUSE, di norma si usa fusermount con l'opzione -u:

fusermount -u punto_di_innesto

Naturalmente si può usare anche umount nel modo consueto, ma in tal caso, di norma occorre avere i privilegi dell'utente root:

umount punto_di_innesto

187.4   Riferimenti

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome fuse_introduzione.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!