SELinux コンテキストとは
SELinux がシステムに適用されると、どのプロセスがどのファイル、ディレクトリ、およびポートにアクセスできるかに関するルールがチェックされます。すべてのファイル、プロセス、ディレクトリ、およびポートには、SELinux コンテキストと呼ばれる特別なセキュリティ ラベルがあります。これは、プロセスがファイル、ディレクトリ、またはポートにアクセスできるかどうかを決定するために使用される名前です。デフォルトでは、明示的なルールによってアクセスが許可されない限り、ポリシーは対話を許可しません。
SELinux ラベルには、ユーザー、ロール、タイプ、機密性の異なるコンテキストがあります。ほとんどの Linux コマンドには、SELinux コンテキストを表示するための -Z オプションがあります。たとえば、ps、ls、cp、および mkdir はすべて -Z オプションを使用して、ファイル、ディレクトリ、プロセス、またはポートの SELinux コンテキストを表示または設定します。
SELinux コンテキストがこれらのファイルに正しく設定されていない場合、MySQL サーバーはさまざまなファイルの読み取りと書き込みを行い、mysqld プロセスがファイルへのアクセスをブロックされる可能性があります。場合によっては、これにより mysqld がエラーをログに記録できなくなることがあります。
現在の MySQL コンテキストを一覧表示する方法
以下を使用して、現在のコンテキストを一覧表示できます。
# semanage fcontext -l | grep -i mysql
データ ディレクトリ コンテキストの設定方法
データ ディレクトリのデフォルトの場所は /var/lib/mysql/ です 、使用される SELinux コンテキストは mysqld_db_t です .構成ファイルを編集して、データ ディレクトリに別の場所を使用するか、通常はデータ ディレクトリにある任意のファイル (バイナリ ログなど) を使用する場合は、
を使用して新しい場所のコンテキストを設定する必要があります。# semanage fcontext -a -t mysqld_db_t "/path/to/my/custom/datadir(/.*)?" # restorecon -Rv /path/to/my/custom/datadir
# semanage fcontext -a -t mysqld_db_t "/path/to/my/custom/logdir(/.*)?" # restorecon -Rv /path/to/my/custom/logdir
エラー ログ ファイルのコンテキストを設定する方法
RedHat RPM のデフォルトの場所は /var/log/mysqld.log です 、使用される SELinux コンテキストは mysqld_log_t です .構成ファイルを編集して別の場所を使用する場合は、次を使用して新しい場所のコンテキストを設定する必要がある場合があります:
# semanage fcontext -a -t mysqld_log_t "/path/to/my/custom/error.log" # restorecon -Rv /path/to/my/custom/error.log
PID ファイル コンテキストの設定方法
PID ファイルのデフォルトの場所は /var/run/mysqld/mysqld.pid です 、使用される SELinux コンテキストは mysqld_var_run_t です .構成ファイルを編集して別の場所を使用する場合は、次を使用して新しい場所のコンテキストを設定する必要がある場合があります:
# semanage fcontext -a -t mysqld_var_run_t "/path/to/my/custom/pidfile/directory/.*?" # restorecon -Rv /path/to/my/custom/pidfile/directory
UNIX ドメイン ソケット コンテキストの設定方法
unix ドメイン ソケットのデフォルトの場所は /var/lib/mysql/mysql.sock です 、使用される SELinux コンテキストは mysqld_var_run_t です .構成ファイルを編集して別の場所を使用する場合は、次を使用して新しい場所のコンテキストを設定する必要がある場合があります:
# semanage fcontext -a -t mysqld_var_run_t "/path/to/my/custom/mysql.sock" # restorecon -Rv /path/to/my/custom/mysql.sock
TCP ポート コンテキストの設定方法
デフォルトの TCP ポートは 3306 です 、使用される SELinux コンテキストは mysqld_port_t です .別の TCP ポートを使用するように構成ファイルを編集する場合、または追加のポート (通常はポート 13306) を使用するグループ レプリケーションを有効にする場合は、以下を使用して新しいポートのコンテキストを設定する必要がある場合があります。
# semanage port -a -t mysqld_port_t -p tcp 13306 # restorecon
secure_file_priv ディレクトリ コンテキストの設定方法
5.5.53、5.6.34、および 5.7.16 以降の MySQL バージョンの場合。サーバー RPM をインストールすると、ディレクトリ /var/lib/mysql-files/ が作成されますが、このディレクトリに SELinux コンテキストは設定されません。このディレクトリは、「SELECT … INTO OUTFILE」などの操作に使用することを目的としています '。 secure_file_priv を設定してこのディレクトリの使用を有効にした場合、以下を使用してコンテキストを設定する必要がある場合があります:
# semanage fcontext -a -t mysqld_db_t "/var/lib/mysql-files/(/.*)?" # restorecon -Rv /var/lib/mysql-files
これを新しい場所に設定する場合は、パスを編集する必要があります。この変数の詳細については、https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv を参照してください。セキュリティのため、このディレクトリはデータ ディレクトリ内に配置しないでください。
必要なツール
semanage バイナリは、policycoreutils-python パッケージの一部です:
# yum install policycoreutils-python
python 2.6 を搭載した RHEL 6 の初期バージョンで semanage を使用するには、EPEL リポジトリから python-pip を使用して OrderedDict python コレクション モジュールのバックポートをインストールする必要がある場合があります。
EPEL リポジトリをインストールします:
# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/$(uname -m)/epel-release-6-8.noarch.rpm
python-pip をインストールします:
# yum install python-pip
python-pip をインストールするとこのエラーが返される場合:
Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
以下を使用して SSL CA 証明書を更新する必要がある場合があります。
# yum --disablerepo=epel -y update ca-certificates