Libertonia
Portada · Todo · Software Libre · Desarrolladores · Comunidad · Internet · Tecnología · Meta · Diarios
Listas de Control de Acceso (ACLs) para ext2/ext3 (III)

Kernel
Por iarenaza
departamento hasta-el-infinito-y-mas-alla , Sección Tecnología
Puesto a las Thu Apr 24th, 2003 at 01:28:04 PM CET
Con un retraso mayor de lo esperado, aquí llega la tecera entrega del serial Linux y ACLs. Si en la primera entrega vimos los fundamentos de las AEs, las ACLs y las ACEs, y en la segunda entrega vimos como parchear y compilar todo lo necesario para tener la infraestructura básica para el uso de ACLs en marcha, en esta tercera entrega veremos como usarlas en la práctica.

 


Una vez que hemos compilado el kernel con soporte para ACLs y que hemos compilado las herramientas necesarias para poder trabajar con ellas (además de parchear aquellas utilidades de gestión de ficheros y sistemas de ficheros para que reconozcan las ACLs y las respeten y sepan interpretarlas), podemos ya dedicarnos a la gestión de las propias ACLs en si.

Para ello disponemos de dos utilidades principalmente:

  • getfacl: que nos permite consultar las ACLs de un fichero dado.
  • setfacl: que nos permite modificar las ACLs de un fichero dado.

Ambas utilidades se hayan perfectamente documentadas en sus respectivas páginas del manual (setfacl(1) y getfacl(1)), y podemos encontrar una pequeña introducción en la página del manual de acl(5), vamos a ver aquí algunos ejemplos sencillos que ilustrarán el uso básico de estas utilidades.

Creación de una ACL básica.

Existen casos en los cuales el tradicional juego de pemisos UGO (User, Group, Others) no es suficiente. Casos en los que desearíamos que más de un usuario o más de un grupo pudiese tener acceso a un fichero, pero con permisos diferenciados. Con el modelo UGO esto no es posible, puesto que sólo tenemos sitio para los permisos de un único Usuario o un único Grupo. Todo lo demás cae en el Other (el resto). Con las ACLs esto es sencillo.

Vamos a presuponer que tenemos un directorio que contiene una serie de ficheros y dos subdirectorios (a su vez con ficheros) como se indica en la figura disponible aquí (ubicada en un sitio externo por limitaciones de scoop).

Tenemos asimismo los siguiente tipos de usuarios diferenciados:

  1. Los usuarios del grupo de sistemas de información, que deben tener acceso completo a todos los directorios y ficheros, para su mantenimiento. Llamaremos a este grupo sistemas.

  2. Los usuarios del grupo de desarrollo (llamaremos a este grupo desarrollo), que deben tener acceso de lectura y escritura (y ejecución en su caso) en el primer subdirectorio y todos sus ficheros y subdirectorios. En este directorio es donde se desarrollan las nuevas versiones del software que usa el tercer grupo.

    Asi mismo debe tener acceso de lectura/escritura al segundo de los subdirectorios para implantar las nuevas versiones estables del software.

  3. Los usuarios de explotación. Este grupo debe tener acceso en modo lectura (y eventualmente ejecucion) sobre los ficheros de la aplicacion. Llamaremos a este grupo explotacion.

  4. El resto de usuarios del sistema no deben tener ningún tipo de acceso a ninguno de los ficheros o subdirectorios.

Con las condiciones anteriores es imposible usar el modelo de permisos tradicional UGO, puesto que tenemos tres grupos de usuarios diferentes, sin contar el resto de usuarios del sistema. Eso significa que con un sólo grupo de usuarios con permisos asignados por directorio o fichero no es posible acomodar los permisos para los tres grupos.

