SELinux 이해하고 설정하기

SELinux 란 무엇이며 왜 중요할까요?

SELinux (Security-Enhanced Linux)는 리눅스 커널의 보안 모듈로, 시스템의 보안을 강화하기 위해 설계되었습니다. 간단히 말해, SELinux는 프로세스와 시스템 리소스 간의 접근을 제어하여, 악성 소프트웨어가 시스템에 미치는 영향을 제한합니다. SELinux는 “최소 권한 원칙”에 따라 작동하며, 각 프로세스가 수행할 수 있는 작업만 허용합니다.

SELinux의 중요성은 점점 더 커지고 있습니다. 사이버 공격이 더욱 정교해지고 빈번해짐에 따라, 시스템 보안을 강화하는 것은 필수적입니다. SELinux는 시스템을 보호하는 데 중요한 역할을 하며, 데이터 유출, 시스템 손상, 악성코드 감염과 같은 보안 위협으로부터 시스템을 보호할 수 있습니다.

많은 사람들이 SELinux를 복잡하고 어렵다고 생각하지만, 기본적인 이해를 통해 시스템 보안을 크게 향상시킬 수 있습니다. 이 가이드에서는 SELinux의 기본 개념, 설정 방법, 실생활 활용 사례, 그리고 흔한 오해들을 다루어 SELinux를 이해하고 효과적으로 활용할 수 있도록 도와드리겠습니다.

SELinux 작동 방식 이해하기

SELinux는 보안 컨텍스트 (Security Context)라는 개념을 사용하여 접근을 제어합니다. 각 프로세스, 파일, 디렉터리, 네트워크 포트 등 모든 시스템 리소스에는 보안 컨텍스트가 할당됩니다. 보안 컨텍스트는 사용자, 역할, 유형 (User, Role, Type)으로 구성되며, 이를 통해 SELinux는 접근 제어 규칙을 적용합니다.

SELinux는 정책 (Policy)이라는 규칙 집합을 사용하여 접근을 제어합니다. 정책은 어떤 보안 컨텍스트를 가진 프로세스가 어떤 보안 컨텍스트를 가진 리소스에 접근할 수 있는지를 정의합니다. SELinux는 정책에 정의된 규칙에 따라 접근을 허용하거나 거부합니다.

SELinux는 두 가지 주요 작동 모드를 지원합니다:

SELinux의 작동 방식을 이해하는 것은 SELinux를 효과적으로 설정하고 활용하는 데 중요합니다. 다음 섹션에서는 SELinux를 설정하고 관리하는 방법에 대해 자세히 알아보겠습니다.

SELinux 상태 확인 및 변경하기

SELinux의 현재 상태를 확인하고 변경하는 방법은 다음과 같습니다.

SELinux 상태 확인

다음 명령어를 사용하여 SELinux의 현재 상태를 확인할 수 있습니다.

sestatus

출력 결과는 다음과 유사할 수 있습니다.

SELinux status:                 enabled

SELinuxfs mount:                /sys/fs/selinux

SELinux policy loaded:          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 memory:       256M

위 출력에서 Current mode가 SELinux의 현재 작동 모드를 나타냅니다. enforcing은 Enforcing 모드, permissive는 Permissive 모드를 의미합니다. disabled는 SELinux가 비활성화된 상태를 의미합니다.

SELinux 모드 변경

SELinux 모드를 변경하는 방법은 다음과 같습니다.

일시적인 모드 변경:

다음 명령어를 사용하여 SELinux 모드를 일시적으로 변경할 수 있습니다. 일시적인 변경은 시스템 재부팅 시 초기화됩니다.

sudo setenforce 0  # Permissive 모드로 변경

sudo setenforce 1  # Enforcing 모드로 변경

영구적인 모드 변경:

다음 명령어를 사용하여 SELinux 모드를 영구적으로 변경할 수 있습니다. 영구적인 변경은 시스템 재부팅 후에도 유지됩니다.

    • SELinux 설정 파일을 엽니다.
    sudo vi /etc/selinux/config
    • SELINUX= 값을 원하는 모드로 변경합니다.
    SELINUX=enforcing  # Enforcing 모드로 설정
    
    SELINUX=permissive # Permissive 모드로 설정
    
    SELINUX=disabled   # SELinux 비활성화
    • 파일을 저장하고 닫습니다.
    • 시스템을 재부팅합니다.
    sudo reboot

