728x90

SELinux란


SELinux란

- 리눅스 시스템의 보안을 강화해주는 커널 모듈

- 강제 접근 제어 모델MAC 모델을 사용하여 시스템의 보안을 강화하는 리눅스 커널 모듈


접근 제어 모델

주체: 시스템의 자원에 접근하는 프로세스 또는 사용자

객체: 파일 또는 포트와 같은 시스템의 자원 의미

 

1. DAC (Discretionary Access Control)

- 임의 접근 제어 모델

- 사용자가 임의로 객체에게 권한을 부여하여 객체에 대한 접근 제어

 

2. MAC (Mandatory Access Control)

- 강제 접근 제어 모델

- 주체와 객체에 부여된 보안 레이블과 정책 허용 스위치에 의해 접근 제어

 

3. RBAC (Role Based Access Control)

- 역할 기반 접근 제어 모델

- 역할: 다수의 권한을 묶어 놓은 그룹

- 관리자는 사용자에게 역할을 부여하여 권한을 제어함


SELinux 동작 원리

- MAC 모델로 보안 레이블과 정책 허용 스위치 사용

- 보안 레이블: 컨텍스트

- 정책 허용 스위치: 부울

- SELinux 활성화 > 모든 프로세스와 파일에 컨텍스트가 부여됨 > 프로세스가 파일에 접근할 때 프로세스의 컨텍스트가 파일의 컨텍스트에 접근할 수 있는 정책이 설정되어 있는지 확인

 


SELinux 모드


SELinux 모드 종류

Disabled 모드

- SELinux 커널 모듈을 메모리에 로드 X

- SELinux 비활성화 상태

- DAC 모델 적용 > 파일에 부여된 권한 기준으로 접근 제어

 

Enforcing 모드

- SELinux 커널 모듈을 메모리에 로드 O

- SELinux 정책 강제, 필요 시 차단

- SELinux 활성화 상태 > SELinux

- MAC 모델 적용 > 파일 접근 권한, 컨텍스트, 부울 등을 확인하여 접근 제어

Permissive 모드

- SELinux 커널 모듈을 메모리에 로드 O

- SELinux 정책 강제 X > 차단 X, 정책 위반 시 경고 메시지가 로그에 기록

- SELinux 활성화 상태

 


SELinux 모드 설정

getenforce

- 현재 시스템에 적용된 SELinux 모드 확인

 

setenforce

- 시스템 운영 중 SELinux 모드 전환

- Disabled 모드로 전환 불가

- Permissive(0) 또는 Enforcing(1) 전환  


SELinux 설정 파일

- /etc/selinux/config: 영구 설정

- SELINUX 속성: SELinux 모드 영구 저장

- SELINUXTYPE 속성: SELinux 정책 유형 지정

 


SELinux 컨텍스트


컨텍스트란

- SELinux 활성화 시 모든 프로세스와 파일에 컨텍스트 부여

- 프로세스가 파일에 접근할 때 비교하는 요소

- 컨텍스트 확인 명령: ps axZ

 

확인

여기에서 세 번째 항목(유형 컨텍스트)의 값에 따라 접근할 수 있는 프로세스가 지정됨

ls -Z

 

변경

지정한 디렉토리 아래의 모든 파일 모두 재설정 (기본값 사용)

restorecon -Rv /var/www/html/

 

사용자가 파일에 임의로 값을 지정함 (권장하지 않음)

chcon -t admin_home_t /var/www/html/fileA

# 디렉토리에 대한 기본값 지정
semanage fcontext -a -t httpd_sys_content_t '/root/dirA(/.*)?'

 


 

SELinux 부울


SELinux 부울이란

- 프로세스와 파일 간의 컨텍스트가 연관성은 없지만 서로 접근할 필요가 있을 경우 접근을 허용하는 스위치와 같은 기능

- 스위치처럼 ON/OFF로 작동

- 시스템 운영 중에 정책의 동작 변경이 가능함

- 부울 값 확인 명령: getsebool, semanage

 

확인

semanage boolean -l | grep db

 

설정

외부의 httpd 서비스를 통해 내부(로컬)의 데이터베이스로 접근 허용

semanage boolean httpd_can_network_connect_db -m --on

 


SELinux 포트 레이블


포트 레이블이란

- 서버에서 제공하는 서비스의 표준 포트 이외의 포트를 사용하려면 포트 레이블을 적용해야 함

- 포트에 포트 레이블을 지정하지 않을 경우 클라이언트가 접근하지 못함

- 예시: httpd 서비스의 기본 포트는 80번 > 8900번 포트로 변경을 원할 경우 포트 레이블인 http_port_t를 지정해야 서비스가 정상적으로 제공됨

 

확인

semanage port -l | grep 80

 

변경

semanage port -a -t nfs_port_t 8888 -p tcp

 


SELinux 문제 해결


- SELinux가 활성화된 시스템에서 서비스를 원활하게 제공하기 위함

 

문제 해결 순서

1. Permissive 모드 전환: SELinux 설정 및 서비스 자체 구성에서 문제 확인

2. 파일의 보안 레이블 확인: 컨텍스트 유형을 변경하여 문제 해결

3. 포트 레이블 확인

4. 부울 확인: 활성화 여부 확인

728x90

+ Recent posts