본문으로 바로가기

0. 환경

  • Windows 10
  • Virtual Box
  • CentOS 9 Stream
  • MariaDB - 10.5.13

 

1. Service Port 변경 

1. 해당 설정 파일을 vi, vim 편집 툴을 이용하여 내용을 추가해줍니다.

# vi /etc/my.cnf.d/mariadb-server.cnf

[mariadb]
port=5320

 

2. DB를 시작 / 재시작해줍니다.

# systemctl start mariadb 
or
# systemctl restart mariadb

 

3. 만약 다음과 같은 상황이 발생된다면 로그를 확인해봅니다.

# systemctl start mariadb
Job for mariadb.service failed because the control process exited with error code.
See "systemctl status mariadb.service" and "journalctl -xeu mariadb.service" for details.

 

4. DB 로그 확인

최하단에 최근에 발생한 로그 확인(최하단 이동 shift + G)

# vi /var/log/mariadb/mariadb.log

 

다음과 같은 에러 로그가 발견되었다면 거의 SELinux 관련 문제입니다.

2022-04-02 23:52:11 0 [ERROR] Can't start server: Bind on TCP/IP port. Got error: 13: Permission denied
2022-04-02 23:52:11 0 [ERROR] Do you already have another mysqld server running on port: 5320 ?
2022-04-02 23:52:11 0 [ERROR] Aborting

원인

SELinux 보안 문제

해당 데몬에 대해 SELinux에 서비스 포트가 등록되지 않아 있으므로 권한이 없는 상황

 

해결 방법

1. SELinux 해제 -> 2번 항목

2. SELinux 포트 등록 -> 3번 항목

 

2. SELinux 해제

1. 상태 확인

# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      33

 

2. 설정 변경(Selinux 해제)

# vi /etc/selinux/config (centos 8 이상)
or
# vi /etc/sysconfig/selinux (centos 7 이하)

 

3. SELINUX=enforcing 을 SELINUX=disabled 로 변경 후 저장

SELINUX=disabled

 

4. 재부팅

# sudo reboot

 

5. DB 시작 / 재시작

# systemctl start mariadb 
or
# systemctl restart mariadb

 

6. LISTEN Port 확인

# netstat -ntap | grep LISTEN | grep 5320
tcp6       0      0 :::5320                 :::*                    LISTEN      1249/mariadbd

 

3. SELinux 설정

1. SELinux에 등록되어있는 DB 포트 확인

# semanage port -l | grep mysqld_port_t
mysqld_port_t                  tcp      1186, 3306, 63132-63164

 

※ 만약 명령어가 실행되지 않을 경우 semanage 설치합니다.

# yum install -y policycoreutils-python
or
# dnf install -y policycoreutils-python

 

3. 사용할 포트 등록

# semanage port -a -t mysqld_port_t -p tcp 5320

[포트를 잘 못 등록했을 경우 (등록 삭제)]
$ semanage port -d -t mysqld_port_t -p tcp 5320

 

4. 확인

# semanage port -l | grep mysqld_port_t
mysqld_port_t                  tcp      5320, 1186, 3306, 63132-63164

 

5. DB 시작 / 재시작

# systemctl start mariadb 
or
# systemctl restart mariadb

 

6. LISTEN Port 확인

# netstat -ntap | grep LISTEN | grep 5320
tcp6       0      0 :::5320                 :::*                    LISTEN      1249/mariadbd