データベースの強化について話している場合、セキュリティには多くのセクションとレイヤーがあります。これは、基盤となるストレージディスクの暗号化、データベースアクセス権限、認証、ネットワークアクセス制御、SSL / TLSを使用した送信中のデータ、およびオペレーティングシステム自体の強化から始まります。
オペレーティングシステムの強化には、使用および利用されないサーバーサービスの無効化または削除、SSHルートログインの無効化、rsyslogの有効化、rootsアカウントを使用したアクセスの制限など、多くのチェックリストが含まれる場合があります。コンソール、システム監査の有効化、およびSELinuxの有効化。
たとえば、MongoDBデータベースが誤ってインターネットに公開され、データベースサーバーに感染し、MongoDBが実行しようとしている悪意のあるコードをトリガーしたマルウェアがあった場合、AppArmorはそのような実行を防止します。 MongoDBプロファイルは、特定のMongoDBファイルでのみ読み取り、実行、および書き込みを行うように既に構成されています。
このブログでは、MongoDBレプリカセットのAppArmor実装について説明します。
MongoDBレプリカセットをデプロイする場合、ClusterControlを使用すると作業が楽になります。 2つのデプロイメントページを通過するだけで、ClusterControlはMongoDBレプリカセットをデプロイする準備が整います。以下に示すように、デプロイ中にSELinux/AppArmorを無効にするオプションがあります。
AppArmor/SELinuxのオプションを無効にすることができます。次に、データベースノードのIPアドレス、管理者パスワード、およびデプロイするMongoDBバージョンを入力します。
MongoDBレプリカセットがデプロイされたら、各ノードサーバーにジャンプできますAppArmorの構成用。
AppArmorの設定
すべてのプロセスは、AppArmorのプロファイルによって制限されています。プロファイルを実行できるオプションには、強制モードと苦情モードの2つがあります。強制モードが使用されている場合、アプリケーションが制限されたアクションを実行するのを防ぎ、苦情モードの場合、アプリケーションが制限されたアクションを実行してログエントリを作成できるようにします。各プロファイルはディレクトリ/etc/apparmor.d
に保存されます次のコマンドを実行して、AppArmorサービスのステータスを確認できます。
[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.
ロードされたプロファイルのリスト、苦情モードおよび強制モードのプロファイルとプロセスの数に関する情報が表示されます。 apparmor_parserコマンドを使用して、プロファイルをカーネルにロードできます:
[email protected]: cat /etc/apparmor.d/profile.name | sudo apparmor_parser -a
プロファイルを無効にするには、ディレクトリ/etc/apparmor.d/disableへのシンボリックリンクを作成する必要があります。
[email protected]: ln -s /etc/apparmor.d/profile.name /etc/apparmor.d/disable
プロファイルを再度有効にするには、シンボリックリンクを削除して、プロファイルを再度リロードします。
[email protected]: rm /etc/apparmor.d/disable/profile.name cat /etc/apparmor.d/profile.name | apparmor_parser -a
MongoDBレプリカセットのAppArmorを有効にする
MongoDBレプリカセットでAppArmorを使用する前に、MongoDBのプロファイルを定義し、mongodbバイナリサービス、データディレクトリ、ログファイルを登録し、ネットワークとオペレーティングシステムへのアクセスを許可する必要があります。各ディレクトリ、バイナリ、およびファイルのアクセス許可を定義することもできます。以下は、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.
}
上記のMongoDBプロファイルを/etc/apparmor.d/usr.bin.mongodファイルに入れてから、apparmor_parserを実行してプロファイルをロードできます。
[email protected]: cat /etc/apparmor.d/usr.bin.mongod | sudo apparmor_parser -a
apparmor_statusを使用して確認すると、ロードされた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
これで、MongoDBレプリカセットの各ノードで上記の手順を繰り返して、MongoDBプロセスをAppArmorによって制限および保護することができます。