Show Table of Contents
20.4. 設定例
20.4.1. MariaDB のデータベース格納場所を変更する
Red Hat Enterprise Linux を使用する場合、MariaDB のデフォルトのデータベース格納場所は
/var/lib/mysql/ になります。SELinux はこの場所にこのデータベースがデフォルトで配置されることを予期しているので、この領域にはすでに mysqld_db_t タイプを使った適切なラベル付けが行われています。
データベースを格納する場所は、個別の環境要件や設定に応じて変更することもできますが、適切にラベル付けを行い、SELinux が変更後の新しい場所を認識することが重要となります。以下の例では、MariaDB データベースの格納場所を変更する方法、また この新しい格納場所にラベルをつけて SELinux がコンテンツに基づいて保護メカニズムを適用できるようにする方法を説明します。
以下に示す例は、SELinux が MariaDB に対して与える影響を示す一例に過ぎません。MariaDB に関する総合的な説明は本ガイドの対象外となります。詳細については、公式の MariaDB ドキュメント を参照してください。ここでは、mariadb-server パッケージと setroubleshoot-server パッケージがインストールされていること、
auditd サービスが実行されていること、有効なデータベースがデフォルトの場所である /var/lib/mysql/ にあることを前提としています。
mysqlのデフォルトのデータベース格納場所の SELinux コンテキストを表示します。~]#
ls -lZ /var/lib/mysqldrwx------. mysql mysql system_u:object_r:mysqld_db_t:s0 mysqlデータベースファイルの格納場所にデフォルトで付けられるコンテキスト要素のmysqld_db_tが表示されています。この例で使用する新しいデータベース格納場所が期待通り正常に動作するよう、このコンテキストをその新しい場所に手作業で適用する必要があります。- 以下のコマンドを実行し、
mysqldの root パスワードを入力して、利用可能なデータベースを表示します。~]#
mysqlshow -u root -pEnter password: ******* +--------------------+ | Databases | +--------------------+ | information_schema | | mysql | | test | | wikidb | +--------------------+ mysqldデーモンを停止します。~]#
systemctl stop mariadb.service- データベース格納場所となるディレクトリーを新規作成します。この例では
/mysql/を使用しています。~]#
mkdir -p /mysql - 古い場所にあるデータベースファイルを新しい場所にコピーします。
~]#
cp -R /var/lib/mysql/* /mysql/ - この場所の所有権を変更して、mysql ユーザーおよび mysql グループによるアクセスを許可します。これは従来の Unix パーミッションを設定するもので、SELinux はこれを順守します。
~]#
chown -R mysql:mysql /mysql - 以下のコマンドを実行して、新規ディレクトリーの初期のコンテキストを確認します。
~]#
ls -lZ /mysqldrwxr-xr-x. mysql mysql unconfined_u:object_r:usr_t:s0 mysql新規作成されたこのディレクトリーのコンテキストusr_tは現在、MariaDB データベースファイルの格納場所として SELinux に適したものではありません。コンテキストを変更すると、MariaDB がこの場所で正しく動作できるようになります。 - MariaDB のメインとなる設定ファイル
/etc/my.cnfをテキストエディターで開き、新しい格納場所を参照するようdatadirオプションを編集します。この例の場合、/mysqlの値を入力します。[mysqld] datadir=/mysql
このファイルを保存してから終了します。 mysqldを起動します。サービスは起動に失敗し、拒否メッセージが/var/log/messagesファイルにログ記録されるはずです。~]#
systemctl start mariadb.serviceJob for mariadb.service failed. See 'systemctl status postgresql.service' and 'journalctl -xn' for details.ただし、auditデーモンがsetroubleshootサービスとともに実行されている場合は、拒否メッセージは/var/log/audit/audit.logにログ記録されます。SELinux is preventing /usr/libexec/mysqld "write" access on /mysql. For complete SELinux messages. run sealert -l b3f01aff-7fa6-4ebe-ad46-abaef6f8ad71
この拒否の理由は、/mysql/に MariaDB のデータファイル用として適切なラベルが付けられていないためです。SELinux は、MariaDB がusr_tタイプのラベルが付いたコンテンツにアクセスすることを禁止しています。この問題を解決するには、以下の手順にしたがいます。- 以下のコマンドを実行し、
/mysql/のコンテキストマッピングを追加します。semanageユーティリティーはデフォルトではインストールされていないことに注意してください。インストールされていない場合は、policycoreutils-python パッケージをインストールします。~]#
semanage fcontext -a -t mysqld_db_t "/mysql(/.*)?" - このマッピングは
/etc/selinux/targeted/contexts/files/file_contexts.localファイルに書き込まれます。~]#
grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local/mysql(/.*)? system_u:object_r:mysqld_db_t:s0 restoreconユーティリティーを使ってこのコンテキストマッピングを稼働中のシステムに適用します。~]#
restorecon -R -v /mysql- これで
/mysql/の場所に MariaDB 用の適切なコンテキストがラベル付けされたので、mysqldを起動できます。~]#
systemctl start mariadb.service /mysql/のコンテキストが変更されたことを確認します。~]$
ls -lZ /mysqldrwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql- データ格納場所が変更され、ラベルが適切に付けられたため、
mysqldデーモンが正常に起動するようになりました。この時点で、実行中の全サービスが正常に動作しているかテストしてください。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.