-
Notifications
You must be signed in to change notification settings - Fork 0
OFN System & DataBase 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.
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.
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.
Staging and production provisioning
OFN-DevEnv-Quick-Start - english
Crear entorno
Aprovisionamiento del entorno