Presentación de los mecanismo de seguridad que incorpora el programa de gestión Tryton.
Presentación realizada en las I Jornadas Tryton de 2016 en Barcelona.
3. ● Si se notifica de un possible problema de seguridad a
https://bugs.tryton.org se debe indicar que se trata de un
problema de seguridad de forma que sólo unos pocos
desarrolladores tienen acceso
● La revisión de código se hace también en privado
● Se pide un número CVE
● Se saca una nueva versión menor n.n.X para todas las
versiones afectadas
1.1/Seguridad, en serio
5. ● Administrador a nivel de aplicación (por encima de las
bases de datos). Permite:
● Crear y borrar bases de datos
● Realizar copias de seguridad y restaurarlas (no
escalable)
● Password hash con crypt en el fichero de configuración
(cuidado con los permisos!)
2.1/Superadministrador
6. ● Configurable a partir de la 4.2 (password + SMS por
ejemplo)
● Hash de la contraseña con sha1 o bcrypt si disponible
(más lento!)
2.2/Login
7. ● Se puede limitar acceso según:
● Objeto:
● Tabla
● Campo
● Botón/función
● Reglas de registros (corte horizontal) mediante dominio:
● Ejemplo: [('code', 'ilike', '7%')]
● Nivel:
● Lectura
● Creación
● Modificación
● Borrado
2.3/Grupos y usuarios
8. ● Timeout para volver a pedir contraseña después de X
tiempo de inactividad (timeout en fichero de configuración)
● Cada intento fallido aumenta el tiempo de espera del login
(limitado por el tiepo de timeout)
● ¡¡¡Aumento exponencial!!!
2.4/Conexión y desconexión
9. ● Reglas para nivel mínimo de dificultad de contraseñas
● Número de días de validez de una misma contraseña para
un usuario
● Pide contraseña si ha expirado el tiempo
● Botón de reset de password para mandar correo
electrónico al usuario
2.5/Módulo password_expiry
10. ● audit_trail
● Registrar histórico de logins y logouts de los usuarios
del sistema
● audit_log
● Permite ver en una sola pantalla todas las acciones
realizadas por los usuarios
● Datos:
● Usuario
● Fecha y hora
● Creación/modificación/borrado
● Cambios realizados (si la tabla está historizada)
● No genera registro, cálculo a posteriori
2.6/Módulos de auditoría
12. ● Conexión local o cifrada
● trytond: utilizar usuario NO administrador pero con acceso
a toda la base de datos
3.1/PostgreSQL
13. ● Conexión segura https:
● Cliente web
● Cliente escritorio
● Webservices: XML-RPC y JSON-RPC
● Permisos se aplican también mediante los webservices
● Aplicaciones específicas (trytond / flask): Permisos a nivel
de PostgreSQL
3.2/Conexiones
15. ● Problema con los permisos:
● Es muuuuuy complejo dar los permisos necesarios para
que un usuario
● Podemos utilizar:
with Transaction().set_user(0):
● @ModelView.button
4.1/Permisos programación: root
16. ● python-sql: Evita SQL injection
cursor.execute(*action_report.select(action_report.id,
action_report.report_content_data,
order_by=action_report.id, limit=limit, offset=offset))
● Simpleeval (en sustitución de safe_eval – que no era tant
safe)
● PySON
4.2/Seguridad