SELinux 기본 개념
리눅스 시스템에서 자원 접근 통제는 전통적으로 사용자 권한 기반의 자율적 접근 제어(DAC) 방식을 사용했습니다. 그러나 높아진 보안 요구사항에 대응하기 위해 SELinux(Security-Enhanced Linux)가 도입되었으며, 이는 강제적 접근 제어(MAC)를 구현합니다. DAC 환경에서 root 사용자는 모든 파일에 접근할 수 있지만, MAC 환경에서는 SELinux 정책에 따라 접근이 제한됩니다.
SELinux 구조 및 작동 방식
SELinux는 커널 수준의 보안 메커니즘으로 Linux 2.6 이후 커널에 통합되었습니다. 주요 배포판인 CentOS/RHEL은 기본적으로 SELinux를 활성화합니다. 구성 변경 시 시스템 재시작이 필요합니다.
핵심 구성 요소
SELinux는 프로세스와 시스템 자원(파일, 소켓 등)에 대해 두 가지 개념을 정의합니다:
- 도메인(Domain): 프로세스 실행 제한
- 컨텍스트(Context): 시스템 자원 접근 제한
# 프로세스 보안 컨텍스트 확인 ps -eZ # 파일 보안 컨텍스트 확인 ls -lZ /var/www
보안 정책 및 동작 모드
SELinux는 대상(targeted) 정책을 기본으로 사용하며, 네트워크 서비스 프로세스만 제한합니다. /etc/selinux/config 파일에서 정책을 관리할 수 있습니다.
동작 모드
- Enforcing: 정책 위반 시 차단 및 로깅
- Permissive: 경고만 기록하고 차단하지 않음
- Disabled: SELinux 비활성화
# 현재 모드 확인 getenforce # 임시 모드 변경 (0: Permissive, 1: Enforcing) setenforce 0
보안 컨텍스트 분석
파일 컨텍스트 예시:
system_u:object_r:httpd_content_t:s0
- 사용자: system_u (시스템 프로세스)
- 역할: object_r (파일 객체)
- 유형: httpd_content_t (웹 콘텐츠)
- 수준: s0 (다중 레벨 보안)
실제 사례: 웹 서버 문제 해결
/home 디렉터리에서 생성한 index.html을 /var/www/html로 이동 시 웹 접근 실패 문제:
# 오류 로그 확인 tail /var/log/audit/audit.log # 파일 컨텍스트 비교 ls -Zd /var/www/html drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html ls -Z index.html -rw-r--r--. root root unconfined_u:object_r:user_home_t:s0 index.html
해결 방법:
# 컨텍스트 자동 수정 restorecon -v /var/www/html/index.html # 수동 컨텍스트 변경 chcon -t httpd_sys_content_t /var/www/html/index.html
감사 로그 분석
SELinux 차단 이벤트는 /var/log/audit/audit.log에 기록됩니다. sealert 도구로 가독성 향상:
sealert -a /var/log/audit/audit.log
로그 분석 시 httpd_t 도메인이 user_home_t 유형 파일 접근 시도 실패 메시지를 확인할 수 있습니다.