RHEL 7またはCentOS 7でTLSを介してGaleraおよびMariaDBバージョン10.1をインストールして使用し、SCL(ソフトウェアコレクション)を使用せずに強制モードでSELinuxを有効にする方法は?
答え1
仮説
- 誰ですかいいえRHEL 7 SCL(ソフトウェアコレクション)またはrh-mariadb101 {、-galera}を使用する
- RHEL 7 / CentOS 7サーバーがありますエッフェルインストール済み
- SELinux が必要で実行中で適用されます。
- Firewalldはデフォルトで実行されブロックされます。
- 3つのホストIPは1.2.3.4、1.2.3.5、1.2.3.6です。
ファイアウォールの構成
GaleraとMariaDBが正常に動作するために必要なポートは、TCPポート4444、4567、4568、およびUDPポート4567です。 MariaDBにはTCPポート3306が必要です。この構成では、ホスト 1.2.3.4、1.2.3.5、および 1.2.3.6 だけでなく、将来のホスト IP 1.2.3.7 もクラスタの一部になる可能性があると仮定します。また、この構成では、すべてのホストがポート3306に接続できると想定しています。ログインしてsu -
root でログインします。次のコマンドを実行します。
# firewall-cmd --zone=public --add-port=3306/tcp
# firewall-cmd --zone=public --add-port=3306/tcp --permanent
# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="1.2.3.4/30" port port=4444 protocol=tcp accept'
# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="1.2.3.4/30" port port=4444 protocol=tcp accept' --permanent
# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="1.2.3.4/30" port port=4567 protocol=tcp accept'
# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="1.2.3.4/30" port port=4567 protocol=tcp accept' --permanent
# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="1.2.3.4/30" port port=4568 protocol=tcp accept'
# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="1.2.3.4/30" port port=4568 protocol=tcp accept' --permanent
# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="1.2.3.4/30" port port=4567 protocol=udp accept'
# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="1.2.3.4/30" port port=4567 protocol=udp accept' --permanent
SELinuxポリシーの準備
ログインしてsu -
ルーティングしてください。次の手順を実行または実行します。最後の行は、デフォルト以外のデータ位置にのみ必要です。/home
データ位置をまたはsystemdに設定すると、/usr
MariaDBの書き込みが禁止され、MariaDBが失敗します。この問題を解決するには、ProtectSystem=false
ユニットファイルで設定してください/lib/systemd/system/mariadb.service
。それからsystemctl daemon-reload
。
# mkdir selinux && cd selinux
# cat > galera.te << XYZZY
module galera 1.0;
require {
type unconfined_t;
type initrc_tmp_t;
type rsync_exec_t;
type init_t;
type mysqld_t;
class process setpgid;
class file { execute execute_no_trans getattr open read };
class service enable;
}
#============= mysqld_t ==============
allow mysqld_t initrc_tmp_t:file open;
allow mysqld_t rsync_exec_t:file { execute execute_no_trans getattr open read };
allow mysqld_t self:process setpgid;
#============= unconfined_t ==============
allow unconfined_t init_t:service enable;
XYZZY
# checkmodule -M -m galera.te -o galera.mod
# semodule_package -m galera.mod -o galera.pp
# semodule -i galera.pp
# semanage port -m -t mysqld_port_t -p tcp 4567
# semanage port -m -t mysqld_port_t -p udp 4567
# semanage port -m -t mysqld_port_t -p tcp 4444
# semanage port -m -t mysqld_port_t -p tcp 4568
# semanage fcontext -a -t mysqld_db_t "/alternate/path/to/data/mysql(/.*)?"
MariaDBリポジトリの追加、パッケージのインストール、構成
ダウンロードhttps://yum.mariadb.org/RPM-GPG-KEY-MariaDB。このキーを提供するWebサーバーが信頼できることを確認してください。新しいリポジトリのセキュリティはここに依存します。
# cp RPM-GPG-KEY-MariaDB /etc/pki/rpm-gpg/ ; chmod ugo+r /etc/pki/rpm-gpg/RPM-GPG-KEY-MariaDB
# cat > /etc/yum.repos.d/mariadb.repo << XYZZY
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/rhel7-amd64
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-MariaDB
gpgcheck = 1
enabled = 1
XYZZY
# chmod ugo+r /etc/yum.repos.d/mariadb.repo
# yum install MariaDB-server galera
パッケージのインストール後にクラスタを作成する前に、一般的な手順に従ってMariaDBを構成する必要があります。以下の最初の行は、デフォルト値とは異なるデータ位置を使用する場合にのみ必要です。
# mysql_install_db --user=mysql --group=mysql --ldata=/alternate/path/to/data/mysql
# systemctl start mariadb
# mysql_secure_installation
# systemctl stop mariadb
# galera_new_cluster
MariaDB + Galeraが実行されていることを確認してください。その場合は、次の2つのホストを構成できます。以前のようにSELinuxルールとパッケージをインストールしますが、/etc/my.cnf.d/server.cnfの[galera]セクションに次の行を追加します。元の galera サーバの IP が 1.2.3.4 で、対応するピアサーバの IP が 1.2.3.5 および 1.2.3.6 であると仮定します。キャッシュサイズをシステムに適したサイズに設定します。
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_provider_options="gcache.size=1024M; gcache.page_size=1024M"
wsrep_cluster_address=gcomm://1.2.3.4,1.2.3.5,1.2.3.6
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
# systemctl start mariadb
この時点で、ログはデータが最初のサーバーから現在のサーバーにコピーされたことを示す必要があります。残りのサーバーでこの手順を繰り返します。
これで、ソースサーバーでMariaDBを停止し、/etc/my.cnf.d/server.cnf
ソースサーバーでMariaDBを再起動します。ピア間でデータが同期していることを確認してください。
TLSの有効化
このオプションのセクションでは、X.509v3 証明書と対応する秘密鍵をすでに生成していると仮定します。証明書と鍵の両方を暗号化されていないPEM形式で保存する必要があります。この例では、ファイル名がそれぞれserver.crt
と仮定されていますserver.key
。
# cp server.crt /etc/pki/tls/certs/ ; chmod ugo+r /etc/pki/tls/certs/server.crt ; cp server.key /etc/pki/tls/private/server.key ; chmod 640 /etc/pki/tls/private/server.key ; chgrp mysql /etc/pki/tls/private/server.key
/etc/my.cnf.d/server.cnf
このセクションに次の行を追加します[mysqld]
。 ssl_cert=/etc/pki/tls/certs/server.crt ssl_key=/etc/pki/tls/private/server.key
/etc/systemd/system/mariadb.service.d/TLS.conf
次のコンテンツにします。
[service]
Environment=”MYSQLD_OPTS=--ssl”
Systemd は systemd と同じなので、systemctl daemon-reload
もう一度実行して新しい設定を読みます。
MariaDBがTLS接続を受け入れるには、サーバーを再起動する必要があります。この構成ステップではTLSを使用できますが、必須ではありません。
ログを確認して、MariaDBがTLSが有効になってロードされていることを確認してくださいjournalctl _SYSTEMD_UNIT=mariadb.service
。 TLS 起動失敗は [警告] としてのみ記録されます。 ^(
このようなことをするのは今回が初めてです。改善されたらと思います:^)