1장. 소개
SELinux(Security Enhanced Linux)는 추가 시스템 보안 계층을 제공합니다. SELinux는 기본적으로 질문에 대답합니다. "may <subject> do <action> to <object>"는 다음과 같습니다. "사용자의 홈 디렉토리에 있는 웹 서버 액세스 파일일 수 있습니까?".
DAC(Degretionary Access Control)라고 하는 사용자, 그룹 및 기타 권한을 기반으로 하는 표준 액세스 정책은 시스템 관리자가 로그 파일을 볼 수 있도록 특정 애플리케이션을 제한하는 것과 같은 포괄적이고 세분화된 보안 정책을 생성할 수 없습니다. 또한 다른 애플리케이션에서는 로그 파일에 새 데이터를 추가할 수 없습니다.
SELinux는 MAC(강제적 액세스 제어)를 구현합니다. 모든 프로세스 및 시스템 리소스에는 SELinux 컨텍스트 라는 특수 보안 레이블이 있습니다. SELinux 레이블이라고도 하는 SELinux 컨텍스트는 시스템 수준 세부 정보를 추상화하고 엔터티의 보안 속성에 중점을 두는 식별자입니다. 이렇게 하면 SELinux 정책에서 오브젝트를 참조하는 일관된 방법을 제공할 뿐만 아니라 다른 식별 방법에서 찾을 수 있는 모호성을 제거합니다. 예를 들어 파일은 바인드 마운트를 사용하는 시스템에서 여러 개의 유효한 경로 이름을 가질 수 있습니다.
SELinux 정책은 프로세스가 서로 상호 작용하는 방법과 다양한 시스템 리소스와 상호 작용하는 방법을 정의하는 일련의 규칙에서 이러한 컨텍스트를 사용합니다. 기본적으로 정책은 규칙에서 명시적으로 액세스 권한을 부여하지 않는 한 상호 작용을 허용하지 않습니다.
참고
DAC 규칙 다음에 SELinux 정책 규칙이 확인된다는 점을 기억하는 것이 중요합니다. DAC 규칙이 먼저 액세스를 거부하면 SELinux 정책 규칙이 사용되지 않습니다. 즉, 기존 DAC 규칙이 액세스를 차단하는 경우 SELinux 거부가 기록되지 않습니다.
SELinux 컨텍스트에는 사용자, 역할, 유형, 보안 수준 등 여러 필드가 있습니다. SELinux 유형 정보는 전체 SELinux 컨텍스트가 아니라 프로세스와 시스템 리소스 간에 허용되는 상호 작용을 정의하는 가장 일반적인 정책 규칙이므로 SELinux 정책과 관련하여 가장 중요한 정보일 수 있습니다. SELinux 유형은 일반적으로
_t
로 끝납니다. 예를 들어 웹 서버의 유형 이름은 httpd_t
입니다. /var/www/html/
에서 일반적으로 발견되는 파일 및 디렉토리의 유형 컨텍스트는 httpd_sys_content_t
입니다. /tmp 및 /var/tmp/
에서 일반적으로 발견되는 파일 및 디렉토리에 대한 유형 컨텍스트는 tmp_t
입니다
. 웹 서버 포트의 유형 컨텍스트는 http_port_t
입니다.
예를 들어 Apache(httpd
_t로 실행되는 웹 서버 프로세스)가 /var/www/html/
및 기타 웹 서버 디렉터리(httpd_
sys_content_t
)에서 일반적으로 발견되는 컨텍스트의 파일 및 디렉터리에 액세스할 수 있도록 허용하는 정책 규칙이 있습니다. /tmp 및 /var/tmp/
에서 일반적으로 발견되는 파일에 대한 정책에 허용 규칙이 없으므로
액세스가 허용되지 않습니다. SELinux를 사용하면 Apache가 손상되어 악의적인 스크립트에서 액세스를 제공하더라도 /tmp
디렉토리에 액세스할 수 없습니다.
그림 1.1. SELinux를 사용하면 httpd_t로 실행하는 Apache 프로세스가 /var/www/html/ 디렉터리에 액세스할 수 있으며 httpd_t 및 mysqld_db_t 유형 컨텍스트에 대한 허용 규칙이 없기 때문에 동일한 프로세스가 /data/mysql/ 디렉터리에 액세스할 수 있습니다. 반면 mysqld_t로 실행되는 MariaDB 프로세스는 /data/mysql/ 디렉터리에 액세스할 수 있으며 SELinux도 mysqld_t 유형의 프로세스를 올바르게 거부하여 httpd_sys_content_t로 레이블이 지정된 /var/www/html/ 디렉터리에 액세스합니다.
[D]
추가 리소스
자세한 내용은 다음 설명서를 참조하십시오.
- apropos
selinux 명령으로
나열된 selinux(8) 도움말 페이지 및 도움말 페이지. - selinux-policy-doc 패키지를 설치할 때 man -k _selinux 명령으로 나열된 도움말 페이지. 자세한 내용은 11.3.3절. “서비스 수동 페이지”을 참조하십시오.
1.1. SELinux 실행의 이점
SELinux는 다음과 같은 이점을 제공합니다.
- 모든 프로세스와 파일에 레이블이 지정됩니다. SELinux 정책 규칙은 프로세스가 파일과 상호 작용하는 방법과 프로세스가 서로 상호 작용하는 방식을 정의합니다. 액세스는 특별히 허용하는 SELinux 정책 규칙이 있는 경우에만 허용됩니다.
- 세부적인 액세스 제어. 사용자 재량에 Linux 사용자 및 그룹 ID에 따라 제어되는 기존 UNIX 권한을 벗어나 SELinux 액세스 결정은 SELinux 사용자, 역할, 유형 및 선택적으로 보안 수준과 같은 사용 가능한 모든 정보를 기반으로 합니다.
- SELinux 정책은 관리 방식으로 정의되고 시스템 전체에 적용됩니다.
- 권한 에스컬레이션 공격에 대한 완화 개선. 프로세스는 도메인에서 실행되므로 서로 분리됩니다. SELinux 정책 규칙은 프로세스가 파일 및 기타 프로세스에 액세스하는 방법을 정의합니다. 프로세스가 손상되면 공격자는 해당 프로세스의 일반 기능에만 액세스할 수 있으며 프로세스가 액세스하도록 구성된 파일에만 액세스할 수 있습니다. 예를 들어 Apache HTTP 서버가 손상되면 공격자는 특정 SELinux 정책 규칙을 추가하거나 이러한 액세스를 허용하도록 구성하지 않은 한 해당 프로세스를 사용하여 사용자 홈 디렉토리의 파일을 읽을 수 없습니다.
- SELinux를 사용하여 데이터 기밀성 및 무결성을 적용하고 신뢰할 수 없는 입력에서 프로세스를 보호할 수 있습니다.
그러나 SELinux는 다음이 아닙니다.
- 확대/축소 소프트웨어,
- 암호, 방화벽 및 기타 보안 시스템 대신
- 올인원 보안 솔루션.
SELinux는 기존 보안 솔루션을 개선하도록 설계되었으며 이를 대체하지 않습니다. SELinux를 실행하는 경우에도 분석하기 어려운 암호 또는 방화벽을 사용하여 소프트웨어를 최신 상태로 유지하는 등 모범적인 보안 사례를 계속 따르는 것이 중요합니다.