Aller au contenu principal

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=permissiveSELINUX=enforcing으로 변경합니다.

컨텍스트 관리

컨텍스트 확인:

ps -eZ | grep sshd_t          # 프로세스 컨텍스트
ls -Z /usr/sbin/sshd # 파일 컨텍스트

파일 컨텍스트 수정:

sudo chcon -t user_home_t /var/log/auth.log    # 유형 변경 (type)
# sudo chcon -u unconfined_u /var/log/auth.log # user
# sudo chcon -r object_r /var/log/auth.log # object role
# sudo chcon --reference=/var/log/dmesg /var/log/auth.log # Reference
sudo restorecon -F -R /var/www/ # 기본값 복원
seinfo -u
# -u, -t, -r ...
sudo semanage fcontext --add --type var_log_t /var/www/10
sudo semanage fcontext --list

포트 및 불리언 관리

SELinux 불리언 활성화:

sudo setsebool virt_use_nfs 1

포트 바인딩 관리:

sudo semanage port --add --type ssh_port_t --proto tcp 2222
sudo semanage port --delete --type ssh_port_t --proto tcp 2222

핵심 요점: SELinux의 세밀한 접근 제어는 프로세스를 특정 리소스로 제한하여, 서비스가 침해될 경우 손상 위험을 크게 줄입니다.