T12. Estudio de FUSE y NTFS-3G · T12. Estudio de FUSE y NTFS-3G ... Si otro usuario está...

13
T12. Estudio de FUSE y NTFS-3G Diseño y Estructura Interna de un Sistema Operativo Cu... 10 de marzo de 2008 Índice 1. Introducción 1 2. FUSE: Filesystems in Userspace 1 2.1. Introducción ....................................... 1 2.2. Funcionamiento ..................................... 3 2.3. Seguridad ........................................ 4 2.4. Instalación, configuración y uso ............................ 6 2.5. Sistemas de ficheros FUSE ............................... 7 2.6. Implementación de sistemas de ficheros ........................ 8 2.7. Alternativas ....................................... 9 2.8. Conclusiones ...................................... 9 3. NTFS-3G 10 3.1. Introducción a NTFS .................................. 10 3.2. NTFS-3G ........................................ 10 3.3. Instalación y Uso .................................... 11 3.4. Calidad ......................................... 12 3.5. Rendimiento ....................................... 12 3.6. Alternativas ....................................... 13 1. Introducción Introducción FUSE (Filesystems in Userspace) Permite desarrollar y montar sistemas de ficheros que se ejecutan en espacio de usuario NTFS-3G Driver para el sistema de ficheros NTFS para sistemas UNIX, implementado con FUSE. Permite lectura y escritura con seguridad 1

Transcript of T12. Estudio de FUSE y NTFS-3G · T12. Estudio de FUSE y NTFS-3G ... Si otro usuario está...

Page 1: T12. Estudio de FUSE y NTFS-3G · T12. Estudio de FUSE y NTFS-3G ... Si otro usuario está accediendo a archivos o directorios en el sistema de ficheros, el demonio

T12. Estudio de FUSE y NTFS-3GDiseño y Estructura Interna de un Sistema Operativo

Cu...

10 de marzo de 2008

Índice1. Introducción 1

2. FUSE: Filesystems in Userspace 12.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2. Funcionamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.3. Seguridad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.4. Instalación, configuración y uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62.5. Sistemas de ficheros FUSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.6. Implementación de sistemas de ficheros . . . . . . . . . . . . . . . . . . . . . . . . 82.7. Alternativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.8. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3. NTFS-3G 103.1. Introducción a NTFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103.2. NTFS-3G . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103.3. Instalación y Uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.4. Calidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.5. Rendimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123.6. Alternativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

1. IntroducciónIntroducción

FUSE (Filesystems in Userspace)Permite desarrollar y montar sistemas de ficheros que se ejecutan en espacio de usuario

NTFS-3GDriver para el sistema de ficheros NTFS para sistemas UNIX, implementado con FUSE. Permitelectura y escritura con seguridad

1

Page 2: T12. Estudio de FUSE y NTFS-3G · T12. Estudio de FUSE y NTFS-3G ... Si otro usuario está accediendo a archivos o directorios en el sistema de ficheros, el demonio

2. FUSE: Filesystems in Userspace

2.1. IntroducciónIntroducción

En la mayoría de los sistemas operativos, la lógica de los sistemas de ficheros forma parte delnúcleo, y suele implementarse como módulos del mismo

Introducción: ¿Qué es FUSE?Sistemas de ficheros en espacio de usuarioProporcionan los datos y meta datos mediante un proceso en espacio de usuario corriente

El sistema de ficheros se accede utilizando la interfaz del kernel: necesario un módulo en elkernel realice la comunicación entre las aplicaciones y el proceso que implementa la lógica delsistema de ficheros

FUSE (Filesystems in Userspace)Representa todo lo necesario para la implementación (framework) y manipulación de SSFF en espaciode usuario:

Un módulo del kernel, comunicación entre sistema de ficheros y aplicaciones

Una aplicación para realizar el montaje (fusermount)

Una librería, libfuse, que permite la implementación de sistemas de ficheros FUSE

Introducción: ¿Qué es FUSE?Características de FUSE

Sistemas de ficheros ejecutándose en espacio de usuario

Posibilidad de que usuarios sin privilegios pueda montar sistemas de ficheros:

• Sin estar especificado en el fichero /etc/fstab

• Sin pérdida de seguridad para el sistema, aunque limitable como veremos

Librería con API sencilla

Instalación sencilla (no necesita parchear ni recompilar el kernel)

La interfaz entre el espacio de usuario y el kernel es muy eficiente

Funciona con los Kernels de Linux 2.4.X y 2.6.X

Muy estable

2

Page 3: T12. Estudio de FUSE y NTFS-3G · T12. Estudio de FUSE y NTFS-3G ... Si otro usuario está accediendo a archivos o directorios en el sistema de ficheros, el demonio

Introducción: ¿Qué es FUSE?

Características de FUSE (continuación)

Disponible para: Linux, FreeBSD, NetBSD, OpenSolaris y Mac OS X.

Introducido en oficialmente en el kernel de Linux en la versión 2.6.14.

Introducción: ¿Para qué puede servir FUSE?

Múltiples usos:

• Sistemas de ficheros locales y remotos

• Sistemas de ficheros que representen estado: al estilo sysfs o proc

• Dar abstracción de sistema de ficheros: sensores

Ejemplo: sshfsPosibilidad de acceder transparentemente a ficheros remotos almacenados en un servidor con accesossh, montándolo en el sistema de ficheros lógico, sin necesidad de ser el root

2.2. FuncionamientoFuncionamiento

Kernel

VFS

EXT3

NFS

...

FUSE

Espacio de usuarioglibc

ls -l /tmp/fuse

glibc

libfuse

hello /tmp/fuse

? -

6

?�

6

Funcionamiento

El sistema de ficheros se ejecuta como demonio en espacio de usuario

