Skip to content

OFN System & DataBase Users

Daniel Palomar Rodríguez edited this page Jun 25, 2017 · 1 revision

OFN Environments users

En este documento se analizan los usuarios necesarios para arrancar una instancia de OpenFoodNetwork. Se analizaran los usuarios tanto del sistema como de la base de datos.

System Users

Tabla de usuarios por entorno:

Development Staging/Production
root root
ofn-admin ofn-admin
openfoodnetwork openfoodnetwork
postgres postgres
www-data www-data
memcached
  • root

Solo se utiliza para generar el usuario ofn-admin. Es necesario que conozca la clave ssh con la que vamos a acceder para ejecutar el ansible.

Especificaciones del entorno de desarrollo:

Como no se permite el acceso como root al contenedor, debemos cambiar la configuración del servidor ssh para que permita el login como root. Además debemos cambiar la contraseña, ya que por defecto el usuario root del contenedor tiene una contraseña conocida y es necesario para copiar la clave ssh.


  • ofn-admin
    • Variable name: user
    • Role: superuser
    • Assignation directory: inventory/group_vars/all.yml

Este usuario es utilizado por Ansible para realizar las tareas en el host. Se crea con el role default_user que se ejecuta al principio del playbook de producción y del creado para development.

Es un usuario con permisos root, que le es copiada la ssh del anfitrión así como se le da permisos agregandolo al fichero sudoers. Esto hace que pueda ejercer de super usuario sin necesidad de contraseña.

Una vez tenemos el entorno aprovisionado, el usuario sólo se usará para mantener el entorno, añadir alguna herramienta o eliminar otras.


  • openfoodnetwork
    • Variable name: unicorn_user
    • Role: common user
    • Assignation directory: inventory/group_vars/all.yml

Es el usuario con el que entraremos en el servidor para ejecutar la aplicación.

Es el usuario destinado a ser worker del unicorn por eso es llamado unicorn_user. Se utilizará para arrancar la instancia de OFN y servir las peticiones que llegan. Es el encargado de realizar las tareas en segundo plano. Es un usuario sin privilegios de superusuario y sin permiso para ejecutarse como sudo ya que no es incluido en el fichero sudoers.

Especificaciones del entorno de desarrollo:

Para poder arrancar la aplicación debe tener permisos para leer y ejecutar el proyecto con el código fuente de la aplicación. Esto se consigue en desarrollo creando el usuario cuando creamos el entorno y montamos la carpeta de la máquina host a la máquina contenerizada, asegurándonos de que el unicorn_user tiene el mismo UUID que el usuario creador de la carpeta en la máquina host. En producción se realiza un clon del repositorio ejecutado por este usuario para tener permisos de creador de directorio.


  • postgres

Postgres es el usuario generado por la base de datos Postgres. Es el usuario por defecto de la base de datos, se genera para tener acceso con permisos peer como podemos ver en el fichero de configuración de usuarios (pg_hba.conf):

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# Database administrative login by Unix domain socket
local   all             postgres                                peer

  • www-data

Es el usuario de web server por defecto de Ubuntu. Se genera al instalar Ubuntu y el servidor HTTP necesita que exista en el sistema.Por defecto, el servidor podrá acceder y escribir en los archivos en los que este usuario tenga permisos. Se podría ejecutar el servidor como root, pudiendo acceder así a todo el contenido, pero poniendo en peligro la integridad de los datos ya que cualquiera podría modificarlos a través del servidor.


  • memcached

Es el usuario generado al instalar el paquete Memcached. Este se encarga de las comunicaciones con el servidor de memcached para realizar las operaciones de insertar y consultar.



Data Base Users

Los usuarios de base de datos se crean como resultado de una de las tareas del rol dbserver. La tarea create db user realiza:

- name: create db user
  become: yes
  become_user: postgres
  postgresql_user:
    name={{ db_user }}
    password={{ db_password }}
    role_attr_flags={{ db_user_roles }}

El usuario resultado de la ejecución de esta tarea es el usuario que interactúa con la base de datos. Para ello se utiliza el usuario postgres, generado en la instalación por defecto de la base de datos Postgres.

Para poder mantener el rol tanto en producción como en desarrollo, se parametrizan los valores de las variables. Estas nuevas variables se definen en el fichero inventory/group_vars/all.yml y en inventory/host_vars/{host}/secrets.yml distribuidas de la siguiente manera:

inventory/group_vars/all.yml → db_user
inventory/host_vars/{host}/secrets.yml → db_password
playbooks/{playbook_name}.yml → db_user_roles

Development

En desarrollo las variables toman los siguientes valores:

db_user: ofn_user
db_password: f00d
db_user_roles: SUPERUSER,CREATEDB

En el entorno de desarrollo se necesita un usuario con permisos de superuser para crear unos triggers del sistema.

Production

En producción las variables toman los siguientes valores:

db_user: ofn_user
db_password: XXXX
db_user_roles: CREATEDB

En desarrollo debemos crear el usuario ofn_user manualmente, otorgando permisos de superusuario.