주의: SELinux를 비활성화하는 것은 시스템 보안을 약화시킬 수 있으므로, 신중하게 결정해야 합니다. SELinux를 비활성화하기 전에, 비활성화의 잠재적인 위험을 이해하고, 다른 보안 조치를 통해 시스템을 보호해야 합니다.

SELinux 정책 관리하기

SELinux 정책은 시스템의 보안을 정의하는 규칙 집합입니다. SELinux 정책을 관리하는 것은 시스템의 보안 요구 사항을 충족하는 데 중요합니다. SELinux 정책을 관리하는 방법은 다음과 같습니다.

SELinux 정책 확인

다음 명령어를 사용하여 현재 적용된 SELinux 정책을 확인할 수 있습니다.

semanage policy -l

이 명령어는 현재 시스템에 설치된 SELinux 모듈 목록을 표시합니다.

SELinux 정책 모듈 관리

SELinux 정책 모듈은 특정 애플리케이션이나 서비스에 대한 규칙을 포함하는 파일입니다. SELinux 정책 모듈을 관리하는 방법은 다음과 같습니다.

정책 모듈 설치:

sudo semodule -i [모듈 이름].pp

정책 모듈 제거:

sudo semodule -r [모듈 이름]

정책 모듈 목록 확인:

sudo semodule -l

SELinux 로컬 정책 생성 및 수정

경우에 따라 기본 SELinux 정책이 특정 애플리케이션 또는 서비스의 요구 사항을 충족하지 못할 수 있습니다. 이 경우, 로컬 정책을 생성하거나 기존 정책을 수정하여 SELinux의 동작을 조정할 수 있습니다. 이는 일반적으로 숙련된 사용자나 시스템 관리자가 수행해야 하는 고급 작업입니다.

로컬 정책을 생성하거나 수정하는 데는 다음과 같은 도구를 사용할 수 있습니다:

예시: 특정 디렉터리에 대한 접근을 허용하는 로컬 정책 생성

    • 감사 로그에서 관련 접근 거부 메시지를 확인합니다.
    sudo ausearch -m AVC,USER_AVC,SELINUX_ERR -ts recent
    • audit2allow를 사용하여 규칙을 생성합니다.
    sudo ausearch -m AVC,USER_AVC,SELINUX_ERR -ts recent | sudo audit2allow -M mypolicy
    • 생성된 정책 모듈을 설치합니다.
    sudo semodule -i mypolicy.pp

주의: SELinux 정책을 수정하는 것은 시스템 보안에 큰 영향을 미칠 수 있으므로, 신중하게 수행해야 합니다. 정책을 수정하기 전에 변경 사항을 충분히 이해하고 테스트해야 합니다. 잘못된 정책은 시스템 작동을 방해하거나 보안을 약화시킬 수 있습니다.

실생활에서의 SELinux 활용 사례

SELinux는 다양한 시나리오에서 시스템 보안을 강화하는 데 사용될 수 있습니다. 몇 가지 실생활 활용 사례는 다음과 같습니다.

예시: Apache 웹 서버 보안 강화

SELinux를 사용하여 Apache 웹 서버의 보안을 강화하려면, Apache 웹 서버 프로세스가 웹 콘텐츠 디렉터리에만 접근할 수 있도록 제한하는 정책을 적용할 수 있습니다. 이를 통해, 웹 서버 취약점을 악용한 공격자가 시스템의 다른 부분에 접근하는 것을 방지할 수 있습니다.

    • Apache 웹 서버 프로세스의 보안 컨텍스트를 확인합니다.
    ps -Z | grep httpd
    • 웹 콘텐츠 디렉터리의 보안 컨텍스트를 확인합니다.
    ls -Z /var/www/html
    • 필요한 경우, 웹 콘텐츠 디렉터리의 보안 컨텍스트를 변경합니다.
    sudo chcon -t httpd_sys_content_t /var/www/html
    • SELinux 정책을 업데이트하여 Apache 웹 서버 프로세스가 웹 콘텐츠 디렉터리에 접근할 수 있도록 허용합니다.

SELinux 문제 해결 팁

SELinux는 때때로 예상치 못한 동작을 일으킬 수 있으며, 이로 인해 애플리케이션이나 서비스가 제대로 작동하지 않을 수 있습니다. SELinux 문제를 해결하는 몇 가지 팁은 다음과 같습니다.

SELinux에 대한 흔한 오해와 사실

SELinux에 대한 몇 가지 흔한 오해와 사실은 다음과 같습니다.

자주 묻는 질문

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다