MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment configurer AppArmor pour les ensembles de répliques MongoDB ?

Il existe de nombreuses sections et couches de sécurité si nous parlons de durcissement des bases de données. Cela commence par le cryptage du disque de stockage sous-jacent, les privilèges d'accès à la base de données, l'authentification, le contrôle d'accès au réseau, les données transmises à l'aide de SSL/TLS et également le renforcement du système d'exploitation lui-même.

Le renforcement des systèmes d'exploitation peut également comporter de nombreuses listes de contrôle, telles que la désactivation ou la suppression des services de serveur qui ne seront pas utilisés et utilisés, la désactivation de la connexion racine SSH, l'activation de rsyslog, la restriction de l'accès à l'aide du compte root à partir de la console, en activant l'audit du système et en activant SELinux.

Une autre partie des listes de contrôle de sécurité est le service AppArmor. Apparmor est un système de contrôle d'accès obligatoire (MAC) à des fins de sécurité qui est inclus par défaut sur les systèmes d'exploitation basés sur Ubuntu et Debian. Il est également similaire à SELinux sur les systèmes d'exploitation basés sur Redhat ou CentOS. L'objectif d'AppArmor est de verrouiller le processus vulnérable dans le système d'exploitation et de limiter les dommages causés par les vulnérabilités de sécurité.

Par exemple, si la base de données MongoDB est accidentellement publiée sur Internet et qu'un logiciel malveillant a infecté le serveur de base de données et déclenché un code malveillant que MongoDB a l'intention d'exécuter, AppArmor empêchera une telle exécution comme le profil MongoDB est déjà configuré pour lire, exécuter et écrire uniquement dans des fichiers MongoDB spécifiques.

 Dans ce blog, nous discuterons de la mise en œuvre d'AppArmor pour les ensembles de réplicas MongoDB.

Déploiement de la base de données

Si vous déployez des jeux de répliques MongoDB, ClusterControl peut vous faciliter la vie. Nous avons juste besoin de parcourir deux pages de déploiement, puis ClusterControl sera prêt à déployer l'ensemble de répliques MongoDB. Il existe des options pour désactiver SELinux/AppArmor pendant le déploiement, comme vous pouvez le voir ci-dessous :

Nous pouvons désactiver l'option pour AppArmor/SELinux. Et puis remplissez l'adresse IP des nœuds de la base de données, le mot de passe administrateur et la version de MongoDB que nous voulons déployer.

Une fois l'ensemble de répliques MongoDB déployé, nous pouvons accéder à chaque serveur de nœud pour la configuration d'AppArmor.

Paramètres AppArmor

Chaque processus est limité par des profils dans AppArmor. Il existe deux options d'exécution du profil, à savoir le mode d'application et le mode de réclamation. Lorsque le mode d'application est utilisé, il empêche l'application d'effectuer des actions restreintes, tandis que pour le mode plainte, il permet à l'application d'effectuer des actions restreintes et de créer l'entrée de journal. Chaque profil est stocké dans le répertoire /etc/apparmor.d

Nous pouvons vérifier l'état du service AppArmor en exécutant la commande suivante :

[email protected]:/etc/apparmor.d# apparmor_status
apparmor module is loaded.
15 profiles are loaded.
15 profiles are in enforce mode.
   /sbin/dhclient
   /usr/bin/lxc-start
   /usr/bin/man
   /usr/lib/NetworkManager/nm-dhcp-client.action
   /usr/lib/NetworkManager/nm-dhcp-helper
   /usr/lib/connman/scripts/dhclient-script
   /usr/lib/snapd/snap-confine
   /usr/lib/snapd/snap-confine//mount-namespace-capture-helper
   /usr/sbin/tcpdump
   lxc-container-default
   lxc-container-default-cgns
   lxc-container-default-with-mounting
   lxc-container-default-with-nesting
   man_filter
   man_groff
0 profiles are in complain mode.
0 processes have profiles defined.
0 processes are in enforce mode.
0 processes are in complain mode.
0 processes are unconfined but have a profile defined.

Il vous donnera des informations sur la liste des profils chargés, le nombre de profils et de processus en mode plainte et en mode application. Nous pouvons utiliser la commande apparmor_parser pour charger le profil dans le noyau :

[email protected]: cat /etc/apparmor.d/profile.name | sudo apparmor_parser -a

