CentOS Linux에서 웹 서버와 DB 서버를 분리해 wordpress 페이지를 구성하는 실습을 진행했었다.
웹 서버, DB 서버 각각 필요한 패키지 설치 및 설정을 완료하고 웹 서버에서 DB 서버의 wordpress DB를 가져오려고 할 때 다음과 같은 오류가 발생했다.
어찌저찌 해결하긴 했으나 발생 원인을 파악해보니 SELinux 정책에 관한 문제였다.
발생 원인
SELinux 컨텍스트에는 사용자, 역할, 유형 및 보안 수준과 같은 여러 필드가 있다.
SELinux 유형 정보는 SELinux 정책과 관련해 가장 중요한데, 프로세스와 시스템 리소스 간의 허용되는 상호 작용을 정의하는 가장 일반적인 정책 규칙은 SELinux 컨텍스트가 아닌 SELinux 유형을 사용하기 때문이다.
SELinux 유형은 _t로 끝난다. 예를 들어 웹 서버의 유형 이름은 httpd_t 이다.
일반적으로 /var/www/html 에서 찾을 수 있는 파일 및 디렉토리의 유형 컨텍스트는 httpd_sys_content_t 이다.
다른 예로 /tmp 및 /var/tmp 에서 일반적인 파일 및 디렉토리의 유형 컨텍스트는 tmp_t이다.
웹 서버 포트의 유형 컨텍스트는 httpd_port_t 이다.
Apache (httpd_t로 실행되는 웹 서버 프로세스)가 /var/www/html/ 및 기타 웹 서버 디렉토리 (httpd_sys_content_t)에서 파일 및 디렉토리에 액세스 할 수 있게하는 정책 규칙이 있다.
정책에는 일반적으로 /tmp 및 /var/tmp/에 있는 파일에 대한 허용 규칙이 없으므로 액세스가 허용되지 않는다.
SELinux를 사용하면 Apache가 손상되고 악의적인 스크립트가 액세스 권한을 얻더라도 /tmp 디렉토리에 액세스할 수 없다. (이것이 바로 SELinux를 사용하는 이유이다.)
그렇다면, SELinux가 Apache 및 MariaDB를 안전하게 실행하는 데 도움이 되는 방법을 알아보자
SELinux는 httpd_t로 실행되는 Apache 프로세스가 /var/www/html/ 디렉토리에 액세스 할 수 있도록 허용하지만 /data/mysql/ 디렉토리에 액세스하는 동일한 프로세스는 mysqld_db_t 및 httpd_t 유형 컨텍스트에 대한 허용 규칙이 없기 때문에 거부한다.
반면에 mysqld_t로 실행되는 MariaDB 프로세스는 /data/mysql/ 디렉토리에 액세스 할 수 있으며
mysqld_t 유형의 프로세스가 httpd_sys_content_t로 표시된 /var/www/html/ 디렉토리에 액세스하는 것을 거부한다.
해결 방법
웹 서버에서 DB 서버에 접근해 DB를 가져올 수 있게 권한을 부여하는 다음 명령어를 입력해 해결한다.
[root@localhost ~]# setsebool httpd_can_network_connect_db=1
'Study > Study' 카테고리의 다른 글
JumpHost (특정 서버를 경유해 SSH 사용하기) (0) | 2022.04.05 |
---|---|
Prometheus란 ? (0) | 2022.03.23 |
Serverless 란? (Server + Less) (0) | 2022.03.23 |
WSL (Windows Subsystem for Linux) 이란 ? (0) | 2022.03.12 |
Flask란 ? (0) | 2022.03.04 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!