La comunicación entre el sistema de ficheros y el módulo se realiza mediante un descriptor defichero especial que se obtiene abriendo el dispositivo /dev/fuse

• Abierta mientras el demonio está en ejecución o hasta que se desmonta

• Este dispositivo puede ser abierto múltiples veces: múltiples montajes

3

Page 4: T12. Estudio de FUSE y NTFS-3G · T12. Estudio de FUSE y NTFS-3G ... Si otro usuario está accediendo a archivos o directorios en el sistema de ficheros, el demonio

FuncionamientoEjecución del SF

1. Obtiene el descriptor de fichero especial abriendo /dev/fuse

2. Ejecuta fusermount para realizar el montaje

3. Se queda ejecutando un bucle que escucha peticiones desde el módulo del núcleo a través del descriptorde fichero

fusermount:

• Marcado con suid para que usuarios sin privilegios puedan realizar montajes, ya que la llamada alsistema mount es una llamada privilegiada

Módulo del núcleo. Consta de 2 partes:

1. La que responde a las peticiones al fichero de dispositivo/dev/fuse

2. La que implementa las llamadas al sistema de ficheros que le remite el VFS

Funcionamiento

Tipos de sistemas de ficheros FUSE

fuse Tipo más común. El núcleo ignora el primera argumento de la llamada mount. Ejemplo:sshfs

fuseblk Sistemas de ficheros basados en dispositivos de bloques. El primer argumento de lallamada mount es interpretado por el nombre como el nombre del dispositivo (evitar múltiplesmontajes, ...). Ejemplo: NTFS-3G

! ! "#$%& '()*+&), -./01

! !"! #$%&' () '$'*)+,' () -./)0&'

!" #$% &'($% #) %'%&)*!% #) +,-).$% /0) %) (0)#)1 *$1&!. ,$1 23456

!"# 5%&! 7! 8$.*!7 0%0!7 #) *$1&!. %'%&)*!% #) +,-).$% ,$1 23459 57 (.'*). !.:0*)1&$ #)

7! 77!*!#! !7 %'%&)*! $%!&' (0)#) ,$1&)1). 01! ,!#)1! !.;'&.!.'! /0) 1$ )% '1&).(.)&!#!

($. )7 <).1)79 ""( " )% 01 )=)*(7$ #) )%&) &'($ #) %'%&)*!% #) +,-).$%> #?1#) )7 (.'*).

!.:0*)1&$ ,$1&)1#.@! )7 (%"' .)*$&$> )7 0%0!.'$> )7 (0).&$ ! 0&'7'A!. )1 7! ,$1)B'?1 " )7

#'.),&$.'$ ! *$1&!.9

!"#)*+ 57 %'%&)*! #) +,-).$% )%&C ;!%!#$ )1 #'%($%'&'D$% #) ;7$/0)%9 57 (.'*). !.:0*)1&$

#) 7! 77!*!#! !7 %'%&)*! $%!&' )% '1&).(.)&!#$ ($. )7 <).1)7 ,$*$ )7 1$*;.) #)7 #'%($%'&'D$>

7$ /0) -!,) /0) 1$ %) (0)#! *$1&!. )7 *'%*$ #'%($%'&'D$ *C% #) 01! D)A9 EF24GHI )% 01

%'%&)*! #) +,-).$% #) )%&) &'($9

5%&$% #$% &'($% #) %'%&)*!% #) +,-).$% 7$% ($#)*$% D). .):'%&.!#$%> )%&!1#$ )7 *?#07$ #)7

1J,7)$ #) 2345 ,!.:!#$>)1 )7 +,-).$ ,-.%/,0*#"1"'#$"6

!"# $% !&!'() $ * +,-.$+/01"!2!*"3!

444

#.5"6 /&!"

/&!"718

444

!"# $% !&!'()

4) (0)#) D). /0) 7$% %'%&)*!% #) +,-).$% #) &'($ !"# 1$ 1),)%'&!1 #) #'%($%'&'D$9

! ! ! 1&2*,2(& 32 '$'*)+, () -./)0&'

31 %'%&)*! #) +,-).$% )1 2345 %) )=),0&! ,$*$ 01 #)*$1'$ )1 )%(!,'$ #) 0%0!.'$9 57 *?#07$

2345 #)7 <).1)7 " )7 #)*$1'$> /0) 0%! 7! 7';.).@! #) 2345> %) ,$*01',!1 *)#'!1&) 01 #)%,.'(&$.

#) +,-).$ )%(),'!7> )7 ,0!7 %) $;&')1) !;.')1#$ ,2#3, !"#9 5%&) +,-).$ (0)#) %). !;').&$ *J7&'(7)%

D),)%> " )7 #)%,.'(&$. #) +,-).$ $;&)1'#$ %) (!%! ! 7! 77!*!#! !7 %'%&)*! $%!&'> (!.! .)7!,'$1!.

)7 #)%,.'(&$. ,$1 )7 %'%&)*! #) +,-).$% *$1&!#$9 5%&! ,$*01',!,'?1 %) *!1&')1) !;').&! *')1&.!%

)7 #)*$1'$ )%&C )1 )=),0,'?1> $ -!%&! /0) )7 %'%&)*! #) +,-).$% )% #)%*$1&!#$9

K$*$ 7! 77!*!#! !7 %'%&)*! $%!&'45 )% 01! $().!,'?1 (.'D'7):'!#!> (!.! /0) 0%0!.'$% %'1

(.'D'7):'$% (0)#!1 *$1&!. %'%&)*!% #) +,-).$% )% 1),)%!.'! 7! !(7',!,'?1 !"#.$%!&'> /0) %)

'1%&!7! *!.,!#! ,$1 "6!29

