[Linux] SELinux: Enforcing vs. Permissive Modes

SELinux는 미국 국가안보국(NSA – National Security Agency)이 개발한 Flask 라는 보안 커널을 리눅스에 이식한 커널 레벨의 보안 모듈이다. NSA는 리눅스에 강제 접근 통제를 구현하기 위해 리눅스 커널의 많은 부분을 수정했으며 그 결과물을 리눅스 커뮤니티에 기증하여 2003년부터 2.6 버전의 커널에 공식 포함되게 되었다 (출처 1). 

SELinux를 Enabled 또는 Disabled로 설정할 수 있다. Disabled된 경우 DAC (Discretionary Access Control) Rule(임의적 접근 통제)에 따라서 동작한다 (출처 2). DAC(임의적 접근 통제)는 시스템 객체에 대한 접근을 사용자나 또는 그룹의 신분을 기준으로 제한하는 방법이다. 사용자나 그룹이 객체의 소유자라면 다른 주체에 대해 이 객체에 대한 접근 권한을 설정할 수 있다. 여기서 임의적이라는 말은 소유자는 자신의 판단에 의해서 권한을 줄 수 있다는 의미이다 (출처 1). 

  • MK: 출처 1에 SELinux와 DAC에 대한 정리가 정말 잘 되어 있다. 

SELinux가 Enabled되어 있을 때 SELinux는 크게 아래 2가지 모드로 동작이 가능하다.

  • Enforcing Mode: SELinux Policy에 따라 모든 권한을 거절한다.
  • Permissive Mode: 모든 권한을 허락한다. 하지만, SELinux Policy에 해당하는 권한 거부 로그는 그대로 출력한다.

Enforcing과 Permissvie Mode를 변경하는 방법은 아래와 같다. 아래 CMD는 “root” 권한을 가진 경우에 가능하다. 

Mode 확인 (그림 1 참조)

  • $getenforce

Enforcing Mode (그림 2 참조)

  • $setenforce 1

Permissive Mode (그림 3 참조)

  • $setenforce 0
그림 1: getenforce CMD (출처 2)
그림 2: setenforce 1 CMD (출처 2)
그림 3: setenforce 0 CMD (출처 2)

출처

  1. https://www.lesstif.com/pages/viewpage.action?pageId=18219472
  2. https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security-enhanced_linux/sect-Security-Enhanced_Linux-Introduction-SELinux_Modes
  3. https://www.cyberciti.biz/faq/what-is-selinux/
  4. https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security-enhanced_linux/sect-security-enhanced_linux-working_with_selinux-changing_selinux_modes

Leave a Comment