sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo configurar AppArmor para PostgreSQL y TimescaleDB

La seguridad es imprescindible para todos los sistemas para proteger sus datos tanto como sea posible. Incluso cuando siempre existe el riesgo de ser pirateado, seguir una lista de verificación de seguridad reducirá este riesgo significativamente. Una lista de verificación de seguridad básica incluye una configuración de firewall, encriptación de datos, política de autenticación, etc. Otra herramienta importante para proteger sus datos en sistemas operativos basados ​​en Debian es AppArmor. En este blog veremos qué es y cómo configurarlo para bases de datos PostgreSQL y TimescaleDB.

¿Qué es AppArmor?

AppArmor, incluido de forma predeterminada en los sistemas operativos Ubuntu y Debian (entre otros), es un sistema de control de acceso obligatorio (MAC) para limitar los programas a un conjunto limitado de recursos. Funciona usando perfiles cargados en el kernel. Estos perfiles se pueden configurar de dos modos:

  • Cumplimiento:los perfiles cargados en este modo aplicarán la política definida en el perfil y también informarán sobre la infracción de la política. intentos.

  • Queja:los perfiles en este modo no aplicarán la política, sino que informarán los intentos de infracción de la política.

Además, AppArmor permite la combinación de perfiles de modo de aplicación y denuncia.

Cómo configurar AppArmor

Los perfiles de AppArmor están en /etc/apparmor.d/. Puede crear sus propios perfiles y moverlos allí o consultar el repositorio de AppArmor. Veamos cómo crear un nuevo perfil de AppArmor.

Primero, instalemos los paquetes necesarios para manejar esto:

$ apt install apparmor-profiles apparmor-utils

Y vea si AppArmor está habilitado:

$ systemctl status apparmor.service

o

$ aa-status
apparmor module is loaded.
31 profiles are loaded.
29 profiles are in enforce mode.
   /snap/snapd/11588/usr/lib/snapd/snap-confine
   /snap/snapd/11588/usr/lib/snapd/snap-confine//mount-namespace-capture-helper
  ...

Si revisa la ruta mencionada /etc/apparmor.d/, verá algunos perfiles básicos como usr.sbin.tcpdump o usr.sbin.traceroute. Ahora, creemos un nuevo perfil para PostgreSQL o TimescaleDB. Para ello, puedes utilizar este perfil como ejemplo. Según ese perfil, reemplazaremos la versión de PostgreSQL para ser más específicos. En este caso, usaremos PostgreSQL 13.

# Author: Felix Geyer <[email protected]>
#include <tunables/global>
/usr/lib/postgresql/13/bin/postgres {
  #include <abstractions/base>
  #include <abstractions/nameservice>
  #include <abstractions/ssl_keys>
  /etc/postgresql/** r,
  /usr/share/postgresql/** r,
  /var/lib/postgresql/** rwl,
  /{,var/}run/postgresql/** rw,
  owner @{PROC}/13/oom_adj rw,
}

Almacenarlo en /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres. Luego, cargue el nuevo perfil usando apparmor_parser -a:

$ cat /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres | sudo apparmor_parser -a

Si desea cambiar algo en este perfil, deberá volver a cargarlo:

$ apparmor_parser -r /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres

Puede asignar el modo Queja al perfil usando el siguiente comando:

$ aa-complain /usr/lib/postgresql/13/bin/postgres

Luego, puede verificar el archivo syslog en /var/log para ver si la configuración de AppArmor es correcta o si necesita modificar algo. Cuando sea seguro, puede cambiar el modo a Forzar ejecutando:

$ aa-enforce /usr/lib/postgresql/13/bin/postgres

Puede filtrar el registro buscando acciones PERMITIDAS o DENEGADAS:

Jun 25 19:48:02 ip-172-31-18-94 kernel: [ 5160.111028] audit: type=1400 audit(1624650482.537:103): apparmor="ALLOWED" operation="open" profile="/usr/lib/postgresql/13/bin/postgres" name="/proc/17405/oom_score_adj" pid=17405 comm="postgres" requested_mask="w" denied_mask="w" fsuid=113 ouid=113

Jun 25 19:48:02 ip-172-31-18-94 kernel: [ 5160.112524] audit: type=1400 audit(1624650482.541:104): apparmor="ALLOWED" operation="open" profile="/usr/lib/postgresql/13/bin/postgres" name="/proc/17404/oom_score_adj" pid=17404 comm="postgres" requested_mask="w" denied_mask="w" fsuid=113 ouid=113

Jun 25 19:50:02 ip-172-31-18-94 kernel: [ 5280.141262] audit: type=1400 audit(1624650602.569:112): apparmor="DENIED" operation="open" profile="/usr/lib/postgresql/13/bin/postgres" name="/proc/17518/oom_score_adj" pid=17518 comm="postgres" requested_mask="w" denied_mask="w" fsuid=113 ouid=113

También puede deshabilitar perfiles de esta manera:

$ aa-disable /etc/apparmor.d/usr.lib.postgresql.13.bin.postgres

Y deberá volver a cargar el servicio:

$ systemctl reload apparmor.service

En caso de que prefiera desactivar AppArmor, puede ejecutar:

$ systemctl stop apparmor
$ systemctl disable apparmor

Por supuesto, esto no se recomienda para entornos de producción, y debe mantenerlo funcionando, al menos, utilizando el modo Queja en todos los perfiles, para que pueda verificar los registros en busca de comportamientos inesperados.

Cómo usar PostgreSQL y TimescaleDB con ClusterControl y AppArmor

ClusterControl no administra ningún módulo de seguridad del kernel de Linux como AppArmor. Al implementar un clúster de PostgreSQL o TimescaleDB mediante ClusterControl, puede especificar si desea que ClusterControl deshabilite AppArmor durante el proceso de implementación para reducir el riesgo de errores:

Si no desea deshabilitarlo, lo cual se recomienda para producción ambientes, puede usar el modo de quejas y monitorear el registro en sus servidores para asegurarse de que tiene la configuración correcta de AppArmor. Después de eso, puede cambiarlo a Enforce siguiendo las instrucciones mencionadas anteriormente.

Puede encontrar más información sobre la configuración de AppArmor en el sitio oficial de Ubuntu.