Utilizando ACLs es fácil resolver el problema, puesto que podemos asignar un juego de permisos diferente para cada grupo de usuarios. Para ello debemos crear las ACLs necesarias para cada grupo de usuarios y directorio o fichero.

  1. Tenemos que dar permisos completos al grupo de sistemas sobre todos los ficheros y directorios implicados. Para ello usamos setfacl de la siguiente forma:

    	  setfacl -b -k -R dir_raiz
    	  setfacl -R -m g:sistemas:rw
    	

    Vayamos por partes con la sintaxis de setfacl:

    • En el primer caso usamos la opcion -b para borrar la ACL que ya pudiera tener el directorio raíz. Usamos también la opción -k para borrar la ACL por defecto que pudiera tener el directorio raíz (más sobre esto después), y por último usamos la opción -R para aplicar los cambios de forma recursiva a todo lo que cuelga del directorio raíz. Con esto conseguimos tener todo limpio y listo para empezar.

      Teóricamente la primere vez no hace falta limpiar la ACL puesto que aún no hemos asignado ninguna ACE, pero de paso aprovechamos para mostrar como se hace :)

    • En el segundo caso indicamos de nuevo que queremos aplicar de forma recursiva los cambios (opción -R) pero esta vez le decimos que queremos modificar (-m) la ACL del objeto en cuestión. En este caso es necesario además indicar el valor de la ACE que deseamos añadir o modificar. setfacl distingue entre asignar una ACL (opción -s) en la cual se eliminan las ACEs existentes y se añade la ACE especificada en la orden, y modificar una ACL (opción -m) en la cual podemos modificar o añadir una ACE.

      En este caso queremos añadir una nueva ACE. Para ello debemos escribimos la ACE que nos interesa:

      	      g:sistemas:rw
      	    

      Todas las ACEs tienen tres componentes separadas por ':' (en el caso de las operaciones de borrado de ACEs el tercer componente es opcional). El primero de los componentes indica si se trata de un ACE de usuario (valor u) o de grupo (valor g). Incluso es posible asignar ACEs al grupo de usuarios resto (other), pero esto no suele ser habitual, así que omitiremos la sintaxis (se pueden encontrar más detalles en la página del manual de setfacl(1)).

      El segundo de los componentes es el nombre de usuario o grupo al que se le aplica la ACE. Se puede dar el nombre simbólico o el valor numérico del uid o gid correspondiente. El tercer componente es el valor del permiso asociado a esta ACE, y puede ser una combinación cualquiera de las letras r, w, x y -, o un valor numérico octal (como en chmod).

      Por tanto, en nuestro caso tenemos que es una ACE de grupo (g), que se aplica al grupo de sistemas y que le estamo dando los permisos de lectura y escritura (rw).

  2. A continuacion tenemos que dar permisos al grupo de desarrollo tanto en el directorio subdir_1 y todo su contenido, como en el directorio subdir_2 y todo su contenido. Sin embargo no tenemos que dar acceso a los ficheros que cuelgan directamente de dir_raiz. Para ello usamos setfacl con la sintaxis explicada en el punto anterior:

    	  setfacl -R -m g:desarrollo:rw dir_raiz/subdir_1
    	  setfacl -R -m g:desarrollo:rw dir_raiz/subdir_2
    	
  3. Por último tenemos que dar permisos al grupo de explotación en el directorio subdir_2 y todo su contenido:

    	  setfacl -R -m g:explotacion:rx dir_raiz/subdir_2
    	

Lo normal en este punto es comprobar cuales son los permisos reales que tienen cada uno de los ficheros y directorios existentes, para ver si efectivamente se ajustan a los requisitos planteados.

Para ello podemos usar getfacl para ver cuales son las ACL de cada uno de los directorios o ficheros implicados. La sintaxis es sencilla:

      getfacl fichero ...

    

Si lo usamos para ver el resultado de las órdenes anteriores tenemos:

      # getfacl dir_raiz

      # file: dir_raiz
      # owner: root
      # group: root
      user::rwx
      group::r-x
      group:sistemas:rw-
      mask::rwx
      other::r-x
    

El listado de permisos que obtenemos al ejecutar getfacl se compone de entradas de tipo user y group, además de las entradas para mask y other. En el caso de las entradas user y group, tendremos siempre una entrada para el propietario del fichero y el grupo del fichero (son las líneas que no indican un usuario o grupo concreto) y tantas líneas adicionales como ACEs de ese tipo hayamos asginado al fichero o directorio. La entrada other es la entrada del permiso tradicional other del modelo UGO.

La entrada mask es especial. Esa entrada, que se puede manipular con setfacl permite especificar el máximo de permisos que se pueden asignar en dicho fichero con las ACEs de usuario y grupo.

Veamos ahora las ACL del resto de ficheros y directorios:

