프린트 하기

OS환경 : Oracle Linux 7.4 (64bit)


DB 환경 : Oracle Database 19.3.0.0


방법 : 리눅스 환경에 오라클 설치시 SElinux 와 방화벽의 영향도

오라클 설치 가이드(https://positivemh.tistory.com/category/ORACLE/Install) (https://positivemh.tistory.com/category/ORACLE/Install)를 보면

모두 방화벽을 해제(stop and disable)하고 selinux를 disable 로 설정하라고 설명하고 있음

하지만 오라클 데이터베이스 공식 설치 문서에는 selinux나 방화벽에 대한 내용을 찾을 수 없었음(버그 1건 제외)

그래서 왜 이렇게 설정하는지 이유를 알아보고자 해당 게시물을 작성함



1. SElinux

a. SElinux 란?

SELinux(Security-Enhanced Linux)는 관리자가 시스템 액세스 권한을 효과적으로 제어할 수 있게 하는 Linux 시스템용 보안 아키텍처임, 원래 미국 국가안보국(United States National Security Agency, NSA)이 LSM(Linux Security Module)을 사용하여 Linux 커널에 대한 일련의 패치로 개발한 것으로 리눅스 커널에 의무 접근 제어(Mandatory Access Control - MAC)를 구현하는 것임

SELinux는 2000년에 오픈소스 커뮤니티에 릴리스되어 2003년에 업스트림 Linux 커널로 통합되었음

Fedora Core3부터 기본으로 적용되기 시작하였고, 현재 대부분의 최신 리눅스 배포판에서 지원되고있음

Linux의 보안을 강화해 주는 보안 강화 커널이고 zero-day 공격 및 buffer overflow 등 어플리케이션 취약점으로 인한 해킹을 방지해 주는 핵심 구성요소임

예를 들어 악의 있는 일반 혹은 루트 사용자(예로, setuid 와 setgid)가 실행시킨 결함이 있는 소프트웨어를 통해 주어진 객체로 원하는 어떠한 일을 해도 막아낼 방법이 없으며 보안 정책을 시스템 전체에 걸 쳐 시행되도록 할 방법이 없음

하지만 SELinux(MAC)는 모든 주체(subjects - 사용자, 프로그램, 프로세스)와 객체(파일, 디바이스)에 대해서 국부적으로 허가(granular permissions)해 줄 수 있음, 응용프로그램에서 불필요한 부분은 제외하고 오직 필요한 기능에 대해서만 사용 권한을 안전하게 부여함



b. DAC(Discretionary Access Control)과 MAC(Mandatory Access Control) 비교

전통적으로 Linux와 UNIX 시스템은 DAC를 사용해왔음 SELinux는 Linux용 MAC 시스템의 예(example)임

DAC의 경우에는 파일과 프로세스에 소유자가 있음 

사용자 또는 그룹이 파일을 소유하도록 할 수 있으며 누구든지 소유자가 될 수 있음 또한 사용자는 소유한 파일의 권한을 변경할 수 있음

루트 사용자는 DAC 시스템으로 전체 액세스 제어 권한을 가짐

루트 액세스 권한을 보유한 경우 다른 모든 사용자의 파일에 액세스하거나 시스템에서 원하는 모든 작업을 수행할 수 있음


하지만 SELinux와 같은 MAC 시스템에서는 액세스 관련 관리 정책이 설정되어 있음 

홈 디렉토리의 DAC 설정이 변경되더라도 다른 사용자나 프로세스가 디렉토리에 액세스하지 못하도록 하는 SELinux 정책을 통해 시스템을 안전하게 보호할 수 있음

SELinux 정책을 사용하여 사용자를 특정할 수 있을 뿐만 아니라 수많은 프로세스를 처리할 수 있음, SELinux로 변경을 수행하여 사용자, 파일, 디렉토리 등 액세스를 제한할 수 있음



c. 설정 방법

/etc/sysconfig/selinux 파일을 수정하여 설정할 수 있음

1
2
3
4
5
6
7
8
9
10
11
12
13
# cat /etc/sysconfig/selinux 
 
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 


설정값 설명

disabled - SELinux 보안 제어를 사용하지 않으려면 disalbed 옵션을 선택해야함

disalbed 설정은 보안 제어 기능을 끄고 시스템이 보안 정책을 사용하지 않도록 설정함


permissive - 이것을 선택하면 서비스 거부 메시지를 통보받을 수 있음 permissive 상태로 설정하면 자료와 프로그램에 이름을 할당한 후 로그를 기록하지만 보안 정책을 사용하지는 않음

permissive 상태는 SELinux를 처음 접하는 경우 처음부터 이 기능을 완전히 활성화하지 않고 우선 이 정책을 사용해서 일반 시스템 작업시 어떠한 영향을 미치는지 알아보려는 경우 좋은 시작점이 될 수 있음 그러나 경고 옵션을 선택시 가끔씩 보안경고 대상이 아닌 것을 경고 대상으로 탐지하는 오류(false positive)나 경고 대상인 것을 탐지하지 않는 오류(false negative)가 발생할 가능성도 있으니 주의가 필요함

요약 : Permissive mode 는 rule 에 어긋나는 동작이 있을 경우 audit log 를 남기고 해당 operation 은 허용됨


enforcing - SELinux를 완전히 활성화하시려면 enforcing 옵션을 선택해야함 

enforcing 옵션을 선택하면 추가 시스템 보안을 위해 모든 보안 정책 (예, 허가가 없는 사용자가 특정한 파일이나 프로그램에 접근하는 것을 거부하기)을 사용함



d. 기타

릴리스 11.2.0.1의 기타 알려진 문제점으로

Oracle Enterprise Linux 5.x 및 Red Hat Enterprise Linux 5.x에서 SELinux가 실행될때(Enforcing모드)

SQL * Plus 및 OCI (Oracle Call Interface) 프로그램 호출이 실패하는 문제가 있었음(Oracle 버그 9817031)

이 때 해결방법은 SELinux를 Permissive로 설정하는 것임

원문

1
2
3
4
5
6
4.3.1 Error While Loading Shared Library When SELinux is Enforcing on Oracle Enterprise Linux 5.x and Red Hat Enterprise Linux 5.x
SQL*Plus and Oracle Call Interface (OCI) program calls fail with SELinux in the Enforcing mode on Oracle Enterprise Linux 5.x and Red Hat Enterprise Linux 5.x.
 
Workaround: Shift SELinux to Permissive mode on the system.
 
This issue is tracked with Oracle bug 9817031.



정리

오라클 설치 시 SElinux를 permissive 또는 disabled 설정하는 이유

SElinux 보안 정책 설정이 필요하고 해당 정책에 위배되는 프로세스가 발생하면 프로세스가 비정상적으로 동작할 수 있기 때문에 permissive(audit loging) 또는 disabled로 설정하는것

SElinux 보안 정책을 잘 다룰줄 아는 사람이라면 enforcing으로 설정해도 괜찮음



2. 방화벽

a. 방화벽이란?

외부 네트워크로부터의 침입에 대해 내부 네트워크를 보호하기 위한 네트워크 구성 요소 중의 하나로, 외부의 불법 사용자의 침입으로부터 내부의 전산 자원을 보호하기 위한 정책 및 이를 지원하는 하드웨어와 소프트웨어를 총칭함 

내부 네트워크가 외부 네트워크(주로 인터넷을 의미)에 연결되어 있지 않을 경우에는 방화벽은 불필요함



b. 방화벽의 주요 기능

방화벽은, 일반적으로 네트워크 서비스별로 해당 서비스를 요구한 호스트의 IP 주소와 포트 번호, 사용자 인증에 기반을 두고 외부 침입을 차단함. 허용된 네트워크 사용자에게 원하는 서비스를 제공하면서 허용되지 않은 사용자에게는 서비스를 차단하고, 해당 서비스의 허용 또는 실패에 대한 기록을 남김

*외부 네트워크와 연결된 유일한 창구 (Gateway)

*서비스 접속 및 거부

*사용자 인증 포함

*내외부 상호 접속된 네트워크에 대한 트래픽 감시, 기록



c. 설정 방법

1
2
# systemctl start firewalld
# systemctl enable firewalld

참조 https://www.lesstif.com/system-admin/rhel-centos-7-firewalld-22053128.html

https://saksin.tistory.com/1364



d. 기타

오라클이 사용하는 포트를 모두 열어줘야 정상적으로 오라클 사용이 가능함

싱글 DB의 경우 ssh 포트와 리스너 포트만 열어주면 되지만 rac의 경우 많은 포트들을 열어 주어야함

참조 오라클이 사용하는 포트와 프로토콜 https://positivemh.tistory.com/552

그리고 OS 기본 방화벽 외에도 사설 방화벽을 많이 사용함



정리

오라클 설치 시 방화벽을 해제(stop and disable) 하는 이유

오라클 사용에 필요한 포트를 허용하지 않고, 접속허용 ip를 제대로 설정하지 않고 방화벽을 설정하는 경우 

서버 접속 및 오라클 접속에 문제가 발생 할 수 있어서 설치 전 disable 로 설정함

방화벽도 오라클 사용에 문제 없게끔 정책을 잘 설정 한다면 괜찮음



참조 : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=1193

https://www.redhat.com/ko/topics/linux/what-is-selinux

http://egloos.zum.com/sunyzero/v/4241364

https://www.lesstif.com/system-admin/centos-selinux-6979732.html

http://www.linuxlab.co.kr/docs/98-04-4.htm

https://positivemh.tistory.com/552

https://www.lesstif.com/system-admin/rhel-centos-7-firewalld-22053128.html

https://saksin.tistory.com/1364