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/mysql drwx------. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql
~]# ls -lZ /var/lib/mysql drwx------. mysql mysql system_u:object_r:mysqld_db_t:s0 mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow これは、データベースファイルの場所のデフォルトのコンテキスト要素であるmysqld_db_tを示しています。このコンテキストを適切に機能させるために、この例で使用される新しいデータベースの場所に、手動で適用する必要があります。- 次のコマンドを入力し、
mysqldroot パスワードを入力して、利用可能なデータベースを表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow mariadb.serviceサービスを停止します。systemctl stop mariadb.service
~]# systemctl stop mariadb.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow - データベースの新しい場所に、新しいディレクトリーを作成します。この例では、
/mysql/が使用されています。mkdir -p /mysql
~]# mkdir -p /mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 古い場所から新しい場所に、データベースファイルをコピーします。
cp -R /var/lib/mysql/* /mysql/
~]# cp -R /var/lib/mysql/* /mysql/Copy to Clipboard Copied! Toggle word wrap Toggle overflow - mysql ユーザーおよびグループによるアクセスを許可するように、この場所の所有権を変更します。これにより、SELinux が引き続き監視する従来の Unix パーミッションが設定されます。
chown -R mysql:mysql /mysql
~]# chown -R mysql:mysql /mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下のコマンドを実行すると、作成したディレクトリーの初期コンテキストが表示されます。
ls -lZ /mysql drwxr-xr-x. mysql mysql unconfined_u:object_r:usr_t:s0 mysql
~]# ls -lZ /mysql drwxr-xr-x. mysql mysql unconfined_u:object_r:usr_t:s0 mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 新しく作成されたこのディレクトリーのコンテキストusr_tは、現在、MariaDB データベースファイルの場所として SELinux には適していません。コンテキストを変更すると、MariaDB はこのエリアで適切に機能できるようになります。 - テキストエディターで、MariaDB のメイン設定ファイル
/etc/my.cnfを開き、新しい場所を参照できるようにdatadirオプションを変更します。この例で入力する必要のある値は/mysqlです。[mysqld] datadir=/mysql
[mysqld] datadir=/mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow このファイルを保存して終了します。 mariadb.serviceを起動します。サービスの起動に失敗し、拒否メッセージが/var/log/messagesファイルに記録されます。systemctl start mariadb.service Job for mariadb.service failed. See 'systemctl status mariadb.service' and 'journalctl -xn' for details.
~]# systemctl start mariadb.service Job for mariadb.service failed. See 'systemctl status mariadb.service' and 'journalctl -xn' for details.Copy to Clipboard Copied! Toggle word wrap Toggle overflow ただし、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
SELinux is preventing /usr/libexec/mysqld "write" access on /mysql. For complete SELinux messages. run sealert -l b3f01aff-7fa6-4ebe-ad46-abaef6f8ad71Copy to Clipboard Copied! Toggle word wrap Toggle overflow この拒否の理由は、MariaDB データファイルに対して/mysql/が正しくラベル付けされていないことです。SELinux により、MariaDB がusr_tとラベル付けされたコンテンツにアクセスできなくなりました。この問題を解決するには、以下の手順を実行します。- 以下のコマンドを入力して、
/mysql/のコンテキストマッピングを追加します。semanageユーティリティーは、デフォルトではインストールされないことに注意してください。同梱されていない場合は、policycoreutils-python をインストールしてください。semanage fcontext -a -t mysqld_db_t "/mysql(/.*)?"
~]# semanage fcontext -a -t mysqld_db_t "/mysql(/.*)?"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - このマッピングは、
/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
~]# grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local /mysql(/.*)? system_u:object_r:mysqld_db_t:s0Copy to Clipboard Copied! Toggle word wrap Toggle overflow - これで
restoreconユーティリティーを使用して、このコンテキストマッピングを実行中のシステムに適用します。restorecon -R -v /mysql
~]# restorecon -R -v /mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow /mysql/の場所には MariaDB の正しいコンテキストでラベル付けされ、mysqldが起動します。systemctl start mariadb.service
~]# systemctl start mariadb.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow /mysql/に対してコンテキストが変更されたことを確認します。ls -lZ /mysql drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql
~]$ ls -lZ /mysql drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - この場所が変更され、ラベルが付けられ、
mysqldが正常に起動されました。この時点で、実行中のすべてのサービスをテストして、通常の操作を確認してください。