L! +:0.! M9N *0)%&.! 7! %),0)1,'! #) 77!*!#!% %'*(7'+,!#! !7 *$1&!. 01 10)D$ %'%&)*!

#) +,-).$% ;!%!#$ )1 23459 L! !(7',!,'?1 #)7 %'%&)*! #) +,-).$%> )1 (.'1,'('$ )=),0&C1#$%)

)1 (.'*). (7!1$> 77!*! ! 7! 801,'?1 !"#7$86& #) 7! 7';.).@! #) 23459 5%&! 801,'?1 ,.)! 01

(!. #) ,$1),&$.)% O"%/+#' &'($ 3EPQR> *)#'!1&) "%/+#'-86.> (!.! 7! ,$*01',!,'?1 )1&.) 7$% #$%

(.$,)%$% .)%07&!1&)% #)7 %.+9 57 (.$,)%$ (!#.) .)%07&!1&) O,$1 SPT UR> 7) (!%! ! !"#.$%!&' )1 7!

D!.'!;7) #) )1&$.1$ 9:;<7=>??9@7<AB )7 ,$1),&$. (!.! ,$*01',!.%) ,$1 )7 (.$,)%$ -'=$9

5%&) (.$,)%$ (!#.)> !7 )=),0&!. !"#.$%!&' O.),$.#)*$%> *!.,!#$ ,$1 "!62R> (0)#) .)!7'A!. 7!

77!*!#! !7 %'%&)*! $%!&'9 F!*;'V1 (0)#) !;.'. )7 +,-).$ ,2#3, !"#> " )7 #)%,.'(&$. #) +,-).$

$;&)1'#$ %) 7$ (!%! !7 (.$,)%$ -'=$ *)#'!1&) )7 ,$1),&$. ,.)!#$ !1&)% O801,'?1 "#&27 2R9 S$.

J7&'*$> &).*'1! %0 )=),0,'?19 S$. %0 (!.&)> )7 (.$,)%$ -'=$ OSPT WR .),';) )7 #)%,.'(&$. #) +,-).$

)1D'!#$ ($. )7 (!#.) O.#/#63#7 2R " (!%! ! )=),0&!.%) )1 %):01#$ (7!1$ O28#$%&R9

X

2.3. SeguridadConsideraciones de Seguridad

Si usuarios sin privilegios tienen la capacidad de realizar montajes de sistemas de ficheros,FUSE debe asegurar que:

• No pueda ser usada para poner en peligro el sistema

• El autor del montaje no pueda ser capaz de obtener privilegios elevados, con la ayuda deun sistema de ficheros montado.

• El autor del montaje no pueda tener acceso ilegítimo a información de los procesos deotros usuarios o del súper usuario.

• El autor del montaje no pueda ser capaz de inducir un comportamiento indeseable de losprocesos de otros usuarios o del súper usuario

4

Page 5: T12. Estudio de FUSE y NTFS-3G · T12. Estudio de FUSE y NTFS-3G ... Si otro usuario está accediendo a archivos o directorios en el sistema de ficheros, el demonio

Consideraciones de Seguridad

Ejemplo de uso mal intencionado

Tenemos el siguiente programa:

!"! #$%&'()*

!"! ! #$%&'()% *' +,-.$/)') ,( 0123