# getfacl dir_raiz/fich*
# file: dir_raiz/fich_1
# owner: root
# group: root
user::rw-
group::r--
group:sistemas:rw-
mask::rw-
other::r--
# file: dir_raiz/fich_2
# owner: root
# group: root
user::rw-
group::r--
group:sistemas:rw-
mask::rw-
other::r--

# getfacl dir_raiz/dir_1
# file: dir_raiz/dir_1
# owner: root
# group: root
user::rwx
group::r-x
group:sistemas:rw-
group:desarrollo:rw-
mask::rwx
other::r-x

# getfacl dir_raiz/dir_1/fich*
# file: dir_raiz/dir_1/fich_3
# owner: root
# group: root
user::rw-
group::r--
group:sistemas:rw-
group:desarrollo:rw-
mask::rw-
other::r--
# file: dir_raiz/dir_1/fich_4
# owner: root
# group: root
user::rw-
group::r--
group:sistemas:rw-
group:desarrollo:rw-
mask::rw-
other::r--

# getfacl dir_raiz/dir_2
# file: dir_raiz/dir_2
# owner: root
# group: root
user::rwx
group::r-x
group:sistemas:rw-
group:desarrollo:rw-
group:explotacion:r-x
mask::rwx
other::r-x

# getfacl dir_raiz/dir_2/fich*
# file: dir_raiz/dir_2/fich_5
# owner: root
# group: root
user::rw-
group::r--
group:sistemas:rw-
group:desarrollo:rw-
group:explotacion:r-x
mask::rw-
other::r--
# file: dir_raiz/dir_2/fich_6
# owner: root
# group: root
user::rw-
group::r--
group:sistemas:rw-
group:desarrollo:rw-
group:explotacion:r-x
mask::rw-
other::r--

ACLs por defecto.

Todo lo anterior está muy bien, pero tiene un problema: los ficheros y directorios nuevos que se creen no van a tener todas esas ACLs con los valores adecuados, y por tanto tendremos que estar cada dos por tres ajustando los valores de las ACLs con las órdenes anteriores. Evidentemente eso no es operativo en absoluto. En nuestra ayuda llegan las ACLs por defecto (en realidad habría que hablar de ACEs por defecto, pero la documentación habla de ACLs por defecto, así que mantendremos la misma terminología para no crear más confusión).

Las ACLs por defecto nos permiten indicar cuál es el juego de ACEs que queremos que se apliquen automáticamente a los nuevos ficheros y directorios que se creen dentro de un directorio dado. Se dice en estos casos que los permisos se heredan desde el directorio padre.

La sintaxis es idéntica a la de una ACE normal, con la diferencia de que debemos usar además la opción -d:

      setfacl -d -m g:sistemas:rw dir_raiz
      setfacl -d -m g:desarrollo:rw dir_raiz/dir_1
      setfacl -d -m g:desarrollo:rw dir_raiz/dir_2
      setfacl -d -m g:explotacion:rw dir_raiz/dir_2
    

Si usamos getfacl para ver la ACL del directorio raíz por ejemplo, tenemos lo siguiente:

      # getfacl dir_raiz
      # file: dir_raiz
      # owner: root
      # group: root
      user::rwx
      group::r-x
      group:sistemas:rw-
      mask::rwx
      other::r-x
      default:user::rwx
      default:group:sistemas:rwx
      default:group::r-x
      default:mask::rwx
      default:other::r-x
    

Es decir, se añaden una serie de ACEs especiales, de tipo default que contienen la información a utilizar para los nuevos ficheros y directorios que se creen dentro de éste.

Y aquí concluye la tercera parte de la saga. Para la cuarta y última parte tengo previsto hablar de como compilar SAMBA para que use las ACLs nativas del sistema, de forma que podamos ofertar recursos compartidos 100% compatibles con los sistemas de Microsoft en cuanto a características de seguridad.

Hablaré asimismo del demonio winbind, que nos permite integrar las cuentas de un dominio NT/2000 en nuestro sistema, sin tener que dar de alta dichas cuentas en local (las crea de forma automágica al vuelo). Con estas dos características podremos crear un sistema que remplace un servidor de ficheros NT/2000 de forma 100% transparente, con un rendimiento igual o superior al de este (especialmente en el caso de usar raid por software para el sistema de disco). Y con una estabilidad y precio a años luz de la solución Microsoft.

