USUARIOS Y SEGURIDAD EN ZOPE

La seguridad es uno de los pilares fundamentales de las aplicaciones Web en la actualidad, por lo tanto nunca debe de ser un añadido para proteger tu sistema, sino que debe ser un elemento a tener en cuenta cuando se realiza el diseño de un sitio Web. En general, debemos definir qué usuarios pueden acceder a nuestro sitio y qué pueden hacer, cuando hablamos de usuarios no sólo nos referimos a aquellos que visitan nuestro Web, sino también a las personas que se encargarán de mantenerlo y de aumentar sus contenidos, sabemos que la creación y mantenimiento de un sitio es complejo y requiere la coordinación de un grupo de personas.
A continuación, se da una descripción de cómo Zope gestiona la seguridad a través de usuarios, roles, permisos y políticas de seguridad. Para una información más detallada se referencia al Capítulo 6 del Zope Book, cuyo contenido se ha resumido en este documento.

Introducción

Las funciones de seguridad que soporta Zope son autenticación y autorización. Autenticación se refiere a saber quién eres y autorización qué puedes hacer. Zope define objetos del tipo carpetas de usuario ("User Folders") que sirven para crear cuentas de usuario. Cuando accedes a un recurso protegido, Zope te pregunta por tu usuario/palabra de paso, esto se corresponde con el proceso de autenticación. Sólo se realiza un proceso de autenticación si se accede a un recurso protegido, sino el objeto se considera de acceso público y se asume que el usuario es "anonymous".
Una vez realizada la autenticación, Zope chequea si puedes acceder o no al recurso. Para ello define roles y permisos. Los usuarios tienen roles que describen que es lo que pueden hacer y los objetos de Zope tienen permisos asociados que describen qué puede realizarse con ellos. Las políticas de seguridad mapean roles a permisos, es decir quién puede hacer y qué puede hacer. De esta forma Zope gestiona el proceso de autorización.

 

Usuarios en Zope

Los usuarios en Zope son objetos que contienen información sobre quienes pueden entrar en el sistema y realizar operaciones sobre objetos Zope.

Crear usuarios en carpetas de usuario ("Users Folders")

Para crear usuarios en Zope se debe de añadir objetos de tipo usuario en las carpetas de usuarios. Si queremos por ejemplo, crear un usuario que colabore con nosotros en la gestión de nuestro servidor Zope, seguiremos los siguientes pasos:
Figura 1. Creación de un usuario
Figura 2. Carpeta de usuarios /acl_users
 

Editar usuarios

Para editar usuarios, simplemente hace falta pinchar en ese usuario, dentro de la carpeta de usuarios donde se creó. Aparece una pantalla muy similar a la de creación de usuarios, que nos permitirá modificar los valores que tiene asociados menos su nombre.
 
Figura 3. Edición de usuarios
Como todos los objetos Zope, el cambio en los valores de un usuario está protegido por una política de seguridad asociada. Un usuario sólo puede cambiar su password si tiene permisos de Manager, es decir, tiene asociado el rol de Manager. Un usuario con el rol de Manager en una carpeta de usuarios, puede editar y modificar los valores de todos los usuarios definidos en esa carpeta, esto puede parecer correcto o no, pero este problema, si se considera como tal, se puede solucionar. Observemos, que aunque se pueda modificar la palabra de paso, ésta no puede ser leida desde el interfaz de Zope (aparece con asteriscos).
En general, las carpetas de usuarios son como las carpetas ("folders") de Zope; puedes crear, editar y borrar objetos contenidos en la carpeta, que en este caso son de tipo usuario. Pero no se pueden cortar ni pegar usuarios ni de una de carpeta de usuarios a otra, ni en la misma carpeta.

Localización de usuarios

Zope puede contener múltiples carpetas de usuarios en diferentes localizaciones de su jerarquía de objetos. Un usuario puede acceder a los recursos que están en la carpeta en la que se encuentra la carpeta de usuarios en la que está definido. Por ejemplo, el usuario que hemos creado en la carpeta de usuarios acl_users que se encuentra en la carpeta de "root", puede acceder a todos los objetos definidos dentro de esa carpeta. Pero si definimos un usuario dentro de un acl_users de un carpeta /Ejemplo, este usuario sólo podrá acceder a los objetos contenidos en /Ejemplo.
Cuando se construye un web en Zope típicamente los recursos relacionados entre sí se almacenan en la misma carpeta y se aplica la misma política de seguridad a todos ellos, de forma que los usarios definidos dentro de la carpeta acl_users dentro de esa carpeta, contiene usuarios que pueden realizar operaciones sobre ese conjunto de objetos.

 

Gestión de seguridad

Para la gestión de la seguridad, Zope emplea tres conceptos: roles, permisos y políticas de seguridad. Los roles son una forma de agrupar usuarios según los que pueden hacer. Los permisos están asociados a los objetos e indican qué se puede hacer con ellos. Las políticas de seguridad asocian roles a permisos y por lo tanto, indican quién y qué se puede hacer con un determinado objeto Zope.
En Zope se pueden construir políticas de seguridad adaptadas a los requisitos que precise la construcción del sitio web que estemos realizando, definiendo nuevos roles y nuevos permisos. Las políticas de seguridad también son aplicables a nivel de usuario, es decir, puedes restringir los permisos que tiene un usuario concreto sobre determinados objetos Zope, independientemente del rol al que pertenezca.
 

