ACLExtension: Permisos de grano fino en Mercurial

Cómo usar ACLExtension para aplicar seguridad de grano fino

ACLExtension: Permisos de grano fino en Mercurial

1. Introducción

Cuando publicamos un repositorio Mercurial y habilitamos la posibilidad de realizar push es muy habitual que necesitemos también controlar qué usuarios van a poder utilizar este comando. Aunque por defecto, Mercurial nos permite esto, el control sobre el repositorio lo podemos considerar de grano grueso ya que únicamente podremos decidir si un usuario puede subir o no sus cambios.

Mercurial permite añadir funcionalidades nuevas a través Extensiones. Actualmente tenemos a nuestra disposición un gran número de ellas, se encuentran dividas en dos grupos: aquellas que son mantenidas por Mercurial (se distribuyen con él) y extensiones desarrolladas por terceros qué deberán ser instaladas manualmente para poder utilizarlas.

Entre el abanico tan amplio existe una extensión llamada ACLExtension que nos permitirá aplicar permisos de grano fino a nuestro repositorios. Con esta extensión seremos capaces de controlar cosas como: quién puede realizar un branch, quién tiene permisos de escritura, quién puede hacer push sobre un determinado fichero, etc.

Os recomiendo que os leais «Publicar un repositorio Mercurial con Apache» ya que este tutorial es una ampliación de él. Todas las rutas y ficheros que hagamos referencia serán los utilizados en ese tutorial.

2. Entorno

Entorno utilizado para escribir este tutorial:

  • Hardware: VirtualBox 3.2.8 corriendo sobre un Mac Book Pro (Core 2 Duo 2,8 Ghz, 4 GB RAM, 500 GB)
  • Sistema Operativo: Ubuntu 64 bits 10.04 LTS
  • Mercurial: 1.6.3
  • Python: 2.6.1
  • Wsgi: 2.8.2

3. Habilitar una extensión

El proceso de activación de una extensión en Mercurial es muy sencillo. Sólo debemos añadir la extensión a la sección «extensions» de nuestro fichero de configuración de Mercurial. En nuestro caso en lo añadiremos a /var/hg/repositories/adictos-repo/.hg/hgrc que es el fichero de configuración de nuestro repositorio y quedaría algo como:

[extensions]  
acl=

Por cada extensión que queremos activar debemos añadir su alias y el path del script de nuestra extensión. Esto último lo debemos hacer si la extensión no se encuentra en los path de Mercurial o de Python. Como en nuestro caso la extensión ACL es interna a Mercurial no debemos añadir el path. Un ejemplo de activación de una extensión que no se encuentra en esos paths sería:

[extensions]  
myextension=/home/adictos/.hgext/myextension.py 

Es muy importante que el fichero hgrc sea propietario el usuario con el que estamos ejecutando Mercurial. En nuestro caso como estamos bajo un Apache sería www-data. Si no hacemos esto la configuración de extensiones, hooks y demás cosas no funcionaran.

4. Utilizando ACLExtension

Habilitada la extensión nos tocaría configurarla. Lo primero de todo es indicar a Mercurial cuales son las operaciones sobre el repositorio que van a ser controladas por nuestra extensión. La forma de realizar esto es utilizando hooks. Con los hooks seremos capaces de que Mercurial ejecute determinadas acciones cuando se produzca un determinado evento en el repositorio.

En nuestro caso vamos a vigilar los comandos de commit, push, pull, bundle y serve por tanto necesitamos añadir a nuestro fichero de configuración lo siguiente:

[hooks]  
pretxncommit.acl = python:hgext.acl.hook  
pretxnchangegroup.acl = python:hgext.acl.hook  

