본문 바로가기
IT/Linux

SELinux

by 혁클 2021. 4. 5.

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 <타입> <대상 경로>

 

실습 - 다른 경로에 저장된 콘텐츠를 사용하는 웹 서비스 구성

  1. 웹 서버 설정 수정

# 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 문제 해결 방법

  1. Enforcing 상태에서 동작 확인
  2. 문제가 있을 경우, Permissive 모드로 변경하여 동작 확인
  3. 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

댓글