Istnieje wiele sekcji i warstw zabezpieczeń, jeśli mówimy o utwardzaniu baz danych. Zaczyna się od szyfrowania podstawowego dysku, uprawnień dostępu do bazy danych, uwierzytelniania, kontroli dostępu do sieci, transmisji danych przy użyciu protokołu SSL/TLS, a także wzmocnienia samego systemu operacyjnego.
Wzmocnienie systemów operacyjnych może mieć również wiele list kontrolnych, takich jak wyłączanie lub usuwanie usług serwera, które nie będą używane i wykorzystywane, wyłączenie logowania root przez SSH, włączenie rsyslog, ograniczenie dostępu za pomocą konta root z konsoli, włączając audyt systemu i włączając SELinux.
Kolejną częścią list kontrolnych bezpieczeństwa jest usługa AppArmor. Apparmor to system obowiązkowej kontroli dostępu (MAC) ze względów bezpieczeństwa, który jest domyślnie zawarty w systemach operacyjnych opartych na Ubuntu i Debianie, jest również podobny do SELinux w systemach operacyjnych opartych na Redhat lub CentOS. Celem AppArmor jest zablokowanie wrażliwego procesu w systemie operacyjnym i ograniczenie uszkodzeń luk w zabezpieczeniach.
Na przykład, jeśli baza danych MongoDB zostanie przypadkowo opublikowana w Internecie i pojawiło się złośliwe oprogramowanie, które zainfekowało serwer bazy danych i uruchomiło złośliwy kod, który MongoDB zamierza wykonać, AppArmor uniemożliwi takie wykonanie, jak profil MongoDB jest już skonfigurowany do odczytu, wykonywania i zapisu tylko w określonych plikach MongoDB.
W tym blogu omówimy implementację AppArmor dla zestawów replik MongoDB.
Wdrażanie bazy danych
Jeśli wdrażasz zestawy replik MongoDB, ClusterControl może ułatwić Ci życie. Wystarczy przejść przez dwie strony wdrażania, a ClusterControl będzie gotowy do wdrożenia zestawu replik MongoDB. Istnieją opcje Wyłącz SELinux/AppArmor podczas wdrażania, jak widać poniżej:
Możemy wyłączyć opcję dla AppArmor/SELinux. A następnie wypełnij adres IP węzłów bazy danych, hasło administratora i wersję MongoDB, którą chcemy wdrożyć.
Po wdrożeniu zestawu replik MongoDB możemy przejść do każdego serwera węzłów do konfiguracji AppArmor.
Ustawienia AppArmor
Każdy proces jest ograniczony przez profile w AppArmor. Istnieją dwie opcje, w których można uruchomić profil, czyli tryb wymuszania i tryb skargi. Gdy tryb wymuszania jest w użyciu, uniemożliwia aplikacji podejmowanie zastrzeżonych działań, podczas gdy w trybie skarg umożliwia aplikacji podejmowanie zastrzeżonych działań i tworzenie wpisu w dzienniku. Każdy profil jest przechowywany w katalogu /etc/apparmor.d
Możemy sprawdzić stan usługi AppArmor, uruchamiając następujące polecenie:
[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.
Dostarczy informacji o liście załadowanych profili, liczbie profili i procesów w trybie reklamacji i trybie egzekwowania. Możemy użyć polecenia apparmor_parser, aby załadować profil do jądra:
[email protected]: cat /etc/apparmor.d/profile.name | sudo apparmor_parser -a
Aby wyłączyć profil, wystarczy utworzyć dowiązanie symboliczne do katalogu /etc/apparmor.d/disable.
[email protected]: ln -s /etc/apparmor.d/profile.name /etc/apparmor.d/disable
Aby ponownie włączyć profil, po prostu usuń dowiązanie symboliczne i ponownie załaduj profil.
[email protected]: rm /etc/apparmor.d/disable/profile.name cat /etc/apparmor.d/profile.name | apparmor_parser -a
Włączanie AppArmor dla zestawów replik MongoDB
Zanim użyjemy AppArmor w naszych zestawach replik MongoDB, musimy zdefiniować profil dla MongoDB, zarejestrować usługę binarną mongodb, katalogi danych i pliki dziennika oraz zezwolić na dostęp do sieci i systemu operacyjnego. Możemy również zdefiniować uprawnienia dla każdego katalogu, pliku binarnego i plików. Poniżej znajduje się przykładowy profil usługi 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.
}
Możemy umieścić powyższy profil MongoDB w pliku /etc/apparmor.d/usr.bin.mongod, a następnie uruchomić apparmor_parser, aby załadować profil.
[email protected]: cat /etc/apparmor.d/usr.bin.mongod | sudo apparmor_parser -a
Jeśli sprawdzimy za pomocą apparmor_status, poda on informacje o załadowanym profilu MongoDB:
[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
Możemy teraz powtórzyć powyższe kroki na każdym węźle naszego zestawu replik MongoDB, aby proces MongoDB był ograniczony i zabezpieczony przez AppArmor.