!"! #$ %& '!"$()&*! $( +& #$'',-( ./01 +& 23,"$3& 4 "5# !67,& *$ +&# '!(#,*$3&',!($# *$

#$893,*&* :9$ ;<=> %& *$ )$($3 $( '9$()& $# :9$ +& '&2&',*&* *$ 2!*$3 "!()&3 #,#)$"&# *$

?'%$3!# (! 29$*& #$3 9#&*& 2!3 9( 9#9&3,! #,( 23,7,+$8,!# 2&3& 2!($3 $( 2$+,83! $+ #,#)$"&/ <(& *$

+&# @!3"&# $( +&# :9$ 9( 9#9&3,! 2!*3A& 2!($3 $( 2$+,83! $+ #,#)$"& #$3A& 2!*$3 $B$'9)&3 &2+,'&',!C

($# "&3'&*&# '!( !"# 23!2,$*&* *$ !)3! 9#9&3,! $( $+ (9$7! #,#)$"& *$ ?'%$3!# "!()&*!/ >#)$

$B$"2+! $# 9(& *$"!#)3&',-( *$ :9$ ;<=> ),$($ $( '9$()& $#)&# '!(#,*$3&',!($# *$ #$893,*&*1

(! )$(,$(*! $( '9$()& +&# &2+,'&',!($# "&3'&*&# '!( "!# '9&(*! $# $B$'9)&*&/ D$#)&'&"!# &#A

+& #$893,*&* '!"! 9(! *$ +!# 29()!# @9$3)$# *$ ;<=>/

E&3& $++!1 3$&+,F&"!# 9(& 2$:9$G& &2+,'&',-( :9$ 3$&+,F& 9(& !2$3&',-( :9$ #!+! $+ $%%& 2!*3A&

$@$')9&3/ >( $#)$ '&#! '&"6,&3 +!# 2$3",#!# 4 "&3'&3 '!( "!# 9( &3'%,7! *$+ #,#)$"&1 '!"! 2!3

$B$"2+! +& &2+,'&',-( '"&#%()/ >+ '-*,8! *$ $#)& 2$:9$G& &2+,'&',-( $# $+ #,89,$()$H

456%)!4

+,-.(/0% #)*,!/%

+,-.(/0% #4#I)42$#/%

+,-.(/0% #4#I#)&)/%

,-1 "&,(J,-1 &38'1 .234 ∗ &387KLM

N

,5J'%"!*J !"#$%!"&'()*+% 1 =OP=<PD | QRRRMM23,()@J ,* "- .')$-/*% 012#$1/ 3*" .-/2$"*"\% MS

T

>#)$ 23!83&"& ,"23,",35 2!3 2&()&++& 9( "$(#&B$ #, (! '!(#,89$ '&"6,&3 +!# 2$3",#!# *$+

&3'%,7! * +!)* '"&#%()/

U '!(),(9&',-(1 3$&+,F&"!# 9(&# "!*,?'&',!($# "A(,"&# *$+ $B$"2+! &()$3,!3 2&3& :9$ $+

'!()$(,*! *$+ &3'%,7! ',--% #$& $+ 23!83&"& &()$3,!3 '!"2,+&*! 4 "&3'&*! '!( "!#/ E&3& $++!1

'!"2,+&"!# $+ 23!83&"& &()$3,!31 +! '!*,?'&"!# $( %$V&*$',"&+ 9),+,F&(*! &+89(& &2+,'&',-(

'!"! ',./0& 4 +! ,()3!*9',"!# '!"! '!()$(,*! *$+ &3'%,7! :9$ '!()$(*35 (9$#)3! #,#)$"& *$

?'%$3!#1 '!"! #$ "9$#)3& $( +&# +A($&# .W & .X *$+ #,89,$()$ '-*,8!

/

E&3& "&3'&3 $+ &3'%,7! *$ (9$#)3! #,#)$"& *$ ?'%$3!# '!( "!# "!*,?'&"!# +& +A($& 0W *$+

$B$"2+! &()$3,!3 J+A($& 0R *$+ '-*,8! #,89,$()$M1 '!"! #$ "9$#)3&H

!" #$%&' #$()*+, - .(/0123 .(/.4/5 6"""7

>+ '-*,8! 3$#9+)&()$ *$ (9$#)3! (9$7! #,#)$"& *$ ?'%$3!# #$ +,#)& & '!(),(9&',-(H

+5.7)%8(!4

*

1%#!2/0/!%) #, ',--%3/

8*9 :* ;:$9*+&<;9 =>?;:@# AA,:@# +, :B),9*# C,D@+,<;)@A,# #, *);$, @E&F ,A <*:$,:;+* +, A*# GH +,A =9*?9@)@I

.X

Lo compilamos e introducimos en un sistema de ficheros FUSE, propiedad del usuario root ymarcado con suid.

Sin tener privilegios, lo montamos, y ejecutamos el programa anterior.

Consideraciones de Seguridad

Ejemplo de uso mal intencionado

!"! #$%&'()*

!"#$ % &"''()!"#$*

+,

!! !" "#$%& !" #'()* #$%& #'(+,-.

-

+%,-+. ./0")1#234#!56* #!57* 8&"''()(9"!:,

+

;2 6(192'#1(0 < "="6/>#1(0 "' 6?$25( #3>"!2(! (@>"3$!"1(0 '( 025/2"3>"A

!"# $%&'!()* +,-./!"-"0"123'!4 1 5" !(/&6'7#

8$$ 9: 33 ;2589$'#.)8 ./!" 99$.3 8! 993)*!; !(/&6'7#<$ 9' !(/&6'7#

!"# $%&'!()* +,-./!"-"0"123'!4 156)= -&12-./!"

!"# $%&'!()* +,-./!"-"0"123'!4 <-!(/&6'7# -&12-./!"-

!"# $%&'!()* +,-./!"-"0"123'!4 3! 93 -&12-./!"-

&'& 3 >

9=7!=7?=7? @ =''& =''& AB@> @CD>9>@9>@ >@+>> ("33'

!"# $%&'!()* +,-./!"-"0"123'!4 -&12-./!"-("33'

E' !" 2/6)"='# $ 1*) = 3'! 2"=1)!'!

!"# $%&'!()* +,-./!"-"0"123'!4

B(1( 7"1(0* 9"0" # #9#!"6"! "' #!6&27( !""# 6(1( "="6/>#@'" < 6(3 $%&'* #' "="6/>#!'( 3( 0"

&#6" "."6>27( "' 6#1@2( $" /0/#!2( < 3( 9($"1(0 (@>"3"! 9!272'"52(0 $" '(0 C/" 3( $209(3"1(0,

"3 "0>" 6#0(* 6#1@2#! '(0 9"!120(0 $" /3 #!6&27( 9!(92"$#$ $"' (##)

!"!#! $%&'()* +& ,-,.&'/ +& 012&3*, 456$ &7 89.2*7

D 6(3>23/#62?3 0" 1/"0>!# "' 1201( "="19'( 720>( #3>"!2(!1"3>" 219'"1"3>#$( "3 *+) #,

2&))*!(9

-./%$(/0&,/!,1 2+) #,

- 3#2+(&4 ) 536 7889 :,'(!; <)(=; $)(=;>=,?=$)(=;@A#>

-

/ !"#$ %&'(&)* +), -. /#$0&#-10./ 1,/.& 0". 0.&*$ '2 0". 345 63768

- <!! ) ! B"! 3C*DEFG@

-

/&')+, (0* 0>#>* "!!3(

! %199 #, $'*. $%)(".00# 0' *):. 0"#$ $01; <'&: <#0"'10 21$. %= -.#,( #,$0)99./

,+01

/&')+, )E3$)./0")9#!>0

%23%', F19(!>G!!(!A

'4**

/ '()&" 0123

HI

Como vemos, pese a estar marcado con suid, este no se hace efectivo al ejecutar el programa.Esta es una de las consideraciones de seguridad obvias que FUSE tiene en cuenta.

Consideraciones de Seguridad

Posibles usos mal intencionados a tener en cuenta

El autor del montaje podría obtener elevados privilegios:

1. creando un sistema de ficheros que contenga un archivo de dispositivo, y después abriendoel dispositivo,

2. creando un sistema de ficheros que contenga una aplicación marcada con suid o sgid, yejecutando esa aplicación.

Si otro usuario está accediendo a archivos o directorios en el sistema de ficheros, el demoniopuede grabar la secuencia exacta de las operaciones realizadas.

Múltiples formas por las que el autor del montaje puede inducir un comportamiento indeseadoen los procesos de otros usuarios.

5

Page 6: T12. Estudio de FUSE y NTFS-3G · T12. Estudio de FUSE y NTFS-3G ... Si otro usuario está accediendo a archivos o directorios en el sistema de ficheros, el demonio

Consideraciones de Seguridad

Soluciones adoptadas por FUSE

Ficheros de dispositivos o con suid se ignoran si el autor del montaje es un usuario sin privile-gios.

No se puede montar sobre directorios sobre los que no se tengan privilegios.

Un usuario no puede acceder a sistemas de ficheros montados por otro usuario. Esta medida sepuede relajar con la opción de configuración users_allow_other.

Adicionalmente:

Grupo fuse. Sólo usuarios del grupo pueden ejecutar fusermount. Ej: Ubuntu

2.4. Instalación, configuración y usoInstalación

Disponible como paquetes para algunas distribuciones.

• Ej: En Ubuntu hay tres paquetes disponibles:

◦ fuse-utils: Contiene la aplicación fusermount◦ libfuse2: Librería de FUSE◦ libfuse-dev: Cabeceras para el desarrollo de SSFF FUSE◦ Instalados por defecto a partir de la versión 7.10

Bajando y compilando el código con: configure, make y make install

Configuración: /etc/fuse.conf

Actualmente, sólo dos opciones (una por línea):

• user_allow_other Esta opción permite que los usuarios puedan utilizar la opción de mon-taje allow_other, que permite a cualquier usuario acceder al sistema de ficheros montadocon esta opción. Recordemos que esta era una limitación de seguridad impuesta por de-fecto.

• mount_max=N Limita el número máximo de montajes realizados mediante FUSE.

Uso

Un sistema de ficheros FUSE es un proceso corriente =⇒ ejecutado como una aplicación nor-mal:

• Montar: ssff punto-de-montaje [-o opciones-de-montaje]

• Desmontar: fusermount -u punto-de-montaje

Opciones de montaje:

6

Page 7: T12. Estudio de FUSE y NTFS-3G · T12. Estudio de FUSE y NTFS-3G ... Si otro usuario está accediendo a archivos o directorios en el sistema de ficheros, el demonio

• fd=N Indica el descriptor de fichero empleado para la comunicación entre el proceso delsistema de ficheros en espacio de usuario y el kernel. Debe ser obtenido abriendo el dis-positivo de FUSE (/dev/fuse).

• rootmode=M Permisos de la raíz del sistema de ficheros en octal.

• user_id=N El uid del propietario del montaje.

• group_id=N El gid del propietario del montajes.

Uso

Opciones de montaje (continuación):

• default_permissions Activa la comprobación de permisos según las restricciones de losarchivos.

• allow_other Esta opción relaja la medida de seguridad que restringe el acceso al sistemade ficheros montado por un usuario a otros usuarios. Esta opción, por defecto, solo puedeutilizarla el root, pero puede eliminarse la restricción mediante la opción de configuraciónuser_allow_other.

• max_read=N Tamaño máximo de las operaciones de lectura.

• blksize=N Tamaño de bloque del sistema de ficheros. Sólo con sistemas de ficheros detipo fuseblk.

2.5. Sistemas de ficheros FUSESistemas de ficheros FUSE

NTFS-3G Controlador eficiente para NTFS que permite lectura y escritura. Existen otras im-plementaciones del sistema de ficheros NTFS basadas en FUSE.

EncFS Sistema de ficheros encriptado en espacio de usuario.

OWFS (One Wire File System) Permite ver sensores, botones y chips de memoria como unsistema de ficheros. Los dispositivos se incluyen en el directorio dinámicamente, y sus propie-dades, como temperatura, se obtienen leyendo un archivo.

SshFs Sistema de ficheros basado en el protocolo SSH File Transfer Protocol.

Sistemas de ficheros FUSE

FuseIso Módulo para montar imágenes ISO9660. Permite montar imágenes de CD al estilo delas unidades virtuales de utilidades Windows.

FuseSmb Sistema de ficheros cliente para el protocolo SMB.

FatFuse Implementación del sistema de ficheros FAT en espacio de usuario. Actualmente solopermite lectura.

Gnome VFS2 Fuse Permite montar en el sistema de ficheros virtual de Linux rutas del siste-ma de ficheros virtual de Gnome (Gnomo VFS2), haciendo accesibles los ficheros a cualquieraplicación, aunque no implemente un cliente de Gnome VFS. (Ej: SSH, FTP, SAMBA)

7

Page 8: T12. Estudio de FUSE y NTFS-3G · T12. Estudio de FUSE y NTFS-3G ... Si otro usuario está accediendo a archivos o directorios en el sistema de ficheros, el demonio

Sistemas de ficheros FUSE

FUSEPod Sistema de ficheros virtual para el acceso a dispositivos IPod.

MysqlFs Sistema de ficheros que almacena los archivos en bases de datos MySql.

GitFs Proporciona acceso de lectura a repositorios GIT, mostrándolos como una estructura deficheros y directorios.

CvsFs Muestra el contenido de repositorios de código CVS como un sistema de ficheros.

XmlRpcFs Permite la lectura y escritura de directorios remotos mediante XML-RPC.

2.6. Implementación de sistemas de ficherosImplementación de sistemas de ficheros

FUSE proporciona librería en C. Desarrollo principalmente en C

También hay disponibles proyectos que permiten el desarrollo de sistemas de ficheros FUSE enRuby, Perl, Phyton, C# o Java

• libfusefs-ruby

• libfuse-perl

• python-fuse

• FUSE-J

• ...

Implementación de SSFF en C

Un sistema de ficheros FUSE escrito en C consta básicamente de:

• Una estructura de tipo fuse_operations que relaciona las distintas peticiones que se reali-zan sobre el sistema de ficheros con la función que implementa a cada una de ellas.

• Una llamada al bucle de FUSE (fuse_loop ó fuse_main) que escucha las peticiones queenvía el módulo del núcleo a través del descriptor de fichero especial.

Implementación de SSFF en Cstruct fuse_operations {

int (∗getattr) (const char ∗, struct stat ∗);int (∗readlink) (const char ∗, char ∗, size_t);int (∗mknod) (const char ∗, mode_t, dev_t);

5 int (∗mkdir) (const char ∗, mode_t);int (∗unlink) (const char ∗);int (∗rmdir) (const char ∗);int (∗symlink) (const char ∗, const char ∗);int (∗rename) (const char ∗, const char ∗);

10 int (∗link) (const char ∗, const char ∗);int (∗chmod) (const char ∗, mode_t);int (∗chown) (const char ∗, uid_t, gid_t);int (∗truncate) (const char ∗, off_t);int (∗open) (const char ∗, struct fuse_file_info ∗);

15 int (∗read) (const char ∗, char ∗, size_t, off_t, struct fuse_file_info ∗);int (∗write) (const char ∗, const char ∗, size_t, off_t,

struct fuse_file_info ∗);int (∗statfs) (const char ∗, struct statvfs ∗);int (∗flush) (const char ∗, struct fuse_file_info ∗);

20 int (∗release) (const char ∗, struct fuse_file_info ∗);int (∗fsync) (const char ∗, int, struct fuse_file_info ∗);int (∗setxattr) (const char ∗, const char ∗, const char ∗, size_t, int);int (∗getxattr) (const char ∗, const char ∗, char ∗, size_t);

8

Page 9: T12. Estudio de FUSE y NTFS-3G · T12. Estudio de FUSE y NTFS-3G ... Si otro usuario está accediendo a archivos o directorios en el sistema de ficheros, el demonio

int (∗listxattr) (const char ∗, char ∗, size_t);25 int (∗removexattr) (const char ∗, const char ∗);

int (∗opendir) (const char ∗, struct fuse_file_info ∗);int (∗readdir) (const char ∗, void ∗, fuse_fill_dir_t, off_t,

struct fuse_file_info ∗);int (∗releasedir) (const char ∗, struct fuse_file_info ∗);

30 int (∗fsyncdir) (const char ∗, int, struct fuse_file_info ∗);void ∗(∗init) (struct fuse_conn_info ∗conn);void (∗destroy) (void ∗);int (∗access) (const char ∗, int);int (∗create) (const char ∗, mode_t, struct fuse_file_info ∗);

35 int (∗ftruncate) (const char ∗, off_t, struct fuse_file_info ∗);int (∗fgetattr) (const char ∗, struct stat ∗, struct fuse_file_info ∗);int (∗lock) (const char ∗, struct fuse_file_info ∗, int cmd,

struct flock ∗);int (∗utimens) (const char ∗, const struct timespec tv[2]);

40 int (∗bmap) (const char ∗, size_t blocksize, uint64_t ∗idx);};

Depurando un SSFF

Montando el sistema de ficheros con la opción -d, la aplicación se ejecuta en primer planomostrando por pantalla información sobre las peticiones realizadas al sistema de ficheros y suresultado:

!"! #$%&' (&)*+&+,-./ 0, 1(1-+&. 2+ 345+/'1 4', 6789:

!"#$%& "' ()"*+, !"' #-.,!, +*/0(/+1' !" 0)"%.*, +*,2*1#1 !"3" (*"1* '1 /0%.10(/1 !"'

%/%."#1 !" 4(5"*,%& 6 51("* '1 ''1#1!1 1' #-.,!, !"# !"' #/%#,& (,#, %" 51(71 "0 ',% %/%."#1%

!" 4(5"*,% /#+'"#"0.1!,% "0 8& 5"*"!1!, !" '1 ('1%" 9:;<=

8,#, %" 51 >/%.,& 1 '1 5,*1 !" +*,2*1#1*& %" .*1.1 (1%/ )0/(1#"0." !" )0 (1#3/, !" %/0.$?/%

6 !" '1 /0.*,!)((/@0 !" '1 ,*/"0.1(/@0 1 ,3A".,%B +"*, '1% ''1#1!1% 1' %/%."#1 !" 4(5"*,%& 1%7 (,#,

'1 "A"()(/@0 !" )0 3)('" C)" *"(/3" '1% +"./(/,0"% !"' #@!)', !"' D"*0"' "0 '1 E)0(/@0 !"# !"

9:;<& "% /2)1' +1*1 8 6 $%&'(#=

<0 '1 %"((/@0 F=G=H %" #)"%.*1 )0 %/%."#1 !" 4(5"*,% !" "A"#+', /#+'"#"0.1!, "0 $%&'(#=

!"!#! $%&'()*+, '* -.-/%0) +% 123%(,-

8,0 9:;< +,!"#,% !"+)*1* 0)"%.*, %/%."#1 !" 4(5"*,% !" #10"*1 %"0(/''1& +1*1 /!"0./4(1*

+,%/3'"% "**,*"% (,#"./!,% "0 '1 /#+'"#"0.1(/@0= I1%.1 (,0 "A"().1* "' %/%."#1 !" 4(5"*,% (,0 '1

,+(/@0 )* J*+,-.K& C)" 51*$ C)" %" "A"()." "0 +*/#"* +'10, #,%.*10!, +,* +10.1''1 '1 %"()"0(/1

!" ''1#1!1% *"1'/L1!1% %,3*" "' #/%#,= M,!"#,% 1%7& #,0/.,*/L1* '1 "A"()(/@0 !"' %/%."#1 !"

4(5"*,%=

M,* "A"#+',& %/ "A"().1#,% "' %/%."#1 !" 4(5"*,% !" "A"#+', (,0 "%.1 ,+(/@0 ,3."0!*"#,% '1

%/2)/"0." /0E,*#1(/@0 !" /0/(/1'/1(/@0 !"' %/%."#1 !" 4(5"*,%N

!"# $% !&!'()*+,)-&!"#*-!./)"0"+,12!3 4)5"112 )*+,)-&!") 67

&#89&"' :; 2,$27"' <=<> ?@AB; #27"87' C; 8#!8D"' EA

<=<>' F4G

-1 /!HCICCCCCCC.

+ IJK" 7 5" 7HCICCC@CCCC

<=<>' F4G

-1 /!HCICCCCCCCC

+ IJK" 7 5" 7HCICCC@CCCC

+ IJLK8*"HCICCC@CCCC

&#89&"' :; "KK2K' C ?M&$$"!!B; 2&*!8D"' NC

&#89&"' @; 2,$27"' OP>Q>>R ?.B; #27"87' :; 8#!8D"' NC

&#89&"' @; "KK2K' C ?M&$$"!!B; 2&*!8D"' ::@

&#89&"' .; 2,$27"' QSSPMM ?.NB; #27"87' :; 8#!8D"' NG

QSSPMM ) CN

&#89&"' .; "KK2K' 6.G ?T&#$*82# #2* 8+,1"+"#*"7B; 2&*!8D"' :A

5,*1 %/ *"1'/L1#,% )0 '/%.1!, !"' !/*"(.,*/, !,0!" 51 %/!, #,0.1!, "' %/%."#1 !" 4(5"*,% J/0

1& 213-0+K& ,3."0!*"#,% '1 %/2)/"0." /0E,*#1(/@0N

&#89&"' N; 2,$27"' OP>Q>>R ?.B; #27"87' :; 8#!8D"' NC

&#89&"' N; "KK2K' C ?M&$$"!!B; 2&*!8D"' ::@

&#89&"' E; 2,$27"' OP>Q>>R ?.B; #27"87' :; 8#!8D"' NC

&#89&"' E; "KK2K' C ?M&$$"!!B; 2&*!8D"' ::@

&#89&"' A; 2,$27"' UVP=W<R ?@FB; #27"87' :; 8#!8D"' NG

&#89&"' A; "KK2K' C ?M&$$"!!B; 2&*!8D"' .@

&#89&"' F; 2,$27"' OP>Q>>R ?.B; #27"87' :; 8#!8D"' NC

&#89&"' F; "KK2K' C ?M&$$"!!B; 2&*!8D"' ::@

&#89&"' G; 2,$27"' RPQWW<R ?@GB; #27"87' :; 8#!8D"' AN

&#89&"' G; "KK2K' C ?M&$$"!!B; 2&*!8D"' ::@

FO

2.7. AlternativasAlternativas a FUSE

Otros sistemas de ficheros en espacio de usuario

LUFS: idea muy similar a FUSE

AVFS: permite montar archivos empaquetas o comprimidos, y sistemas de ficheros remotos

Gnome VFS: sistemas de ficheros remotos accesibles a aplicaciones de Gnome

UserFS: procesos de usuario como sistemas de ficheros

2.8. ConclusionesConclusiones

Sistemas de ficheros en espacio de usuario ≈ idea de micronúcleo:

• Servicios se construyen sobre el micronúcleo y se ejecutan en espacio de usuario, siendoel micronúcleo el que implementa la comunicación entre cliente y servicio.

9

Page 10: T12. Estudio de FUSE y NTFS-3G · T12. Estudio de FUSE y NTFS-3G ... Si otro usuario está accediendo a archivos o directorios en el sistema de ficheros, el demonio

No es necesario incrementar el tamaño del núcleo para añadir nuevos sistemas de ficheros.

Seguridad es un requisito indispensable a tener en cuenta al permitir que usuarios sin privilegiospuedan montar sistemas de ficheros con FUSE.

FUSE reduce considerablemente la complejidad de la implementación de nuevos sistemas deficheros. Programación a nivel de núcleo mucho más compleja.

Rápido crecimiento =⇒ sistema de ficheros virtual

3. NTFS-3G

3.1. Introducción a NTFSIntroducción: NTFS

Sistemas operativos Microsoft, a partir del NT

Nombres largos en Unicode, ficheros largos, compresión transparente, cifrado, buen rendimien-to

Bloque lógico: direcciones de 8 bytes, tamaño entere 512 bytes y 64 Kbytes

Fichero = conjunto de atributos. Al menos dos: nombre y flujo de datos principal o anónimo

Varios flujos de datos por fichero, con nombre, accesibles individualmente mediante nombre-fichero:nombre-flujo

MFT (Master File Table): estructura de datos principal, sucesión lineal de registros de 1 Kbyte

Master File Table

Cada entrada representa un archivo. Si es muy grande o fragmentado múltiples registros en latabla.

Directorios pequeños = ficheros con lista desordenada de entradas. Directorios grandes = ár-boles B+

3.2. NTFS-3GNTFS-3G

Objetivo del proyecto: dar soporte fiable a diversos SSOO

Driver para Linux, FreeBSD, NetBSD y Mac OS X, para NTFS

Permite lectura y escritura con seguridad: No soporta ficheros encriptados, y sólo lectura encomprimidos

Soporta la mayoría de operaciones POSIX, excepto listas de acceso

Implementado mediante FUSE (tipo fuseblk) =⇒ SF en espacio de usuario

10

Page 11: T12. Estudio de FUSE y NTFS-3G · T12. Estudio de FUSE y NTFS-3G ... Si otro usuario está accediendo a archivos o directorios en el sistema de ficheros, el demonio

No necesita módulo del kernel adicional, a parte del de FUSE

Consta de:

• Librería libntfs-3g con la lógica del sistema de ficheros NTFS

• Aplicación ntfs-3g implementa el sistema de ficheros FUSE: estructura fuse_operations yllamada a fuse_loop

NTFS-3G

3.3. Instalación y UsoInstalación

Disponible como paquete para muchas distribuciones: alrededor de 100 distribuciones de Linuxy FreeBSD que incluyen NTFS-3G como paquete binario para una fácil instalación

Ubuntu 7.10 lo incluye como controlador por defecto para NTFS

Para otras distribuciones o para actualización a la última versión descargable y compilable conconfigure, make y sudo make install.

La instalación por defecto no permite montar a usuarios sin privilegios.

Uso

Montar

Ejecutando: ntfs-3g /dev/sda1 /mnt/windows

o bien: mount -t ntfs-3g /dev/sda1 /mnt/windows

o añadiendo en /etc/fstab: /dev/sda1 /mnt/windows ntfs-3g defaults 0 0

Desmontar

Ejecutando: umount /mnt/windows

o bien: fusermount -u /mnt/windows

11

Page 12: T12. Estudio de FUSE y NTFS-3G · T12. Estudio de FUSE y NTFS-3G ... Si otro usuario está accediendo a archivos o directorios en el sistema de ficheros, el demonio

Opciones (-o)

Opciones típicas: uid, gid, fmask, dmask, umask, ro

Opciones comunes de todos los SSFF FUSE.

Otras opciones relevantes:

• locale: idioma

• show_sys_files: hace visibles los metadatos de NTFS

• streams_interface: configura el acceso a los flujos de datos alternativos

• silent: ignora operaciones chown y chmod

3.4. CalidadCalidad

Fiabilidad es el principal objetivo del proyecto. Gran cantidad de pruebas, con las ntfsprogs, algu-nas de ellas:

Creación de 13.000 archivos en un directorio y comprobación de la consistencia del directoriodespués de cada creación.

Eliminación de 13.000 archivos de un directorio y comprobación de la consistencia del direc-torio después de cada eliminación.

Eliminación de todos los archivos de una imagen real NTFS.

Renombrado de todos los archivos de una imagen real NTFS.

Creación, acceso, listado y eliminación de 1.000.000 de archivos de un único directorio.

Calidad

Escritura concurrente en un archivo grande en muchas posiciones.

Escritura de ficheros grandes en volúmenes muy fragmentados.

Uso de archivos de intercambio (swap) y arranque de Linux sobre NTFS.

Comprobación de la consistencia después de desmontar volúmenes después de una gran activi-dad.

Operaciones aleatorios sobre ficheros en discos llenos.

El driver y las utilidades son testeados a su vez con Valgrind.

12

Page 13: T12. Estudio de FUSE y NTFS-3G · T12. Estudio de FUSE y NTFS-3G ... Si otro usuario está accediendo a archivos o directorios en el sistema de ficheros, el demonio

3.5. RendimientoRendimiento

Aunque el principal objetivo sea la fiabilidad, el rendimiento es un requisito tenido en cuenta

• A corto plazo, ofrecer rendimiento similar al resto de SSFF

• A largo plazo, alcanzar límites teóricos de rendimiento

NTFS-3G no optimizado aún

Random File Operation Sequential RandomFile Num Seeks

systemFiles Create Lookup Delete File Size Write Rewrite Read/sec %cpu /sec %cpu /sec %cpu K/sec %cpuK/sec %cpu K/sec %cpu /sec %cpu

ext3 16k 36316 78 65486 100 1G 36623 9 18805 6 41193 4 180.6 0reiserfs 16k 20499 100 17113 99 1G 37768 14 19266 6 40730 6 190.8 0reiser4 16k 17352 99 17401 99 1G 37537 5 19721 7 38991 5 197.6 0

ufs 16k 9670 100 14569 100 1G 42737 4 20203 5 42220 5 204.3 0hfs+ 16k 9557 99 14220 99 1G 42860 4 19782 5 43454 6 203.4 0ext2 16k 3706 99 18838 99 1G 41511 4 19113 5 42623 5 192.5 0

ntfs-3g 16k 3629 4 14562 7 4057 3 1G 36483 6 16652 4 40792 2 130.6 0jfs 16k 2851 16 954 4 1G 41003 7 20006 6 42490 5 193.9 0xfs 16k 272 1 197 1 1G 40905 6 19905 6 42192 4 178.5 0

fat32 16k 85 99 113 99 200 99 1G 42324 9 20228 7 42102 4 187.1 0

3.6. AlternativasAlternativas a NTFS-3Gntfsmount

Incluido en ntfsprogs (http://www.linux-ntfs.org)

Más características que las incluidas en el módulo del kernel

También implementado con FUSE

Soporta sobre escritura de archivos, pero tiene limitaciones al crear y eliminar archivos y directorios

Era el driver NTFS por defecto hasta la versión 7.04 de Ubuntu

Proyecto del que se separó NTFS-3G

Captive NTFS

También implementado con FUSE. Antes utilizaba LUFS

Soporte completo y fiable de escritura

Utiliza el driver original ntfs.sys de Windows XP

Proyecto no mantenido

FUSE (Filesystems in Userspace)http://fuse.sourceforge.net/

NTFS-3Ghttp://www.ntfs-3g.org/

13