20.4. 설정 예
20.4.1. MariaDB 데이터베이스 위치 변경
Red Hat Enterprise Linux를 사용하는 경우 데이터베이스를 저장하는 MariaDB의 기본 위치는
/var/lib/mysql/
입니다. SELinux는 기본적으로 SELinux가 될 것으로 예상하므로 이 영역은 이미 mysqld_db_t
유형을 사용하여 적절하게 레이블이 지정됩니다.
데이터베이스가 저장되는 위치는 개별 환경 요구 사항 또는 기본 설정에 따라 변경할 수 있지만 SELinux는 이 새 위치를 인식하는 것이 중요합니다. 이 레이블은 적절하게 레이블이 지정됩니다. 이 예제에서는 MariaDB 데이터베이스의 위치를 변경한 다음 SELinux가 해당 콘텐츠를 기반으로 새 영역에 계속 보호 메커니즘을 제공할 수 있도록 새 위치에 레이블을 지정하는 방법을 설명합니다.
이 예제는 SELinux가 MariaDB에 미치는 영향을 보여줍니다. MariaDB에 대한 포괄적인 설명서는 이 문서의 범위를 벗어납니다. 자세한 내용은 공식 MariaDB 설명서 를 참조하십시오. 이 예에서는 mariadb-server 및 setroubleshoot-server 패키지가 설치되어 있고
auditd
서비스가 실행 중이고 /var/lib/mysql/
의 기본 위치에 유효한 데이터베이스가 있다고 가정합니다.
mysql
에 대한 기본 데이터베이스 위치의 SELinux 컨텍스트 보기:Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~]# ls -lZ /var/lib/mysql drwx------. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql
~]# ls -lZ /var/lib/mysql drwx------. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql
데이터베이스 파일의 위치에 대한 기본 컨텍스트 요소인mysqld_db_t
가 표시됩니다. 이 컨텍스트가 제대로 작동하려면 이 예제에서 사용할 새 데이터베이스 위치에 수동으로 적용해야 합니다.- 다음 명령을 입력하고
mysqld
root 암호를 입력하여 사용 가능한 데이터베이스를 표시합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~]# mysqlshow -u root -p Enter password: ******* +--------------------+ | Databases | +--------------------+ | information_schema | | mysql | | test | | wikidb | +--------------------+
~]# mysqlshow -u root -p Enter password: ******* +--------------------+ | Databases | +--------------------+ | information_schema | | mysql | | test | | wikidb | +--------------------+
mariadb.service
서비스를 중지합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~]# systemctl stop mariadb.service
~]# systemctl stop mariadb.service
- 데이터베이스의 새 위치에 대한 새 디렉터리를 만듭니다. 이 예에서는
/mysql/
이 사용됩니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~]# mkdir -p /mysql
~]# mkdir -p /mysql
- 이전 위치의 데이터베이스 파일을 새 위치로 복사합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~]# cp -R /var/lib/mysql/* /mysql/
~]# cp -R /var/lib/mysql/* /mysql/
- mysql 사용자 및 그룹의 액세스를 허용하도록 이 위치의 소유권을 변경합니다. 이렇게 하면 SELinux가 계속 관찰할 기존 Unix 권한이 설정됩니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~]# chown -R mysql:mysql /mysql
~]# chown -R mysql:mysql /mysql
- 다음 명령을 입력하여 새 디렉터리의 초기 컨텍스트를 확인합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~]# ls -lZ /mysql drwxr-xr-x. mysql mysql unconfined_u:object_r:usr_t:s0 mysql
~]# ls -lZ /mysql drwxr-xr-x. mysql mysql unconfined_u:object_r:usr_t:s0 mysql
새로 생성된 이 디렉터리의 컨텍스트usr_t
는 현재 SELinux에 MariaDB 데이터베이스 파일의 위치로 적합하지 않습니다. 컨텍스트가 변경되면 MariaDB가 이 영역에서 제대로 작동할 수 있습니다. - 텍스트 편집기로 기본 MariaDB 구성 파일
/etc/my.cnf
를 열고 새 위치를 참조하도록datadir
옵션을 수정합니다. 이 예에서 입력해야 하는 값은/mysql
:입니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow [mysqld] datadir=/mysql
[mysqld] datadir=/mysql
이 파일을 저장하고 종료합니다. mariadb.service
를 시작합니다. 서비스가 시작되지 않아야 하며 거부 메시지가/var/log/messages
파일에 기록됩니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~]# systemctl start mariadb.service Job for mariadb.service failed. See 'systemctl status mariadb.service' and 'journalctl -xn' for details.
~]# systemctl start mariadb.service Job for mariadb.service failed. See 'systemctl status mariadb.service' and 'journalctl -xn' for details.
그러나감사
데몬이setroubleshoot
서비스와 함께 실행되는 경우 거부는 대신/var/log/audit/audit.log
파일에 기록됩니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux is preventing /usr/libexec/mysqld "write" access on /mysql. For complete SELinux messages. run sealert -l b3f01aff-7fa6-4ebe-ad46-abaef6f8ad71
SELinux is preventing /usr/libexec/mysqld "write" access on /mysql. For complete SELinux messages. run sealert -l b3f01aff-7fa6-4ebe-ad46-abaef6f8ad71
이 거부의 이유는 MariaDB 데이터 파일에 대해/mysql/
레이블이 올바르게 레이블이 지정되지 않기 때문입니다. SELinux는 MariaDB가usr_t
로 레이블이 지정된 콘텐츠에 액세스하지 못하도록 합니다. 이 문제를 해결하려면 다음 단계를 수행하십시오.- 다음 명령을 입력하여
/mysql/
에 대한 컨텍스트 매핑을 추가합니다.semanage
유틸리티는 기본적으로 설치되지 않습니다. 시스템에 누락된 경우 policycoreutils-python 패키지를 설치합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~]# semanage fcontext -a -t mysqld_db_t "/mysql(/.*)?"
~]# semanage fcontext -a -t mysqld_db_t "/mysql(/.*)?"
- 이 매핑은
/etc/selinux/targeted/contexts/files/file_contexts.local
파일에 작성됩니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~]# grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local /mysql(/.*)? system_u:object_r:mysqld_db_t:s0
~]# grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local /mysql(/.*)? system_u:object_r:mysqld_db_t:s0
- 이제
restorecon
유틸리티를 사용하여 이 컨텍스트 매핑을 실행 중인 시스템에 적용합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~]# restorecon -R -v /mysql
~]# restorecon -R -v /mysql
- 이제
/mysql/
위치에 MariaDB에 대한 올바른 컨텍스트로 레이블이 지정되었으므로mysqld
가 시작됩니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~]# systemctl start mariadb.service
~]# systemctl start mariadb.service
/mysql/
: 컨텍스트가 변경되었는지 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow ~]$ ls -lZ /mysql drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql
~]$ ls -lZ /mysql drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 mysql
- 위치가 변경되어 레이블이 지정되었으며
mysqld
가 성공적으로 시작되었습니다. 이제 정상적인 작업을 확인하기 위해 실행 중인 모든 서비스를 테스트해야 합니다.