Seguridad en OpenERP

21
Seguridad en OpenERP Moldeo - Datamatic

Transcript of Seguridad en OpenERP

Seguridad en OpenERPMoldeo - Datamatic

Video sobre esta presentación. Los slides que dicen <aclaración> fueron agregados luego de realizado el video.

Objetivo

Tratar temas de seguridad y actualizaciones para OpenERP para servidores UNIX.

Orientado a

● Desarrolladores Python.● Usuarios avanzados en UNIX/Linux.

Seguridad en OpenERP

● Nivel SO: Usuarios y grupos, SUDO, SSH.● Nivel Postgresql: Listas de acceso, acceso

del servidor, acceso de los administradores.● Nivel OpenERP: Listas de acceso, reglas

de permisos, injection code.● Nivel Web: HTTPS.

Nivel SO

● Servicios deberían como Usuarios y no como ROOT.

● Debian○ Servidor OpenERP -- openerp / openerp○ Postgresql -- postgres / postgres○ Apache / nginx-- www-data / www-data

● SUDO○ Sistema de control de ejecución de comandos.

Nivel SO <Aclaración>

● SSH (cómo me puedo olvidar de él!)○ Mito: cambiar de puertos al SSH mejora la

seguridad. ¿Acaso no conocen lo que es un scaner de puertos?

○ Importante: no permitir a root acceder al servidor.○ Muy útil: no usar claves, usar clave pública-privada.

■ https://help.ubuntu.com/community/SSH/OpenSSH/Keys

Nivel Postgresql

● Dos tipos de usuarios: administrador y no administrador.

● Para una base de datos hay dos roles: owner, otros…

● Control usando ACL.● Protocolos autentificación pg_hba.conf

○ Socket IP (PG - md5)○ Socket Unix (PAM - peer)

Nivel OpenERP

● Modelos○ res_users / res_groups

● Autentificación○ Local, LDAP, OpenID, OAuth

● Injection code○ Controlado: Frontend/Cliente - Backend/Servidor.○ Dominions: [(‘name’,’=’,’Cristian’)]

Nivel OpenERP

● Nivel menues● Nivel vistas● Listas de acceso

○ Que permisos tiene un grupo para un objeto.● reglas de registros

○ Asignar permisos a un objeto según se cumpla una regla.

Nivel OpenERP

● Carpeta security○ security.xml: res.group , ir.rules○ ir.model.access.csv: CSV con reglas de acceso.

● Funciones de Objetos.○ def f(self, cr, uid, ids,... context=None, ...)

■ cr: cursor de la base de datos..■ uid: User ID.■ ids: Instancias del objeto.

Nivel OpenERP <Aclaración>

● La lista de acceso controla el acceso a los objetos OpenERP a nivel Código.○ Esto implica que si queremos que una función

pueda tocar la base de datos sólo si los permisos son adecuados, nunca hay que ejecutar SQL desde python. Usar en cambio las funciones de orm:■ self.create, self.search, self.browse , self.read,

self.write , etc…● NO USAR SQL en PYTHON!!!

Nivel OpenERP <Aclaración>

● Para usar SQL en Python tener en cuenta:○ El usuario tiene permisos para acceder al modelo?

● self.check_access_rigths(cr, uid, ACTION):● self.check_access_rule(cr, uid, ACTION):

○ Dónde ACTION puede ser:● ‘create’, ‘unlink’, ‘write’, ‘read’

○ En el caso que falle genera una excepción.■ Se puede cancelar la excepción con:

● raise_exception=False● devuelve un booleano.

Nivel OpenERP <Aclaración>

● Workflow○ Se puede asignar un grupo con permisos para

ejecutar una transición.○ No tiene sentido asignar permisos a un estado. Si se

está en un estado, ya se está.

Nivel Web

● HTTPS (Certificado del Servidor)○ Claves Planas -> Encriptadas.○ Datos del sistema encriptado.○ Invisibilidad de acciones en el servidor.

● HTTPS (Certificado del Cliente)○ Restringir el acceso al servidor por llaves simétricas.

Actualizaciones

● Nivel SO: Paquetes y código patcheado.● Nivel Postgresql: Versiones de bases de

datos.● Nivel OpenERP: Actualización de módulos,

actualización del servidor, actualización de los datos entre versiones.

Nivel SO

● Debian / Ubuntu○ Utilizar repositorio estable + security○ aptitude update (1 vez por semana).○ aptitude safe-upgrade

● Actualizaciones afectan a OpenERP○ postgresql○ python○ python -> librerias !!! -> addons?

Nivel OpenERP

● Módulos del Servidor.○ estructura de la base de datos [install-update]

■ Si tabla cambia de nombre o desaparece. Queda en postgresql y no en openerp.

■ Si tabla cambia de estructura -> tabla cambia de estructura. Nunca borra atributos.

■ Restricciones e Índices, no los fuerza.○ lógica [reinicio del servidor]○ datos < vistas, permisos, etc…> [install-update]

Nivel OpenERP

● Módulos del cliente○ lógica / diseño [refresh del browser]○ publicación de entidades del cliente (Widget) [install-

update-reinicio]● Virtualización de Entornos

○ virtualenv○ oerpenv (https://launchpad.net/oerpenv)

■ pip install oerpenv

Fin