Para un futuro más lejano puede que escriba un miniartículo sobre los atributos extendidos, su manejo y posibilidades. Los atributos extendidos son el bloque fundamental para poder implementar las ACLs, pero permiten en general asociar cualquier tipo de atributos definidos por el usuario a los ficheros (en realidad a los i-nodos). De esta forma es posible por ejemplo codificar el tipo MIME de los ficheros en dichos atributos y hacer así innecesario el uso de extensiones de ficheros y heurísticas para determinar el tipo de contenido y sistema de codificación del mismo para un fichero dado.

Hasta entonces, permanezcan atentos a sus liberto-pantallas. Y no olviden supervitaminarse y supermineralizarse :)

Saludos. Iñaki.

< Paquetes Binarios para Gentoo Linux (4 comments) | aiX, que daño! (15 comments) >
Enlaces Relacionados
· Scoop
· escomposlinux.org
· la primera entrega
· la segunda entrega
· setfacl(1)
· getfacl(1)
· acl(5)
· la figura disponible aquí
· More on Kernel
· Also by iarenaza

Menu
· crear cuenta
· FAQ
· búsqueda
· Fuentes de Noticias

Login
Nueva cuenta
Usuario:
Contraseña:

Ver: Modo: Orden:
Listas de Control de Acceso (ACLs) para ext2/ext3 (III) | 6 comentarios (6 temáticos, editoriales, 0 ocultos)
Sobre la compatibilidad con Hasefroch (3.25 / 4) (#1)
por sinner a las Fri Apr 25th, 2003 at 03:38:00 AM CET
(Información Usuario) http://www.escomposlinux.org/sinner/

Requetebuenas,

Parece que este artículo va a servirme para tener al mini-BOFH ocupado durante una temporada. Esperemos que no se de cuenta que todo esto es para Linux y no para OpenBSD... Si lo hago por su bién: necesita foguearse con el BSD y este artículo, traducido via Babelfish, le va a ir de perlas. MWHAHAHAHAHA.

Eso so, hay un punto que no entiendo. Cuando dices que "podamos ofertar recursos compartidos 100% compatibles con los sistemas de Microsoft en cuanto a características de seguridad.", ¿quieres significar que cualquier user con el bit de scriptkiddie activado nos va a juaquear la partición? ¿es aquí donde interviene el exploit local de Samba? ¿tu vida académica te ha distanciado tanto de la realidad que piensas que Hasecorp = Seguridad?

Como diría Mr. T "You, fool! What's all this jibba-jabba?"

Gracias por el artículo. Ya tengo otro juguete para meterle a sandbox03.


Salut,
Sinner


--
Sinner from the Prairy
Pogüered bai Mandrake
BOFHers Syndicate http://bofhers.org


HaseCorp, seguridad y otras gaitas. (3.00 / 1) (#5)
por iarenaza a las Tue Apr 29th, 2003 at 09:49:45 PM CET
(Información Usuario) http://www.escomposlinux.org/

Eso si, hay un punto que no entiendo. Cuando dices que "podamos ofertar recursos compartidos 100% compatibles con los sistemas de Microsoft en cuanto a características de seguridad.", ¿quieres significar que cualquier user con el bit de scriptkiddie activado nos va a juaquear la partición? ¿es aquí donde interviene el exploit local de Samba? ¿tu vida académica te ha distanciado tanto de la realidad que piensas que Hasecorp = Seguridad?
Se puede ser irónico, se puede ser socarrón, se pueden hacer bromas al respecto e incluso se puede uno negar a ver la realidad, pero la realidad es terca y persiste.

Fallos de implementación aparte (que los hay en todos los lados), el sistema de seguridad del servicio de ficheros de los sistemas operativos profesionales de HaseCorp está muy por encima de lo que ofrece linux de serie. Guste o no, es objetivamente así. Es más granular, es más fácil de gestionar y es más completo.

La diferencia está en el sistema de ACLs. Y a eso es a lo que me refiero con lo de poder ofertar el servicio de ficheros con las mismas características de seguridad. El modelo de permisos UGO, que es lo único que samba puede ofertar sin soporte adicional de ACLs del kérnel, es muy limitado en algunos tipos de entornos (por ejemplo el mío).

En cuanto a lo de mi vida académica, entraré parcialmente al trapo diciendo que la diferencia no está tanto en el producto en sí (que también, si es basura, es basura) sino en lo competente del administrador. Sea producto Hasecorp o sea no Hasecorp. Yo al menos lo tengo muy claro.

Saludos. Iñaki.

[ Padre ]


ACLs no necesariamente más seguras (4.00 / 2) (#6)
por jcantero (jcantero@agujero-negro.escomposlinux.org) a las Wed Apr 30th, 2003 at 01:02:45 PM CET
(Información Usuario) http://www.escomposlinux.org/jcantero/

De esta conversación va a a parecer que las ACLs las inventaron en Redmon, Seattle. Nada más lejos de la realidad.

Las ACLs son bastante más antiguas que el modelo simplificado de UNIX. Que es simplificado porque se creó para sistemas más pequeños (como los originales en los que funcionó).

Por otro lado, el sistema UGO no es de por sí malo o poco seguro. Es más simple, y por lo tanto más fácil de controlar. Si tu sistema no requiere una complejidad adicional de seguridad, usar ACLs no va a aumentarla. O dicho de otro modo, sigue el principio KISS (Keep Is Simple, Stupid).

Las ACLs dan mucha potencia en el campo de los permisos, y la potencia adicional ya sabe lo que puede traer si no se conoce/maneja adecuadamente: problemas. O como decía aquel anuncio de ruedas: "la potencia sin control, no sirve de nada.

--
"Papá, ¡Internet es más que una red pornográfica global!" -- Lisa Simpson
[ Padre ]


 
Soporte ACL no incluido en Red Hat 9 ?? (3.00 / 1) (#3)
por Rivies a las Tue Apr 29th, 2003 at 09:34:35 PM CET
(Información Usuario)

Primero felicitar al autor por el artículo.

Es muy interesante para implementarlo con samba.

Pero Según Red Hat, en Notas de última hora de Red Hat Linux 9 apartado Notas del Kernel dice :

"Nota especial: El soporte ACL añadido al kernel en los primeras dos lanzamientos beta demostrarón ser inestable y causar que el kernel retrocediera. Red Hat por lo tanto ha eliminado el soporte ACL delkernel para Red Hat Linux 9. Los ingenieros del Kernel continuaran trabajando para mejorar el soporte ACL, el cual estará disponible para futuras entregas. Los paquetesattr y acl necesitados para soportarACLs están todavía incluidos para hacer las cosas más fáciles para usuarios y desarrolladoresque deseen probar ACLs. Red Hat puede, a nuestra discreción, proporcionar el soporte para ACL paraesta entrega de Red Hat Linux con fines de actualización, si las pruebas futuras demuestran que el soporte para ACL ha mejorado lo suficiente su calidad."

Perdonen mi ignoracia, ¿ pero se puede probar ACLs sin tener el soporte en el nucleo ?.

Saludos.



La respuesta es fácil (3.00 / 1) (#4)
por iarenaza a las Tue Apr 29th, 2003 at 09:41:31 PM CET
(Información Usuario) http://www.escomposlinux.org/

Perdonen mi ignoracia, ¿ pero se puede probar ACLs sin tener el soporte en el nucleo ?.
En una palabra: no.

Saludos. Iñaki.

[ Padre ]


 
muy bueno (2.00 / 1) (#2)
por JulHer a las Fri Apr 25th, 2003 at 06:05:22 PM CET
(Información Usuario)

Lo pongo en mi lista de marcadores para estudiarlo en el verano, que es cuando tendré algo de tiempo.

Un saludo



 
Listas de Control de Acceso (ACLs) para ext2/ext3 (III) | 6 comentarios (6 temáticos, editoriales, 0 ocultos)
Ver: Modo: Orden:

ecol Logo Powered by Scoop
Todas las Marcas Registradas y copyrights de esta página son propiedad de sus respectivos dueños.
Los comentarios son propiedad del que los escribe.
Los iconos de las noticias y el logotipo son propiedad de Javier Malonda.
El Resto © 2002 Escomposlinux.org y aledaños.

Puedes sindicar los contenidos de libertonia en formato RSS 1.0 y RDF 0.9. También se puede sindicar la cola de envíos pendientes de moderación.

El proyecto escomposlinux.org está dedicado a la memoria de tas

crear cuenta | faq | búsqueda