리눅스 SELinux란? 커널 보안 모듈 개념

리눅스에서 애플리케이션을 사용하다 보면 SELinux에 의해 액세스 권한이 거부되는 경우가 있습니다. SELinux는 리눅스 시스템을 보호하는 커널 보안 모듈입니다. 원하는 작업을 위해서는 SELinux의 정책을 변경해야 할 수 있습니다.

SELinux란?

SELinux (Security-Enhanced Linux)는 리눅스 기반 시스템에서 보안을 강화하기 위해 개발된 커널 보안 모듈입니다. 많은 리눅스 배포판에 기본적으로 포함되어 있습니다. SELinux가 활성화되어 있는 시스템에서는 커널이 정책에 따라 프로세스, 파일, 네트워크 통신 등에 대한 액세스를 통제합니다. 리눅스 커널의 일부로 작동하며 데몬으로 작동하는 프로세스 형태는 아닙니다.

 

출처=phoenixnap.com

 

SELinux 주요 역할

SELinux는 시스템에서 실행되는 프로세스와 시스템 리소스 간의 액세스를 통제합니다. 신뢰할 수 없는 소프트웨어나 악의적인 공격으로부터 시스템을 보호합니다. MAC(Mandatory Access Control)을 구현해서 모든 사용자, 프로세스, 파일에 대해 액세스 통제를 강제합니다.

기본 제공되는 정책대로 사용할 수도 있고, 객체(사용자, 프로세스, 파일 등)에 대한 컨텍스트 레이블을 사용해서 SELinux 정책을 필요에 맞게 설정할 수 있습니다. 각 서비스나 애플리케이션에 대해 독립적인 보안 정책 적용이 가능합니다. 보안 관련 이벤트를 기록할 수 있습니다.

 

SELinux 세 가지 모드

  • Enforcing : 이 모드에서 SELinux는 정책을 강제 적용하고, 정책에 위반되는 액세스를 차단합니다. 이 모드가 시스템의 보안을 최대한 강화하는 기본 모드입니다.
  • Permissive : 이 모드에서 SELinux는 정책 위반을 감지하지만, 액세스를 차단하지 않고 로그에 기록만 합니다. 이 모드는 문제 해결이나 정책 테스트 목적으로 사용됩니다.
  • Disabled : 이 모드에서 SELinux는 완전히 비활성화되어 정책을 적용하지 않습니다. 시스템 보안이 약화되므로 꼭 필요한 경우가 아니라면 사용하지 않습니다.

 

SELinux 종료 / 비활성화

권장되진 않지만 SELinux를 비활성화하거나 종료할 수 있습니다. 아래와 같이 /etc/selinux/config 경로의 설정 파일을 변경하면 됩니다. 변경 저장 후에는 시스템을 재부팅해야 적용됩니다.

SELINUX=disabled

 

다시 활성화하려면 해당 값을 다시 enforcing으로 변경합니다.

SELINUX=enforcing

 

어떤 애플리케이션에 대해 SELinux가 액세스를 막고 있는 상황이라면 테스트를 목적으로 통제를 해제하고 싶을 수 있습니다. 이럴 땐 재부팅을 하는 번거로움 없이 임시로 SELinux를 비활성화하는 방법이 있습니다. SELinux를 완전히 종료하지 않고 Enforcing 모드에서 Permissive 모드로 전환하는 방법입니다. 정책 위반에 대한 감지는 하지만 액세스는 차단하지 않고 로그만 남깁니다.

sudo setenforce 0

 

 

다시 Enforcing 모드로 전환하려면 값을 1로 줍니다.

sudo setenforce 1

 

 

예시) MYSQL 데이터 경로 변경

MYSQL 서버에서 기본적으로 데이터를 저장하는 경로는 /var/lib/mysql입니다. 이 경로를 변경하는 경우 SELinux가 변경된 경로에 데이터를 읽고 쓸 수 없도록 제한할 수 있습니다.

 

이런 경우 새로운 데이터베이스 저장 경로에 대한 SELinux 컨텍스트를 변경해야 합니다. 컨텍스트란 SELinux에서 파일, 디렉터리, 프로세스 등에 대한 보안 정보를 나타내는 문자열 레이블을 의미합니다.

 

1. 새로운 경로에 컨텍스트 할당

sudo chcon -R -t mysqld_db_t /new/mysql/data/directory

 

2. 새로운 경로에 대한 액세스 허용 및 적용

sudo semanage fcontext -a -t mysqld_db_t "/new/mysql/data/directory(/.*)?"
sudo restorecon -R /new/mysql/data/directory

 

DBMS 이외에도 같은 원리로 액세스 거부하는 경우들이 있습니다. 예를 들어, 아파치 웹 서버에 설정된 DocumentRoot 경로가 아닌 파일에 액세스 하는 경우에도 SELinux가 작동합니다. 

반응형

댓글

Designed by JB FACTORY