SELinux 를 enforce mode로 사용시 MySQL database 경로 변경하기
개요
MySQL 의 기본 데이타베이스 경로는 /var/lib/mysql 이며 context 는 mysqld_db_t 이다. 다른 OS에서 경로를 변경하려면 data를 옮기고 /etc/my.cnf 의 datadir 항목을 수정하고 재구동하면 되지만 SELinux 는 좀 더 많은 설정이 필요하다.
설정
SELinux의 mysql database context 를 확인해 본다.
ls -ldZ /var/lib/mysql/ drwxr-xr-x. mysql mysql unconfined_u:object_r:mysqld_db_t:s0 /var/lib/mysql/
MySQL 을 중지한다.
service mysql stop
데이타 경로로 사용할 폴더를 생성한다. (/mysql 이라 가정)
mkdir -p /mysql
데이타 파일 복사( mv 대신 cp 로 해야 한다. 참고 - cp/mv 와 SELinux security context)
cp -R /var/lib/mysql/* /mysql/
ownership 을 mysql 로 변경한다.
chown -R mysql:mysql /mysql
semange 명령어로 /mysql 을 file context 에 추가한다.
semanage fcontext -a -t mysqld_db_t "/mysql(/.*)?"
mapping 된 file 은 /etc/selinux/targeted/contexts/files/file_contexts.local 에 저장된다. grep 으로 매핑된 정보를 다시 한 번 확인한다.
grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local /var/lib/mysql system_u:object_r:mysqld_db_t:s0 /mysql(/.*)? system_u:object_r:mysqld_db_t:s0
/etc/my.cnf 의 datadir 을 수정한다.
[mysqld] datadir=/mysql
restorecon 으로 /home/mysql 의 contextg 를 re-label 한다. 또는 명시적으로 chcon -R -t mysqld_db_t /home/mysql 을 수행해도 된다.
restorecon -R -v /mysql
mysql 서버스를 구동한다.
service mysql start
- 정상 동작 여부를 확인한다.
Ref