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.