Roles

Zope define un conjunto de roles que definen qué tipos de acciones pueden realizarse. Los roles definen grupos de usuarios como Manager y Anonymous. Los roles en Zope son similares a los grupos de usuarios en UNIX y con en UNIX un usuario puede tener varios roles (grupos). Los roles permiten gestionar la seguridad de manera más sencilla porque permiten definir la seguridad a nivel global a un conjunto de usuarios y no a cada uno de manera particular.
Por defecto, Zope define tres roles de usuarios: Para crear sitios web sencillos, con los roles de Manager y Anonymous es suficiente para gestionar la seguridad (sólo las personas que gestionen el web deben de tener un usuario perteneciente al rol Manager, los demás visualizaran contenidos como usuarios Anonymous).
 

Creación de roles

Para crear un nuevo rol es necesario ir al tab de seguridad (Security), en la que se ven de forma gráfica las políticas de seguridad existentes, es decir qué permisos están asociados a cada rol definido. Al final de esta página se puede añadir un nuevo rol indicando su nombre en el campo "User defined role" y pulsando el botón "Add Role".
Se puede comprobar que el nuevo rol ha sido creado, viendo que en el tab de seguridad aparece una nueva columna con el nuevo rol. Los roles creados pueden eliminarse seleccionando el que queremos borrar y pulsando el botón "Delete Role" (los roles que por defecto tiene Zope no pueden eliminarse).
Recordar, que como todo objeto Zope, los roles existen en el nivel de jerarquía de carpetas en la que ha sido creado, así si queremos tener un rol válido para todas las aplicaciones creadas en nuestro servidor Zope, este rol debe de ser creado en la carpeta "root".
 

Permisos

Los permisos definen qué acciones pueden realizarse sobre objetos Zope. Por ejemplo, los métodos DTML y los documentos DTML pueden visualizarse, por lo tanto existe un permiso que es View ("vista") asociado a estos objetos.
Algunos permisos definidos sólo son relevantes para unos tipos de objetos, por ejemplo el permiso Change DTML Methods ("modificar métodos DTML") sólo protege  objetos Zope del tipo método DTML. Para ver los permisos que tiene un determinado objeto, es necesario seleccionar ese objeto (pinchando en él) y yendo al tab de seguridad, en el que se visualizarán los permisos que tiene y a qué roles están asociados cada uno de ellos.

Figura 4. Política de seguridad asociada a un método DTML

Creación de políticas de seguridad

Las políticas de seguridad en Zope asocian permisos de objetos a roles de usuarios, y por lo tanto, nos dicen quién puede hacer y qué puede hacer. Las políticas de seguridad se pueden definir para cada objeto Zope, para ello, se selecciona el objeto correspondiente (pinchando en él), se va al tab de seguridad, y se van marcando los permisos que tiene cada uno de los roles para ese objeto.
Vemos en la figura siguiente las políticas de seguridad definidas a nivel de "root".

Figura 5. Políticas de seguridad globales

Adquisición de políticas de seguridad

A la hora de gestionar la seguridad en Zope, es importante tener en cuenta como se adquieren políticas de seguridad de padres a hijos en la jerarquía de objetos de Zope. La adquisición es un mecanismo en Zope por el cual se comparte información contenida en un carpeta a todas los objetos dentro en ella. En el caso de seguridad, los objetos contenidos en una carpeta, por defecto, adquieren la política de seguridad de esa carpeta.
La adquisición de políticas de seguridad puede desactivarse: podemos ver yendo al tab de seguridad de una carpeta, como existe una columna a la izquierda en la que al lado de cada uno de los permisos definidos se puede activar o desactivar la opción Acquire permission settings .Por defecto, siempre se encuentra activada y por lo tanto, la política de seguridad se comparte según la jerarquía de objetos Zope establecida (los hijos heredan automáticamente todos las políticas de seguridad de los padres).
Por ejemplo, si queremos hacer que el contenido de una carpeta sea totalmente privado y sólo determinados usuarios puedan ver el contenido de la carpeta (y no por defecto cualquiera, a través del usuario anonymous), no sólo es necesario quitar el permiso View al rol Anonymous en la carpeta correspondiente, sino que además debe eliminarse la adquisición de ese permiso, en el caso de que sus carpetas padres lo tengan activado o adquirido.
 

Reglas de uso para la gestión de la seguridad en Zope

La combinación de usuarios, roles y permisos nos permite crear complejas estructuras de seguridad en los sitios web creados a través de Zope. Es importante tener en cuenta las siguientes reglas para establecer la política de seguridad que queremos aplicar:
  1. Definir usuarios a niveles inferiores.
  2. Los objetos que deben de ser gestionados por el mismo grupo de usuarios deben de estar almacenados en la misma carpeta ("folder").
  3. Buscar jerarquías simples.
  4. Crear roles para agrupar usuarios con permisos comunes.
  5. Emplear la adquisición de políticas de seguridad, definiendo políticas a niveles superiores.