ACLExtensions tiene varias secciones para su configuración:

  • [acl]: sección donde se indica la fuente sobre la que se aplica las restricciones. Los valores posible son serve (http o ssh), push, pull y bundle. En nuestro caso al utilizar un acceso por http debemos configurar serve.
  • [acl.groups]: permite definir grupos internos de usuarios.
  • [acl.deny.branches]: en esta sección se restringe el acceso a las ramas.
  • [acl.allow.branches]: se configura el permiso de acceso a las ramas.
  • [acl.deny]: en esta sección se configura la restrincción de acceso a determinados rutas de los repositorios. ACL es la primera sección que revisa y si hay alguna coincidencia no se revisará ninguna otra sección.
  • [acl.allow]: permite configurar el acceso a los repositorios.

La forma más fácil de ver como funciona es verlo a través de un ejemplo. Nuestro repositorio es accedido través de un servidor Apache, por tanto en la sección [acl] debemos indicar que la fuente es del tipo «serve».

[acl]  
source=serve 

Vamos a suponer que tenemos tres usuarios: adictos, autentia y pmartinez. Para este ejemplo vamos a suponer que el primero pertenece al grupo de desarrolladores, el segundo al de administradores y el tercero no pertenece a ningún grupo.

[acl.groups]  
@developers=adictos  
@administrators=autentia 

Los administradores y desarrolladores son los únicos que pueden trabajar con cualquier rama en el repositorio. En cambio el usuario pmartinez sólo puede hacerlo sobre la rama «branch-a».

[acl.deny.branches]  
*=pmartinez  
[acl.allow.branches]  
branch-a=pmartinez  
*=@administrators,@developers  

Ahora queremos restringir el acceso a los desarrolladores al directorio reports del repositorio adictos-repo y permitir el acceso al resto del repositorio. En cambio los administradores tendrán permisos sobre todo y el usuario pmartinez sólo podrá acceder al directorio de docs.

[acl.deny]  
/var/hg/repositories/adictos-repo/reports/**=@developers  
  
[acl.allow]  
/var/hg/repositories/adictos-repo=@developers,@administrators  
/var/hg/repositories/adictos-repo/docs/**=pmartinez 

Acabamos de ver un ejemplo básico de configuración para que veáis lo sencillo que es aplicar seguridad de grano fino con ACLExtensión.

5 Conclusión

El uso de extensiones en Mercurial nos aportan más funcionalidades a nuestro repositorio. Esta vez hemos visto como usar ACLExtension para aplicar seguridad de grano fino pero existen muchas más que mejoran Mercurial y que permiten integrarse con otras aplicaciones como es el caso de bugzilla.

Comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

He leído y acepto la política de privacidad

Información básica acerca de la protección de datos

  • Responsable: IZERTIS S.A.
  • Finalidad: Envío información de carácter administrativa, técnica, organizativa y/o comercial sobre los productos y servicios sobre los que se nos consulta.
  • Legitimación: Consentimiento del interesado
  • Destinatarios: Otras empresas del Grupo IZERTIS. Encargados del tratamiento.
  • Derechos: Acceso, rectificación, supresión, cancelación, limitación y portabilidad de los datos.
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad

Consultor tecnológico de desarrollo de proyectos informáticos. Co-autor del libro "Actualización y mantenimiento del PC (Edición de 2010) publicado por Anaya Multimedia. Ingeniero Técnico en Informática de Sistemas e Ingeniero en Informática (premio al mejor expediente de su promoción). Puedes encontrarme en Autentia: Ofrecemos servicios de soporte a desarrollo, factoría y formación. Somos expertos en Java/Java EE

¿Quieres publicar en Adictos al trabajo?

Te puede interesar

Tutoriales
Un diagnóstico de arquitectura revela riesgos, optimiza sistemas y alinea la infraestructura tecnológica con el crecimiento y objetivos de negocio.
Tutoriales
Descubre qué es la deuda técnica, cómo identificarla, medirla, gestionarla y prevenirla para asegurar el éxito y la sostenibilidad de tus proyectos.
Tutoriales
Detecta emociones en tiempo real con visión artificial y machine learning usando MediaPipe, CVZone y scikit-learn en solo unos cientos de líneas de código.