충분한 저장공간 또는 특별한 디스크에 MySQL 데이터 폴더를 위치시키는 경우가 많다. 이 때 폴더 접근 권한 설정은 SELinux를 고려해야한다. 이 페이지는 SELinux 에 대해 조금 소개하고 MySQL 데이터 폴더를 기본 위치에서 다른 경로로 이동하는 방법을 소개한다.
Selinux 맛보기
Security-Enhanced Linux (SELinux)는 보안 강화를 위한 리눅스 커널 모듈로써 1998년 NSA와 RedHat이 제안하고 레드햇이 개발을 담당했다.
이 보안 모듈은 2003년 8월 8일 버전 2.6을 기점으로 주류 리눅스 커널에 통합되었고, CentOS 4에 처음 적용되었다.
해결하고 싶은 문제
SELinux는 아래의 문제 해결에 관심이 있다:
- 사용자 제어 불가: 사용자가 임의로 모든 유저자가 읽고 쓸 수 있는 폴더 또는 파일을 생성할 수 있음
- 프로세스가 보안 특성을 변경 가능: 사용자의 메일 파일은 해당 사용자만 읽을 수 있지만, 메일 client 프로세스가 해당 파일을 모든 사용자가 읽을 수 있도록 변경 가능
동작 모드
세 가지 동작 모드로 구성된다.
- Enforcing: SELinux 보안정책 사용을 강제하고 접근 위반 행위를 기록함
- Permissive: SELinux가 사용되지만 보안정책을 강제하지는 않고 접근 위반에 대해 경고하고 위반 행위를 기록함
- Disable: SELinux 사용 안함
SELinux 동작 상태 확인 방법:
$ setstatus SELinux status: enabled SELinuxfs mount: /selinux Current mode: enforcing Mode from config file: enforcing Policy version: 21 Policy from config file: targeted
정책
SELinux는 기본적으로 접근을 거부하는 least-privilege 정책을 따른다. SELinux에서는 보안 정책을 "targeted policy"라는 용어로 정의하고 서로다른 보안정책간의 변환을 허용한다.
접근 제어
SELinux는 4가지 접근제어 형식 제공:
- Type Encorcement (TE): primary mechanism
- Role-Based Acess Control (RBAC): SELinux 사용자 기준의 접근제어
- Multi-Level Security (MLS)
- Multi-Category Security (MCS): MLS의 확장으로 virtual machine과 container 분류 (compartment)에 사용됨
SELinux context 정보 확인 방법:
$ ls -Z /var/lib/ drwxr-x--x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql $ ps axZ | grep mysqld system_u:system_r:mysqld_t:s0 1675 ? Sl 0:00 /usr/sbin/mysqld
MySQL Data 폴더 변경
사전 조건
semanage 설치
$ yum install policycoreutils-python
Step 1) MySQL 서비스 종료
$ systemctl stop mysqld
Step 2) 데이터 폴더 이동
설정 변경을 최소화하기 위해 Linux의 symbolic link 사용
- 새로운 데이터 폴더 위치: /data/mysql-data
$ mv /var/lib/mysql /data/mysql-data $ ln -s /data/mysql-data /var/lib/mysql
Step 3) SELinux context 설정
$ semanage fcontext -a -t mysqld_db_t "/data/mysql-data(/.*)?" $ restorecon -Rv /data/mysql-data
Step 4) MySQL 서비스 시작
$ systemctl start mysqld