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 -
루트로 로그인하십시오. 다음 명령을 실행하십시오.
# 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. 이 키를 제공하는 웹 서버가 신뢰할 수 있는지 확인하세요. 새 저장소의 보안은 여기에 달려 있습니다.
# 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가 실행 중인지 확인하세요. 그렇다면 다음 두 호스트를 구성할 수 있습니다. 이전과 같이 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 시작 실패는 [경고]로만 기록됩니다. ^(
이런 일을 하는 것은 이번이 처음입니다. 개선되었으면 좋겠습니다 :^)