SELinux란?
SELinux(Security-Enhanced Linux)는 관리자가 시스템 액세스 권한을 효과적으로 제어할 수 있는 Linux® 시스템용보안 아키텍처입니다. 이는 원래 미국 국가안보국(NSA)이 LSM(Linux Security Module)을 사용하는 Linux 커널에 대한 일련의 패치로 개발한 것입니다.
SELinux는 2000년에 오픈소스 커뮤니티에 릴리스되어 2003년에 업스트림 Linux 커널로 통합되었습니다.
SELinux가 작동하는 방식
SELinux는 시스템에서 애플리케이션, 프로세스, 파일에 대한 액세스 제어를 정의합니다. SELinux에 액세스할 수 있거나 없는 항목을 지정하는 룰 집합인 보안 정책을 사용하여 정책에서 허용하는 액세스 권한을 적용합니다.
애플리케이션이나 프로세스와 같은 주체에서 오브젝트(예: 파일)에 대한 액세스를 요청하면 SELinux는 주체와 오브젝트에 대한 권한이 캐시되는 AVC(액세스 벡터 캐시)를 확인합니다.
SELinux가 캐시된 권한에 따라 액세스에 대한 결정을 내릴 수 없는 경우 보안 서버로 요청을 보냅니다. 보안 서버는 애플리케이션 또는 프로세스와 파일의 보안 컨텍스트를 확인합니다. 보안 컨텍스트는 SELinux 정책 데이터베이스에서 적용됩니다. 그러면 권한이 부여되거나 거부됩니다.
권한이 거부되면 /var/log.messages에서 'avc: denied' 메시지를 사용할 수 있습니다.
SELinux를 구성하는 방법
SELinux를 구성하여 시스템을 보호하는 방법에는 여러 가지가 있습니다. 가장 일반적인 것은 특정 정책 또는 MLS(다중 수준 보안)입니다.
특정 정책은 기본 옵션이며 다양한 프로세스, 태스크, 서비스를 다룹니다. MLS는 매우 복잡할 수 있으며 일반적으로 정부 기관에서만 사용합니다.
/etc/sysconfig/selinux 파일을 보면 시스템에서 실행 중인 작업을 확인할 수 있습니다. 이 파일에는 SELinux가 허용 모드인지, 강제 모드인지, 아니면 비활성화되었는지 그리고 어떤 정책을 로드해야 하는지를 보여주는 섹션이 있습니다.
SELinux 레이블 지정 및 유형 적용
유형 적용 및 레이블 지정은 SELinux의 가장 중요한 개념입니다.
SELinux는 레이블 지정 시스템으로 작동합니다. 즉, 특정 시스템의 모든 파일, 프로세스, 포트에는 이와 연결된 SELinux 레이블이 있습니다. 레이블은 대상을 그룹화하는 논리적인 방법입니다. 커널은 부팅 중에 레이블을 관리합니다.
레이블의 형식은 사용자:롤:유형:수준입니다(수준은 선택 사항). 사용자, 롤, 수준은 MLS와 같이 더 높은 수준의 SELinux 구현에 사용됩니다. 레이블 유형은 특정 정책에 가장 중요합니다.
SELinux는 유형 적용을 사용하여 시스템에 정의된 정책을 적용합니다. 유형 적용은 특정 유형으로 실행되는 프로세스가 특정 유형으로 레이블이 지정된 파일에 액세스할 수 있는지의 여부를 정의하는 SELinux 정책의 일부입니다.
SELinux 활성화
환경에서 SELinux가 비활성화된 경우 /etc/selinux/config를 편집하고 SELINUX=permissive로 설정하여 SElinux를 활성화할 수 있습니다. 현재 SELinux가 활성화되어 있지 않습니다. 시스템에 레이블이 잘못 지정된 항목이 있어 시스템이 부팅되지 않을 수 있으므로 바로 적용하도록 설정하지 않는 것이 좋습니다.
시스템에서 파일 시스템의 레이블을 자동으로 다시 지정하도록 강제 적용하려면 루트 디렉터리에 .autorelabel이라는 이름의 빈 파일을 생성한 후 재부팅하면 됩니다. 시스템에 오류가 너무 많으면 허용 모드에서 재부팅해야 부팅에 성공할 수 있습니다. 모든 항목의 레이블을 다시 지정한 후에는 /etc/selinux/config를 사용하여 SELinux를 강제 적용으로 설정하고 재부팅하거나 setenforce 1을 실행합니다.
sysadmin이 커맨드라인에 익숙하지 않은 경우 그래픽 툴을 사용하여 SELinux를 관리할 수 있습니다.
SELinux는 Linux 배포판에 내장된 시스템에 추가 보안 계층을 제공합니다. 이 계층은 시스템이 손상되는 경우 시스템을 보호할 수 있도록 계속 켜져 있어야 합니다.
Linux에 대해 얼마나 잘 알고 계시나요?
Linux 일반 상식 퀴즈에서 지식을 테스트하고 레전드 배지를 획득하세요.
DAC(임의 액세스 제어)와 MAC(필수 액세스 제어) 비교
전통적으로 Linux와 UNIX 시스템은 DAC를 사용했습니다. SELinux는 Linux용 MAC 시스템의 한 예입니다.
DAC를 사용하면 파일과 프로세스에 소유자가 있습니다. 사용자가 파일을 소유하거나, 그룹이 파일을 소유하거나, 다른 사람 등 기타 주체가 파일을 소유하도록 할 수 있습니다. 사용자는 자신의 파일에 대한 권한을 변경할 수 있습니다.
루트 사용자는 DAC 시스템에서 전체 액세스 제어 권한을 소유할 수 있습니다. 루트 액세스 권한이 있으면 기타 모든 사용자의 파일에 액세스하거나 시스템에서 원하는 모든 작업을 수행할 수 있습니다.
그러나 SELinux와 같은 MAC 시스템에서는 액세스에 대한 관리 정책이 설정되어 있습니다. 홈 디렉터리의 DAC 설정이 변경되더라도 다른 사용자나 프로세스가 디렉터리에 액세스하지 못하도록 하는 SELinux 정책이 있으면 시스템을 안전하게 유지할 수 있습니다.
SELinux정책을 사용하면 구체적인 사항까지 제어하고 많은 프로세스를 다룰 수 있습니다. SELinux를 사용하여 사용자, 파일, 디렉터리 등의 액세스를 제한하도록 변경할 수 있습니다.
SELinux 오류를 처리하는 방법
SELinux에서 오류가 발생하면 해결해야 할 사항이 있다는 것입니다. 다음 4가지 일반적인 문제 중 하나일 가능성이 큽니다.
- 레이블이 잘못되었습니다. 레이블 지정이 올바르지 않으면 툴을 사용하여 레이블을 수정할 수 있습니다.
- 정책을 수정해야 합니다. SELinux에 수행한 변경 사항에 대해 알리거나 정책을 조정해야 한다는 뜻입니다. 부울 또는 정책 모듈을 사용하여 수정할 수 있습니다.
- 정책에 버그가 있습니다. 정책에 해결해야 할 버그가 있을 수 있습니다.
- 시스템이 해킹되었습니다. SELinux는 다양한 시나리오에서 시스템을 보호할 수 있지만 시스템이 손상될 가능성은 여전히 있습니다. 이러한 경우에 해당한다고 의심되면 즉시 조치를 취해야 합니다.
부울이란?
부울은 SELinux의 기능에 대한 켜기/끄기 설정입니다. SELinux 기능을 켜거나 끌 수 있는 설정은 매우 다양하며, 대부분은 이미 사전 정의되어 있습니다. getsebool -a를 실행하면 시스템에 이미 설정된 부울을 확인할 수 있습니다.
Red Hat의 지원
Red Hat Enterprise Linux는 전 세계를 선도하는 오픈소스 Linux 플랫폼으로, 리스크를 완화하고 보안 구성 및 정책을 강화하며 컴플라이언스 전략을 간소화합니다.
Red Hat Enterprise Linux 시스템 롤은 일관된 워크플로우와 수동 태스크 실행 간소화를 보장하는 Ansible® Roles를 지원하는 컬렉션입니다. 시스템 롤은 팀이 보안 워크플로우를 자동화하고, 시의적절하고 규모에 적합하게 최소한의 리소스로 유지 관리하며, 거버넌스 및 컴플라이언스 요구 사항을 간소화하도록 지원합니다. SELinux 시스템 롤을 사용하면 SELinux의 배포 및 관리를 자동화할 수 있습니다. 여기에는 다음이 포함됩니다.
- 강제 모드 또는 허용 모드로 SELinux를 활성화하여 제어의 일관성을 보장합니다.
- 요구 사항을 충족하도록 SELinux 정책 부울, 파일 컨텍스트, 포트 및 로그인을 사용자 정의할 수 있습니다.
- 시스템 롤을 활용하여 지정된 파일 또는 디렉터리의 파일 컨텍스트를 조정합니다.