SELinux - 보안 기능 (Secure Enhanced Linux)
SELinux 소개
- 미국 NSA(국가안보국)에 의해 개발됨 - PRISM
- 접근통제 모델
- 기본적인 리눅스의 파일 접근 권한
- SELinux : 개체별로 Label 기반의 접근 제어
- 사용자-역할 매칭, 역할 별로 권한이 부여
- DAC : Discretionary Access Control (임의적 접근 제어)
- MAC : Mandatory Access Control (강제적 접근제어)
- RBAC : Role-Based Access Control (역할 기반 접근제어)
- 콘텍스트(Context) : SELinux에서 사용하는 Label
- stat [파일명]
- ls -Z [파일명/디렉터리]
- ps -eZ
- 사용자 : 역할 : 유형 : 레벨
- SELinux 동작 모드
- SELinux 동작 상태
- SELinux 규칙 위반할 경우 차단
- SELinux 동작 상태
- SELinux 규칙 위반할 경우 차단하지 않음
- 모니터링 용도
- SELinux 동작하지 않는 상태
- Enforcing, Permissive ↔ Disabled
- enforcing, 1 : Enforcing
- permissive, 0 : Permissive
- disable : Enforcing, Permissive에서는 전환 불가
- enforcing : 강제
- permissive : 모니터링
- disabled : selinux 구동하지 않음
- Enforcing, Permissive 상태에서 Disabled 전환 시 설정 변경 후 재부팅 필요
- Enforcing
- Permissive
- Disabled
- 런타임 동작 모드 조회 : getenforce
- 런타임 동작모드 변경 : setenforce
- /etc/selinux/config : 동작모드 설정
- 부팅 시 동작모드 설정
- 콘텍스트 지정 방식
- mv, cp -a : 기존 파일의 컨텍스트 정보가 그대로 유지
- cp, cat, vi, touch : 해당 위치 디렉터리에 설정된 기본 콘텍스트 규칙
- 컨텍스트 규칙
- # semanage fcontext -l : 현재 설정되어 있는 컨텍스트 규칙 확인
- 컨텍스트 규칙 설정 도구 : semanage
- 컨텍스트 설정
- # chcon -t <SELinux Type> <대상>
- # restorecon <대상>
- chcon : 직접 대상의 컨텍스트 타입을 지정하여 설정
- restorecon : 해당 파일 위치의 컨텍스트 규칙에 따라 수정
- 컨텍스트 규칙 생성
- # semanage fcontext -a -t <지정할 타입> <대상 경로>
- 대상 경로 입력 시, 하위 디렉터리 및 파일까지 포함할 경우, 정규화 표현식의 (/.*)? 를 사용하여 하위 항목까지를 포함하도록 설정
- ex) # semanage fcontext -a -t httpd_sys_content_t '/wwwcontents(/.*)?'
# restorecon -Rv /wwwcontents - 콘텍스트 규칙 삭제
- # semanage fcontext -d -t <타입> <대상 경로>
실습 - 다른 경로에 저장된 콘텐츠를 사용하는 웹 서비스 구성
- 웹 서버 설정 수정
# vi /etc/httpd/conf/httpd.conf
DocumentRoot “/var/www/html” => “/webcontents”
<Directory “/var/www/html”> => “/webcontents"
2. 웹 콘텐츠 경로 생성 및 페이지 생성
# mkdir /webcontents
# cat > /webcontents/index.html
Hello World
3. 웹 서비스 재시작
# systemctl restart httpd.service
4.Enforcing 상태일 경우, SELinux에 의해 차단
5.SELinux 콘텍스트 규칙 추가
# semanage fcontext -a -t httpd_sys_content_t '/webcontents(/.*)?'
6.콘텍스트 규칙에 맞게 컨텍스트 수정
# restorecon -Rv /webcontents
포트 레이블 (SELinux Port Label)
- 네트워크 포트에 대한 SELinux 설정
- 콘텍스트 규칙이 맞지 않을 경우, 포트를 사용할 수 없음
- 포트 레이블 확인
- # semanage port -l
- 포트 레이블 규칙 추가
- # semanage port -a -t <타입> -p <프로토콜> <포트번호>
ex) semanage port -a -t http_port_t -p tcp 7777
- 포트 레이블 규칙 삭제
- # semanage port -d -t <타입> -p <프로토콜> <포트번호>
포트 레이블 실습
- 웹서버의 포트 번호 변경
# vi /etc/httpd/conf/httpd.conf
Listen 80 → 7777
- 웹서버 구동 → 오류 발생 (SElinux 포트 관련 오류)
- SELinux 포트 레이블 확인
# semanage port -l | grep 80
# semanage port -l | grep http
- 기존 웹 서비스를 위한 포트 레이블 정보에 7777/tcp 포트를 추가
# semanage port -a -t http_port_t -p tcp 7777
- 웹서비스를 다시 시작하여 정상 동작을 확인
SELinux Boolean
- 여러 가지 예외 상황에 대한 설정을 on/off로 사용 가능
- # getsebool -a : 현재 SELinux Boolean 설정 확인
- # setsebool <bool 항목> <on|off>
SELinux 문제 해결 방법
- Enforcing 상태에서 동작 확인
- 문제가 있을 경우, Permissive 모드로 변경하여 동작 확인
- Permissive에서 정상 동작 : 관련된 문제 정보를 로그/감사 등을 통해 확인 (/var/log/messages)
참고) sealert 관련 내용이 포함되어 있을 경우 sealert -l <에러코드> 실행을 통해 SELinux 오류 관련 도움을 받을 수 있음
4. 콘텍스트/포트 레이블 등의 설정을 통해 오류 해결
5. SE Boolean 등으로 오류 해결
*이 포스팅은 엔코아 플레이 데이터 수업 내용을 참고로 합니다.
'IT > Linux' 카테고리의 다른 글
NTP (0) | 2021.04.07 |
---|---|
부팅 문제 해결 (0) | 2021.04.06 |
방화벽관리(firewalld) (0) | 2021.04.03 |
로그관리(rsyslog,journal) (0) | 2021.04.01 |
작업 스케줄러 (0) | 2021.03.30 |
댓글