SELinux 를 enforce mode로 사용시 MySQL database 경로 변경하기

 

개요

MySQL 의 기본 데이타베이스 경로는  /var/lib/mysql 이며 context 는 mysqld_db_t 이다.  다른 OS에서 경로를 변경하려면 data를 옮기고 /etc/my.cnf 의 datadir  항목을 수정하고 재구동하면 되지만 SELinux 는 좀 더 많은 설정이 필요하다.

 

설정

  1. 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/ 
  2. MySQL 을 중지한다.

    service mysql stop
  3. 데이타 경로로 사용할 폴더를 생성한다. (/mysql 이라 가정)

    mkdir -p /mysql
  4. 데이타 파일 복사((warning) mv 대신 cp 로 해야 한다. 참고 - cp/mv 와 SELinux security context)

    cp -R /var/lib/mysql/* /mysql/
  5. ownership 을 mysql 로 변경한다.

    chown -R mysql:mysql /mysql
  6. semange 명령어로 /mysql 을 file context  에 추가한다.

    semanage fcontext -a -t mysqld_db_t "/mysql(/.*)?"
  7. 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
  8. /etc/my.cnfdatadir 을 수정한다.

    [mysqld]
    datadir=/mysql
  9. restorecon 으로 /home/mysql 의 contextg 를 re-label 한다. 또는 명시적으로 chcon -R -t mysqld_db_t /home/mysql 을 수행해도 된다.

    restorecon -R -v /mysql 
  10. mysql 서버스를 구동한다.

    service mysql start
  11. 정상 동작 여부를 확인한다.

 

 

Ref