MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come configurare AppArmor per i set di repliche MongoDB?

Ci sono molte sezioni e livelli di sicurezza se parliamo del rafforzamento dei database. Parte dalla crittografia del disco di archiviazione sottostante, i privilegi di accesso al database, l'autenticazione, il controllo dell'accesso alla rete, i dati in trasmissione tramite SSL/TLS e anche l'hardening del sistema operativo stesso.

L'indurimento dei sistemi operativi può anche avere molte liste di controllo, come disabilitare o rimuovere servizi server che non verranno utilizzati e utilizzati, disabilitare l'accesso root SSH, abilitare rsyslog, limitare l'accesso tramite account root da la console, abilitando il controllo del sistema e abilitando SELinux.

Un'altra parte delle checklist di sicurezza è il servizio AppArmor. Apparmor è un sistema di controllo dell'accesso obbligatorio (MAC) per scopi di sicurezza che per impostazione predefinita è incluso nei sistemi operativi basati su Ubuntu e Debian, è anche simile a SELinux sui sistemi operativi basati su Redhat o CentOS. Lo scopo di AppArmor è bloccare il processo vulnerabile nel sistema operativo e limitare il danno delle vulnerabilità di sicurezza.

Ad esempio, se il database MongoDB viene pubblicato accidentalmente su Internet e c'è stato del malware che ha infettato il server del database e ha attivato del codice dannoso che MongoDB intende eseguire, AppArmor impedirà tale esecuzione come il profilo MongoDB è già configurato per leggere, eseguire e scrivere solo in file MongoDB specifici.

 In questo blog discuteremo dell'implementazione di AppArmor per i set di repliche MongoDB.

Distribuzione database

Se stai distribuendo set di repliche MongoDB, ClusterControl può semplificarti la vita. Abbiamo solo bisogno di passare attraverso due pagine di distribuzione e quindi ClusterControl sarà pronto per distribuire il MongoDB Replica Set. Ci sono opzioni per disabilitare SELinux/AppArmor durante la distribuzione, come puoi vedere di seguito:

Possiamo disabilitare l'opzione per AppArmor/SELinux. Quindi inserisci l'indirizzo IP dei nodi del database, la password dell'amministratore e la versione MongoDB che desideriamo distribuire.

Dopo aver distribuito il MongoDB Replica Set, possiamo passare a ciascun server del nodo per la configurazione di AppArmor.

Impostazioni AppArmor

Ogni processo è limitato dai profili in AppArmor. Esistono due opzioni in cui è possibile eseguire il profilo, ovvero la modalità di applicazione e la modalità di reclamo. Quando la modalità di applicazione è in uso, impedisce all'applicazione di eseguire azioni limitate, mentre per la modalità reclamo, consente all'applicazione di intraprendere azioni limitate e creare la voce di registro. Ogni profilo è memorizzato nella directory /etc/apparmor.d

Possiamo controllare lo stato del servizio AppArmor eseguendo il seguente comando:

[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.

Ti fornirà informazioni sull'elenco dei profili caricati, quanti profili e processi sono in modalità reclamo e modalità di applicazione. Possiamo usare il comando apparmor_parser per caricare il profilo nel kernel :

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

E per disabilitare il profilo, basta creare un collegamento simbolico alla directory /etc/apparmor.d/disable.

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

Per riattivare il profilo è sufficiente rimuovere il collegamento simbolico e ricaricare nuovamente il profilo.

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

Abilitazione di AppArmor per i set di repliche MongoDB

Prima di utilizzare AppArmor sui nostri set di repliche MongoDB, è necessario definire il profilo per MongoDB, registrare il servizio binario mongodb, le directory dei dati e i file di registro e consentire l'accesso alla rete e al sistema operativo. Possiamo anche definire l'autorizzazione per ogni directory, binario e file. Di seguito è riportato un profilo di esempio del servizio 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.
}

Possiamo inserire il profilo MongoDB sopra nel file /etc/apparmor.d/usr.bin.mongod e quindi eseguire apparmor_parser per caricare il profilo.

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

Se controlliamo utilizzando apparmor_status, esso fornirà informazioni sul profilo MongoDB che è stato caricato:

[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

 

Ora possiamo ripetere i passaggi descritti sopra su ciascun nodo del nostro set di repliche MongoDB per rendere il processo MongoDB limitato e protetto da AppArmor.