Upload
mario-dupont
View
165
Download
0
Embed Size (px)
Citation preview
Video sobre esta presentación. Los slides que dicen <aclaración> fueron agregados luego de realizado el video.
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 Postgresql
● http://wiki.postgresql.org/wiki/Using_pg_upgrade_on_Ubuntu/Debian
● openerp-server.conf [db_port!!!]
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