GNU/Linux >> Linux の 問題 >  >> Cent OS

MySQL サーバーの SELinux コンテキストを一覧表示および設定する方法

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


Cent OS
  1. プレーンサーバー、cPanelサーバー、PleskサーバーのMySQLルートパスワードをリセットするにはどうすればよいですか?

  2. Ubuntu /DebianLAMPサーバーをセットアップする方法

  3. CentOS 8でDHCPサーバーをセットアップする-その方法は?

  1. Ubuntu20.04にmysql8をインストールしてセットアップする方法

  2. CentOSで時刻同期のためにNTPをインストールして設定する方法は?

  3. UbuntuとCentOSでNginxサーバーブロックを設定する方法

  1. Ubuntu20.04でNFSサーバーとクライアントをセットアップする方法

  2. CentOS7にMySQLサーバーをインストールする方法

  3. SELinux モードとは何か、およびその設定方法