私たちが今住んでいる時代では、安全性の低い環境のものはすべて攻撃の標的になりやすく、攻撃者にとっては報奨金になります。過去20年間と比較して、最近のハッカーは、スキルだけでなく、使用しているツールについても高度になっています。一部の巨大企業がハッキングされ、その貴重なデータが漏洩しているのは当然のことです。
2021年だけでも、データ侵害に関連するインシデントはすでに10件以上あります。最新の事件は、5月に発生した有名なオーディオメーカーであるBOSEによって報告されました。 BOSEは、現在および元の従業員の個人情報の一部が攻撃者によってアクセスされていることを発見しました。攻撃で公開された個人情報には、名前、社会保障番号、報酬情報、およびその他の人事関連情報が含まれます。
この種の攻撃の目的は何だと思いますか?また、ハッカーがそうする動機は何ですか?明らかにお金がすべてです。盗まれたデータも頻繁に販売されるため、大企業を攻撃することでハッカーはお金を稼ぐことができます。重要なデータをビジネスの競合他社に販売できるだけでなく、ハッカーは同時に巨額の身代金を要求することもできます。
では、これをデータベースにどのように関連付けることができるでしょうか。データベースは会社にとって大きな資産の1つであるため、貴重なデータをほとんどの時間保護できるように、セキュリティを強化してデータベースを管理することをお勧めします。前回のブログ投稿では、SELinux、それを有効にする方法、SELinuxのモードの種類、MongoDB用に構成する方法についてすでにいくつか紹介しました。今日は、MySQLベースのシステム用にSELinuxを構成する方法を見ていきます。
先に進む前に、SELinuxを有効にするのが少し面倒であるため、SELinuxがプラスのメリットをもたらすかどうか疑問に思われる方もいらっしゃるかもしれません。見逃したくない、考慮すべきSELinuxのメリットのトップ5は次のとおりです。
-
データの機密性と整合性を強化すると同時に、プロセスを保護する
-
サービスとデーモンをより予測可能に制限する機能
-
特権昇格攻撃のリスクを軽減
-
ポリシーはシステム全体に適用され、ユーザーの裁量で設定されたり、管理者が定義したりすることはありません
-
きめ細かいアクセス制御の提供
MySQLインスタンス用にSELinuxの構成を開始する前に、MySQLベースのすべてのデプロイメントでClusterControlを使用してSELinuxを有効にする方法を確認してみませんか。手順はすべてのデータベース管理システムで同じですが、参照用にスクリーンショットをいくつか含めることをお勧めします。
このセクションでは、ClusterControl1.8.2を使用してMySQLレプリケーションをデプロイします。手順はMariaDB、Galera Cluster、MySQLの場合と同じです。すべてのノードの準備ができており、パスワードなしのSSHが構成されていると仮定して、展開を開始しましょう。セットアップでSELinuxを有効にするには、「AppArmor / SELinuxを無効にする」のチェックを外す必要があります。これは、SELinuxがすべてのノードに対して「許可」として設定されることを意味します。
次に、ベンダーとしてPerconaを選択します(MariaDBも選択できます)。 、OracleまたはMySQL 8)、「root」パスワードを指定します。設定に応じて、デフォルトの場所または他のディレクトリを使用できます。
すべてのホストが追加されたら、デプロイを開始して許可することができますSELinux構成を開始する前に終了してください。
このセクションでは、ClusterControl1.8.2を使用してMariaDBレプリケーションをデプロイします。
ベンダーおよびバージョン10.5としてMariaDBを選択し、 「root」パスワード。設定に応じて、デフォルトの場所または他のディレクトリを使用できます。
すべてのホストが追加されたら、デプロイを開始して許可することができますSELinux構成に進む前に終了してください。
このセクションでは、ClusterControl1.8.2を使用してGaleraClusterをデプロイします。もう一度、「Disable AppArmor / SELinux」のチェックを外します。これは、SELinuxがすべてのノードに対して「permissive」として設定されることを意味します。
次に、ベンダーとしてPerconaを選択し、MySQL8と同様に「root」パスワードを指定します。設定に応じて、デフォルトの場所または他のディレクトリを使用できます。すべてのホストが追加されたら、展開を開始して終了させることができます。
通常どおり、UIの[アクティビティ]セクションで展開のステータスを監視できます。
すべてのクラスターがMySQLベースであることを考慮すると、SELinuxを構成する手順も同じです。セットアップを開始する前に、これは新しくセットアップされた環境であるため、以下のスクリーンショットのように、クラスターとノードの両方で自動回復モードを無効にすることをお勧めします。これを行うことで、テストの実行中またはサービスの再起動中にクラスターがフェイルオーバーに陥るのを回避できます。
まず、「mysql」のコンテキストを見てみましょう。先に進み、次のコマンドを実行してコンテキストを表示します。
$ ps -eZ | grep mysqld_t
system_u:system_r:mysqld_t:s0 845 ? 00:00:01 mysqld
-
system_u-ユーザー
-
system_r-役割
-
mysqld_t-タイプ
-
s0845-感度レベル
SELinuxのステータスを確認すると、ステータスが「permissive」であり、まだ完全には有効になっていないことがわかります。モードを「強制」に変更する必要があります。これを実現するには、SELinux構成ファイルを編集して永続的にする必要があります。
$ vi /etc/selinux/config
SELINUX=enforcing
変更後、システムの再起動に進みます。モードを「permissive」から「enforcing」に変更しているので、ファイルシステムに再度ラベルを付ける必要があります。通常、ファイルシステム全体のラベルを変更するか、1つのアプリケーションのみのラベルを変更するかを選択できます。 「強制」モードを正しく実行するには正しいラベルまたは機能が必要であるため、再ラベル付けが必要な理由。場合によっては、これらのラベルは「許容」または「無効」モード中に変更されます。
この例では、次のコマンドを使用して1つのアプリケーション(MySQL)のみにラベルを付け直します。
$ fixfiles -R mysqld restore
かなり長い間使用されてきたシステムの場合、ファイルシステム全体のラベルを変更することをお勧めします。次のコマンドは再起動せずにジョブを実行します。システムによっては、このプロセスに時間がかかる場合があります。
$ fixfiles -f -F relabel
他の多くのデータベースと同様に、MySQLも多くのファイルの読み取りと書き込みを要求します。これらのファイルの正しいSELinuxコンテキストがないと、アクセスは間違いなく拒否されます。 SELinuxのポリシーを構成するには、「semanage」が必要です。 「semanage」を使用すると、ポリシーソースを再コンパイルしなくても任意の構成が可能になります。ほとんどのLinuxシステムでは、このツールはデフォルトですでにインストールされています。私たちの場合、すでに次のバージョンでインストールされています:
$ rpm -qa |grep semanage
python3-libsemanage-2.9-3.el8.x86_64
libsemanage-2.9-3.el8.x86_64
インストールされていないシステムの場合、次のコマンドがインストールに役立ちます。
$ yum install -y policycoreutils-python-utils
では、MySQLファイルのコンテキストを見てみましょう:
$ semanage fcontext -l | grep -i mysql
お気づきかもしれませんが、上記のコマンドを実行すると、MySQLに接続されるファイルがたくさんあります。最初に思い出すと、デフォルトの「サーバーデータディレクトリ」を使用しています。インストールで別のデータディレクトリの場所を使用している場合は、/ var / lib / mysql /
を参照する「mysql_db_t」のコンテキストを更新する必要があります。最初のステップは、次のオプションのいずれかを使用してSELinuxコンテキストを変更することです。
$ semanage fcontext -a -t mysqld_db_t /var/lib/yourcustomdirectory
$ semanage fcontext -a -e /var/lib/mysql /var/lib/yourcustomdirectory
After the step above, run the following command:
$ restorecon -Rv /var/lib/yourcustomdirectory
最後に、サービスを再起動します:
$ systemctl restart mysql
一部の設定では、目的に応じて別のログの場所が必要になる可能性があります。この状況では、「mysqld_log_t」も更新する必要があります。 「mysqld_log_t」はデフォルトの場所/var/log/mysqld.logのコンテキストであり、以下の手順を実行して更新できます。
$ semanage fcontext -a -t mysqld_log_t "/your/custom/error.log"
$ restorecon -Rv /path/to/my/custom/error.log
$ systemctl restart mysql
デフォルトのポートが3306以外の別のポートを使用して構成されている場合があります。たとえば、MySQLにポート3303を使用している場合は、次のコマンドでSELinuxコンテキストを定義する必要があります。 :
$ semanage port -a -t mysqld_port_t -p tcp 3303
ポートが更新されたことを確認するには、次のコマンドを使用できます。
$ semanage port -l | grep mysqld
audit2allowを使用したポリシーの生成
ポリシーを構成する別の方法は、「semanage」のインストール中にすでに含まれている「audit2allow」を使用することです。このツールの機能は、audit.logからログイベントを取得し、その情報を使用してポリシーを作成することです。 MySQLに非標準のポリシーが必要な場合があるため、これがそれを実現するための最良の方法です。
まず、MySQLドメインに対して許可するモードを設定し、変更を確認します。
$ semanage permissive -a mysqld_t
$ semodule -l | grep permissive
permissive_mysqld_t
permissivedomains
次のステップは、以下のコマンドを使用してポリシーを生成することです。
$ grep mysqld /var/log/audit/audit.log | audit2allow -M {yourpolicyname}
$ grep mysqld /var/log/audit/audit.log | audit2allow -M mysql_new
次のような出力が表示されます(設定したポリシー名によって異なります):
********************重要********************* **
このポリシーパッケージをアクティブにするには、次を実行します。
semodule -i mysql_new.pp
前述のように、ポリシーをアクティブ化するには、「semodule-imysql_new.pp」を実行する必要があります。先に進んで実行します:
$ semodule -i mysql_new.pp
最後のステップは、MySQLドメインを「強制」モードに戻すことです。
$ semanage permissive -d mysqld_t
libsemanage.semanage_direct_remove_key:最後のpermissive_mysqld_tモジュールを削除します(他のpermissive_mysqld_tモジュールは別の優先度で存在しません)。
SELinuxが機能しない場合はどうすればよいですか?
多くの場合、SELinux構成には非常に多くのテストが必要です。構成をテストする最良の方法の1つは、モードを「許容」に変更することです。 MySQLドメインに対してのみ設定する場合は、次のコマンドを使用できます。これは、システム全体を「許容」に構成しないようにするための良い方法です。
$ semanage permissive -a mysqld_t
すべてが完了したら、モードを「強制」に戻すことができます。
$ semanage permissive -d mysqld_t
それに加えて、/ var / log / audit / audit.logは、SELinuxに関連するすべてのログを提供します。このログは、根本的な原因と理由を特定するのに大いに役立ちます。 「grep」を使用して「denied」をフィルタリングするだけです。
$ more /var/log/audit/audit.log |grep "denied"
これで、MySQLベースのシステムのSELinuxポリシーの構成が完了しました。言及する価値のあることの1つは、クラスターのすべてのノードで同じ構成を実行する必要があることです。それらに対して同じプロセスを繰り返す必要がある場合があります。