로그인 / 등록 Account

Linux

SELinux란 - 개념, 설정, 사용법

SELinux(Security-Enhanced Linux)는 관리자가 시스템 액세스 권한을 효과적으로 제어할 수 있게 하는 Linux® 시스템용 보안 아키텍처입니다. 이는 원래 미국 국가안보국(United States National Security Agency, NSA)이 LSM(Linux Security Module)을 사용하여 Linux 커널에 대한 일련의 패치로 개발한 것입니다.

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


SELinux는 어떻게 작동하나요?

SELinux는 시스템의 애플리케이션, 프로세스, 파일에 대한 액세스 제어를 정의합니다. SELinux에 액세스할 수 있는 대상을 정하는 룰 세트인 보안 정책을 사용하여 정책에서 허용된 액세스를 실행합니다.

주체로 알려진 애플리케이션이나 프로세스가 파일과 같은 객체에 대한 액세스를 요청하는 경우, SELinux는 주체와 객체에 대해 권한이 캐시되는 AVC(Access Vector Cashe)를 확인합니다.

SELinux가 캐시된 권한에 기반한 액세스에 대한 결정을 내릴 수 없는 경우 보안 서버에 요청을 전송합니다. 보안 서버는 애플리케이션이나 프로세스의 보안 컨텍스트와 파일을 확인합니다. 보안 컨텍스트는 SELinux 보안 정책 데이터베이스에서 적용됩니다. 그러면 권한이 허용되거나 거부됩니다.

권한이 거부되면 “avc: denied”라는 메시지가 /var/log.messages에 나타납니다.

SELinux 설정 방법

SELinux를 설정하여 시스템을 보호할 수 있는 몇 가지 방법이 있습니다. 가장 일반적인 방법은 타겟 정책 또는 다단계 보안(Multi-Level Security, MLS)입니다.

타겟 정책은 기본 옵션으로서 다양한 프로세스와 태스크 및 서비스를 처리합니다. MLS는 매우 복잡할 수 있으며 보통 정부 기관에서만 사용합니다.

/etc/sysconfig/selinux 파일을 보면 시스템이 어떤 방법으로 실행되어야 하는지 알 수 있습니다. 파일에는 SELinux가 허용 모드인지 실행 모드인지 아니면 비활성화 모드인지와 어떤 정책을 로드해야 하는지를 보여주는 섹션이 있습니다.

SELinux 레이블 설정 및 유형 실행

유형 실행 및 레이블 설정은 SELinux에서 가장 중요한 개념입니다.

SELinux는 레이블 시스템으로 작동되는데, 이는 시스템의 모든 파일, 프로세스 및 포트에 이와 연결된 SELinux 레이블이 있다는 의미입니다. 레이블은 구성 요소들을 논리적으로 그룹화하는 방식입니다. 커널은 부팅 중에 레이블을 관리합니다.

레이블은 user:role:type:level (레벨은 선택 사항임) 형식으로 되어 있습니다. 사용자, 롤, 레벨은 MLS의 경우와 같이 SELinux의 보다 고도화된 구현에 사용됩니다. 레이블 유형은 타겟 정책에서 가장 중요합니다.

SELinux는 유형 실행을 사용하여 시스템에 정의된 정책을 실행합니다. 유형 실행은 특정 유형으로 실행되는 프로세스가 특정 유형으로 레이블된 파일에 액세스할 수 있는지 여부를 정의하는 SELinux 정책의 일부입니다.

SELinux 활성화

SELinux가 사용자 환경에서 비활성화된 경우 /etc/selinux/config를 편집하고 SELINUX=permissive를 설정하여 SELinux를 활성화할 수 있습니다. SELinux는 현재 활성화되어 있지 않으므로 곧바로 실행 모드로 설정하지는 않습니다. 시스템에서 레이블이 잘못 지정되어 시스템이 부팅되지 않을 수 있기 때문입니다.

루트 디렉토리에서 이름이 .autorelabel인 비어 있는 파일을 생성하고 재부팅하여 시스템이 자동으로 파일 시스템 레이블을 재지정하도록 강제할 수 있습니다. 시스템 오류가 너무 많으면 허용 모드일 때 부팅이 되도록 재부팅해야 합니다. 모든 요소의 레이블이 재지정된 후에 /etc/selinux/config를 사용하여 SELinx를 실행 모드로 설정하고 재부팅하거나 setenforce 1을 실행합니다.

시스템 관리자가 커맨드라인에 익숙하지 않은 경우 SELinux 관리에 사용할 수 있는 그래픽 툴이 있습니다.

SELinux는 Linux 배포판에 기본으로 구축되는 시스템에 추가 보안 레이어를 제공합니다. SELinux가 켜진 상태로 있어야 시스템이 손상되더라도 이를 보호할 수 있습니다.


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

전통적으로 Linux와 UNIX 시스템은 DAC를 사용해왔습니다. SELinux는 Linux용 MAC 시스템의 예입니다.

DAC의 경우에는 파일과 프로세스에 소유자가 있습니다. 사용자 또는 그룹이 파일을 소유하도록 할 수 있으며 누구든지 소유자가 될 수 있습니다. 사용자는 소유한 파일의 권한을 변경할 수 있습니다.

루트 사용자는 DAC 시스템으로 전체 액세스 제어 권한을 갖습니다. 루트 액세스 권한을 보유한 경우 다른 모든 사용자의 파일에 액세스하거나 시스템에서 원하는 모든 작업을 수행할 수 있습니다.

그러나 SELinux와 같은 MAC 시스템에서는 액세스 관련 관리 정책이 설정되어 있습니다. 홈 디렉토리의 DAC 설정이 변경되더라도 다른 사용자나 프로세스가 디렉토리에 액세스하지 못하도록 하는 SELinux 정책을 통해 시스템을 안전하게 보호할 수 있습니다.

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


SELinux 오류를 처리하는 법

SELinux에서 오류가 발생하는 경우 해결해야 하는 사항이 있습니다. 다음의 4가지 일반적인 문제 중 하나일 수 있습니다.

  1. 레이블이 잘못된 경우: 레이블이 올바르지 않은 경우 툴을 사용하여 레이블을 수정할 수 있습니다.
  2. 정책 수정이 필요한 경우: 변경 사항에 대해 SELinux에 알려야 하거나 정책을 조정해야 할 수도 있습니다. 부울 또는 정책 모듈을 사용하여 이를 해결할 수 있습니다.
  3. 정책에 버그가 있는 경우: 정책에 해결해야 하는 버그가 존재할 수 있습니다.
  4. 시스템이 침입을 당한 경우: 대부분의 경우 SELinux가 시스템을 보호할 수는 있으나 시스템 손상이 일어날 가능성은 여전히 존재합니다. 이런 상황이 의심되는 경우 즉시 조치를 취해야 합니다.

부울이란?

부울(boolean)이란 SELinux의 기능에 대한 활성화/비활성화 설정입니다. SELinux 기능을 켜거나 끌 수 있는 수백 가지 설정이 있으며 이 중 다수는 이미 사전 정의되어 있습니다. getsebool -a를 실행하여 시스템에 이미 설정된 부울을 찾을 수 있습니다.

Linux의 가능성과 기능을 더 알아 보세요