Et pour désactiver le profil, il suffit de créer un lien symbolique vers le répertoire /etc/apparmor.d/disable.

[email protected]: ln -s /etc/apparmor.d/profile.name /etc/apparmor.d/disable

Pour réactiver le profil, il suffit de supprimer le lien symbolique et de recharger à nouveau le profil.

[email protected]:  rm /etc/apparmor.d/disable/profile.name cat /etc/apparmor.d/profile.name | apparmor_parser -a

Activation d'AppArmor pour les ensembles de répliques MongoDB

Avant d'utiliser AppArmor sur nos jeux de réplicas MongoDB, nous devons définir le profil pour MongoDB, enregistrer le service binaire mongodb, les répertoires de données et les fichiers journaux, et autoriser certains accès au réseau et au système d'exploitation. Nous pouvons également définir l'autorisation pour chaque répertoire, binaire et fichiers. Vous trouverez ci-dessous un exemple de profil du service MongoDB :

#include <tunables/global>

/usr/sbin/mongod {
  #include <abstractions/base>
  #include <abstractions/nameservice>
  #include <abstractions/user-tmp>
  #include <abstractions/winbind>

# Allow system resource access
  /sys/devices/system/cpu/ r,
  /sys/devices/system/node/ r,
  /sys/devices/system/node/** r,
  /proc/*/status r,
  capability sys_resource,
  capability dac_override,
  capability setuid,
  capability setgid,
  capability sys_nice,

# Allow network access
  network tcp,
  /etc/hosts.allow r,
  /etc/hosts.deny r,

# Allow config access
  /etc/mongod.conf r,

# Allow pid, socket, socket lock file access
  /var/run/mongod.pid rw,

# Allow systemd notify messages
  /{,var/}run/systemd/notify w,


# Allow execution of server binary
  /usr/sbin/mongo mr,
  /usr/sbin/mongod mr,
  /usr/sbin/mongos mr,
  /usr/sbin/mongotop mr,
  /usr/sbin/mongorestore mr,
  /usr/sbin/mongoimport mr,
  /usr/sbin/mongofiles mr,
  /usr/sbin/mongodump mr,

# Allow data files dir access
  /var/lib/mongodb/ r,
  /var/lib/mongodb/** rwk,

# Allow log file access
  /var/log/mongodb/ r,
  /var/log/mongodb/** rw,

# Allow access to openssl config
  /etc/mongo-cluster.key r,

  # Site-specific additions and overrides. See local/README for details.
}

Nous pouvons placer le profil MongoDB ci-dessus dans le fichier /etc/apparmor.d/usr.bin.mongod, puis exécuter apparmor_parser pour charger le profil.

[email protected]: cat /etc/apparmor.d/usr.bin.mongod | sudo apparmor_parser -a

Si nous vérifions en utilisant apparmor_status, cela donnera des informations sur le profil MongoDB qui a été chargé :

[email protected]:/etc/apparmor.d# apparmor_status
apparmor module is loaded.

57 profiles are loaded.
19 profiles are in enforce mode.
   /sbin/dhclient
   /usr/bin/lxc-start
   /usr/bin/man
   /usr/lib/NetworkManager/nm-dhcp-client.action
   /usr/lib/NetworkManager/nm-dhcp-helper
   /usr/lib/chromium-browser/chromium-browser//browser_java
   /usr/lib/chromium-browser/chromium-browser//browser_openjdk
   /usr/lib/chromium-browser/chromium-browser//sanitized_helper
   /usr/lib/connman/scripts/dhclient-script
   /usr/lib/snapd/snap-confine
   /usr/lib/snapd/snap-confine//mount-namespace-capture-helper
   /usr/sbin/mongod
   /usr/sbin/tcpdump
   lxc-container-default
   lxc-container-default-cgns
   lxc-container-default-with-mounting
   lxc-container-default-with-nesting
   man_filter
   man_groff
38 profiles are in complain mode.
   /usr/bin/mongod
   /usr/lib/chromium-browser/chromium-browser
   /usr/lib/chromium-browser/chromium-browser//chromium_browser_sandbox
   /usr/lib/chromium-browser/chromium-browser//lsb_release
   /usr/lib/chromium-browser/chromium-browser//xdgsettings

 

Nous pouvons maintenant répéter les étapes décrites ci-dessus sur chaque nœud de notre jeu de répliques MongoDB pour rendre le processus MongoDB restreint et sécurisé par AppArmor.