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. 부울 확인: 활성화 여부 확인
'쿠버네티스 교육 > 강의 내용 정리' 카테고리의 다른 글
220518_3_실습_리눅스 서비스_데이터베이스 구축-MariaDB (0) | 2022.05.18 |
---|---|
220518_2_리눅스 서비스_SCP (0) | 2022.05.18 |
220517_4_리눅스 서비스_DNS, 방화벽 (0) | 2022.05.17 |
220517_5_실습_DNS 서버 구축 (0) | 2022.05.17 |
220517_3_실습_네트워크 관리자_dhcp 프로파일 생성 (0) | 2022.05.17 |