Es gibt viele Bereiche und Ebenen der Sicherheit, wenn wir über die Absicherung von Datenbanken sprechen. Es beginnt mit der Verschlüsselung der zugrunde liegenden Speicherfestplatte, den Datenbankzugriffsrechten, der Authentifizierung, der Netzwerkzugriffskontrolle, der Datenübertragung mit SSL/TLS und auch der Absicherung des Betriebssystems selbst.
Die Härtung der Betriebssysteme kann auch viele Checklisten haben, wie z. B. das Deaktivieren oder Entfernen von Serverdiensten, die nicht verwendet und verwendet werden sollen, das Deaktivieren des SSH-Root-Logins, das Aktivieren von rsyslog, das Einschränken des Zugriffs mithilfe des Root-Kontos aus der Konsole, Aktivierung der Systemüberwachung und Aktivierung von SELinux.
Ein weiterer Bestandteil der Sicherheitschecklisten ist der AppArmor-Dienst. Apparmor ist ein Mandatory Access Control (MAC)-System für Sicherheitszwecke, das standardmäßig auf Ubuntu- und Debian-basierten Betriebssystemen enthalten ist, es ähnelt auch SELinux auf Redhat- oder CentOS-basierten Betriebssystemen. Das Ziel von AppArmor ist es, den anfälligen Prozess im Betriebssystem zu sperren und den Schaden von Sicherheitslücken einzuschränken.
Wenn beispielsweise die MongoDB-Datenbank versehentlich im Internet veröffentlicht wird und Malware den Datenbankserver infiziert und bösartigen Code ausgelöst hat, den MongoDB auszuführen beabsichtigt, verhindert AppArmor eine solche Ausführung Das MongoDB-Profil ist bereits so konfiguriert, dass es nur bestimmte MongoDB-Dateien lesen, ausführen und schreiben kann.
In diesem Blog besprechen wir die AppArmor-Implementierung für MongoDB-Replikatsätze.
Datenbankbereitstellung
Wenn Sie MongoDB-Replikatsätze bereitstellen, kann ClusterControl Ihnen das Leben erleichtern. Wir müssen nur zwei Bereitstellungsseiten durchlaufen und dann ist ClusterControl bereit, das MongoDB Replica Set bereitzustellen. Es gibt Optionen zum Deaktivieren von SELinux/AppArmor während der Bereitstellung, wie Sie unten sehen können:
Wir können die Option für AppArmor/SELinux deaktivieren. Geben Sie dann die IP-Adresse des Datenbankknotens, das Administratorpasswort und die MongoDB-Version ein, die wir bereitstellen möchten.
Nachdem der MongoDB-Replikatsatz bereitgestellt wurde, können wir in jeden Knotenserver springen zur Konfiguration von AppArmor.
AppArmor-Einstellungen
Jeder Prozess wird durch Profile in AppArmor eingeschränkt. Es gibt zwei Optionen, bei denen das Profil ausgeführt werden kann, nämlich den Erzwingungsmodus und den Beschwerdemodus. Wenn der Erzwingungsmodus verwendet wird, verhindert er, dass die Anwendung eingeschränkte Aktionen ausführt, während der Beschwerdemodus der Anwendung erlaubt, eingeschränkte Aktionen auszuführen und den Protokolleintrag zu erstellen. Jedes Profil wird im Verzeichnis /etc/apparmor.d
gespeichertWir können den Status des AppArmor-Dienstes überprüfen, indem wir den folgenden Befehl ausführen:
[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.
Sie erhalten Informationen über die Liste der geladenen Profile, wie viele Profile und Prozesse sich im Beschwerdemodus und im Erzwingungsmodus befinden. Wir können den Befehl apparmor_parser verwenden, um das Profil in den Kernel zu laden:
[email protected]: cat /etc/apparmor.d/profile.name | sudo apparmor_parser -a
Und um das Profil zu deaktivieren, müssen wir nur einen symbolischen Link zum Verzeichnis /etc/apparmor.d/disable.
erstellen[email protected]: ln -s /etc/apparmor.d/profile.name /etc/apparmor.d/disable
Um das Profil wieder zu aktivieren, entfernen Sie einfach den symbolischen Link und laden Sie das Profil erneut.
[email protected]: rm /etc/apparmor.d/disable/profile.name cat /etc/apparmor.d/profile.name | apparmor_parser -a
Aktivieren von AppArmor für MongoDB-Replikatsätze
Bevor wir AppArmor auf unseren MongoDB-Replikatsätzen verwenden, müssen wir das Profil für MongoDB definieren, den mongodb-Binärdienst, die Datenverzeichnisse und die Protokolldateien registrieren und einen gewissen Netzwerk- und Betriebssystemzugriff zulassen. Wir können auch die Berechtigung für jedes Verzeichnis, jede Binärdatei und die Dateien definieren. Nachfolgend finden Sie ein Beispielprofil des MongoDB-Dienstes:
#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.
}
Wir können das obige MongoDB-Profil in die Datei /etc/apparmor.d/usr.bin.mongod einfügen und dann den apparmor_parser ausführen, um das Profil zu laden.
[email protected]: cat /etc/apparmor.d/usr.bin.mongod | sudo apparmor_parser -a
Wenn wir mit apparmor_status prüfen, gibt es Informationen über das geladene MongoDB-Profil:
[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
Wir können jetzt die oben beschriebenen Schritte auf jedem Knoten unseres MongoDB-Replikatsatzes wiederholen, um den MongoDB-Prozess durch AppArmor einzuschränken und zu sichern.