41. Create and Enforce MAC Using SELinux
개요
SELinux(Security-Enhanced Linux)는 Linux 시스템에 MAC(강제 접근 제어, Mandatory Access Control)을 제공합니다. Red Hat/CentOS에서는 기본적으로 활성화되어 있지만, Ubuntu는 AppArmor를 사용합니다. 이 가이드는 Ubuntu에 SELinux를 처음부터 구현하는 방법을 다룹니다.
초기 설정
AppArmor 비활성화:
sudo systemctl stop apparmor.service
sudo systemctl disable apparmor.service
SELinux 및 AuditD 설치:
SELinux 유틸리티 패키지와 함께 AuditD를 설치하여 커스텀 정책 개발에 필요한 시스템 이벤트를 캡처합니다.
sudo apt install selinux-basics auditd
활성화 프로세스
상태 확인:
sestatus
# SELinux status : enabled / disabled
SELinux 활성화:
sudo selinux-activate
GRUB을 수정하여 SELinux 모듈을 로드합니다. 재부팅이 필요하며, 재부팅 중 .autolabel 파일을 통해 파일시스템 재레이블링이 수행됩니다.
설정 확인: 재부팅 후 부트로더에 다음이 포함되어 있는지 확인합니다:
cat /etc/default/grub
...
GRUB_CMDLINE_LINUX="security=selinux"
...
운영 모드
SELinux는 두 가지 모드를 지원합니다:
- Permissive: 위반 사항을 로깅하지만 강제하지 않음 (정책 개발에 유용)
- Enforcing: 비준수 행위를 적극적으로 거부
현재 모드 확인: getenforce
위반 사항 확인:
sudo audit2why --all | less
# check log
정책 개발
커스텀 정책 생성:
sudo audit2allow --all -M mymodule
sudo semodule -i mymodule.pp
바이너리 패키지와 유형 강제 규칙이 포함된 읽기 가능한 .te 파일이 생성됩니다.
임시 강제 모드 전환:
sudo setenforce 1
# 1 = Enforcing / 0 = Permissive
getenforce
# Enforcing (Temporary, just before reboot)
영구 적용:
/etc/selinux/config 편집(vim / nano) 후 SELINUX=permissive를 SELINUX=enforcing으로 변경합니다.