접근 통제, SElinux 사용방법

2025. 6. 13. 09:45·Linux

접근 통제란?

접근 통제는 주체(사용자나 프로그램)가 객체(시스템 자원이나 데이터)에 접근할 수 있는지 여부를 제어하는 기법이다.

이 기법의 목적은 중요 정보가 무단으로 노출되거나 변조되지 않도록 막기 위해 기밀성(Confidentiality)과 무결성(Integrity)을 유지하는 것이다.


접근 통제 종류

접근 통제는 여러 방식으로 분류할 수 있다.

대표적인 접근 통제 종류에는 임의적 접근 통제(DAC), 강제적 접근 통제(MAC), 역할 기반 접근 통제(RBAC), 벨 라파듈라 모델, 비바 모델 등이 있다.

1. 임의적 접근 통제 (DAC)

임의적 접근 통제는 사용자나 그룹이 시스템에 존재하는 객체에 대한 접근을 설정할 수 있는 기법이다.

주체가 해당 객체의 소유자라면 임의적으로 다른 주체에게 접근 권한을 설정할 수 있다.

  • 특징:
    • 주체는 객체의 소유자이므로 객체에 대한 권한을 자유롭게 설정 가능.
    • 소유자의 권한을 탈취당하면 모든 객체에 대한 무제한 접근이 가능.
    • 사용이 간편하고 구현이 쉬운 장점이 있지만 보안 위험이 있다.

2. 강제적 접근 통제 (MAC)

강제적 접근 통제는 미리 정해진 정책과 보안 등급에 따라 주체와 객체 간의 접근을 제어하는 방식이다.

주체와 객체는 미리 설정된 보안 등급을 기반으로 접근 가능 여부가 결정된다.

  • 특징:
    • 보안 관리자가 보안 등급과 정책을 설정하고 관리한다.
    • 설정이 복잡하고 관리가 어렵지만, 높은 보안을 요구하는 정보 보호에 효과적.
    • 보안 관리자의 역량에 따라 보안이 크게 달라질 수 있다.

3. 역할 기반 접근 통제 (RBAC)

역할 기반 접근 통제는 주체와 객체 간의 관계를 '역할'을 기준으로 설정하는 방식이다. 사용자가 특정 역할을 수행하고, 역할에 따라 객체에 접근할 수 있는 권한이 결정된다.

  • 특징:
    • 역할을 통해 권한을 부여하므로 관리가 용이하다.
    • 역할 변경 시 과거 권한이 그대로 남는 경우가 있어 불필요한 권한을 가질 수 있다.
    • Authorization Creep(권한 부여 누적)의 문제가 발생할 수 있다.

4. 벨 라파듈라 모델 (Bell-LaPadula Model)

벨 라파듈라 모델은 기밀성을 최우선으로 보호하는 보안 모델이다. 이 모델의 목적은 정보의 노출을 막는 것이다.

  • 규칙:
    1. 상위 레벨 읽기 금지: 자신보다 높은 레벨의 정보를 읽을 수 없다.
    2. 하위 레벨 쓰기 금지: 자신보다 낮은 레벨의 문서에 정보를 쓸 수 없다.

5. 비바 모델 (Biba Model)

비바 모델은 무결성을 보호하는 보안 모델이다. 이 모델의 목적은 정보가 수정되거나 변조되는 것을 방지하는 것이다.

  • 규칙:
    1. 하위 레벨 읽기 금지: 자신보다 낮은 신뢰도를 가진 문서를 읽을 수 없다.
    2. 상위 레벨 쓰기 금지: 신뢰도가 높은 문서에 정보를 쓸 수 없다.


6. 보안 모델에서의 접근 제어

  • 벨 라파듈라 모델(Bell-LaPadula Model)과 비바 모델(Biba Model) 외에도 여러 보안 모델이 존재한다.
    • Lattice-Based Model: 여러 레벨과 등급을 기반으로 정보의 접근을 제어하는 모델. 주로 매트릭스 형식으로 구현되며, 상위 또는 하위 접근 제어를 명시적으로 정의한다.

SELinux (Security-Enhanced Linux)

 

-> SElinux키기

vim /etc/sysconfig/selinux

SElinux=enforcing

 

SELinux는 리눅스 시스템에서 강제 접근 통제(MAC)를 적용하는 보안 모듈이다.

SELinux는 각 주체와 객체에 대해 보안 컨텍스트를 설정하고, 이를 기반으로 접근을 제어한다.

  • 보안 컨텍스트:
    • 사용자(user): SELinux 계정과 일반 계정 간의 매핑이 이루어져 접근 권한이 결정된다.
    • 역할(role): 주체가 수행하는 역할에 따라 접근 권한이 다르게 설정된다.
    • 유형(type): 객체에 적용되는 보안 컨텍스트로, 객체에 대한 접근 권한을 결정한다.
    • 도메인(domain): 주체(프로세스, 사용자 등)에 적용되는 보안 컨텍스트로, 어떤 자원에 접근할 수 있는지 결정된다.

SELinux에서 중요한 명령어는 semanage fcontext -l(파일 시스템의 보안 컨텍스트 조회), chcon(파일의 보안 컨텍스트 변경), sesearch(정책 조회) 등이다.

 


 

1. 보안 정책 확인 및 수정

보안 컨텍스트 조회:

# 시스템에서 관리되는 파일 시스템의 보안 정책을 확인
semanage fcontext -l
# 출력 예시:
# /var/www(/.*)?        system_u:object_r:httpd_sys_content_t:s0

# 시스템에 설정된 모든 타입(type) 조회
seinfo -t
# 출력 예시:
# http_port_t
# httpd_sys_content_t
# ssh_port_t

# 시스템에 설정된 모든 역할(role) 조회
seinfo -r
# 출력 예시:
# unconfined_r
# system_r

보안 컨텍스트 변경:

# 특정 파일이나 디렉토리의 보안 컨텍스트 변경
chcon -t httpd_sys_content_t /var/www/html/index.html

# 파일의 보안 컨텍스트를 원상복구
restorecon /var/www/html/index.html
# 출력 예시: restoring context of '/var/www/html/index.html'

# 파일이나 디렉토리의 보안 컨텍스트를 정책 기반으로 확인
matchpathcon /var/www/html/index.html
# 출력 예시:
# /var/www/html/index.html: system_u:object_r:httpd_sys_content_t:s0

특정 포트의 보안 컨텍스트 확인:

# 특정 포트번호에 설정된 보안 컨텍스트 조회
seinfo --portcon=80
# 출력 예시:
# Port 80: system_u:object_r:http_port_t:s0

# 포트에 설정된 타입 확인
semanage port -l | grep http_port_t
# 출력 예시:
# http_port_t    tcp    80, 443, 8080

2. SELinux Boolean 기능

주요 Boolean 명령어:

# 활성화된 모든 SELinux Boolean 정책을 조회
getsebool -a
# 출력 예시:
# httpd_can_network_connect --> off
# httpd_can_sendmail --> off

# SELinux Boolean 정책을 설정 (1: 활성화, 0: 비활성화)
setsebool httpd_can_network_connect 1
# 출력 예시: (설정 후 적용 결과 출력은 없음)

# 영구 설정으로 시스템 재부팅 후에도 적용되도록 설정
setsebool -P httpd_can_sendmail 1
# 출력 예시: (설정 후 적용 결과 출력은 없음)

예시:

# HTTPD 서비스에서 메일 발송을 허용하는 정책 활성화
setsebool httpd_can_sendmail 1

3. 정책 규칙 확인 및 설정

허용 규칙 확인:

# 주체의 도메인과 객체의 타입에 대해 설정된 허용 규칙을 조회
sesearch -A -t httpd_sys_content_t -s httpd_t -ds
# 출력 예시:
# allow httpd_t httpd_sys_content_t:file { read open getattr };

# 주체(httpd_t)가 객체(httpd_sys_content_t)에게 읽기(open, read 등) 권한을 부여하는 규칙

4. 파일 객체의 타입 변경

파일 객체의 보안 타입 변경:

# 파일에 새로운 타입을 설정
chcon -t httpd_sys_content_t /var/www/html/myfile.txt
# 출력 예시: (설정 후 출력은 없음)

# 원래대로 복구하려면 restorecon 사용
restorecon /var/www/html/myfile.txt
# 출력 예시: restoring context of '/var/www/html/myfile.txt'

파일 원상복구:

# 파일의 보안 정책을 시스템의 기본 설정으로 복구
restorecon /var/www/html/myfile.txt
# 출력 예시:
# restoring context of '/var/www/html/myfile.txt'

5. 정책 적용 및 복구

정책 적용 경로 확인:

# 파일에 설정된 보안 정책을 확인
semanage fcontext -l
# 출력 예시:
# /var/www(/.*)?        system_u:object_r:httpd_sys_content_t:s0

6. SELinux에서 발생하는 문제와 로그 분석

로그 분석:

# 최근 발생한 SELinux Access Vector Cache(AVC)를 검색
ausearch -m avc -ts recent
# 출력 예시:
# type=AVC msg=audit(1596066987.056:228): avc:  denied  { read } for  pid=2951 comm="httpd" name="myfile.txt" dev="sda1" ino=1234567 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:httpd_sys_content_t:s0 tclass=file

# SELinux 로그를 분석하여 발생한 접근 문제를 해결하기 위한 정책 자동 생성
audit2allow -a
# 출력 예시:
# allow httpd_t httpd_sys_content_t:file { read open getattr };

전체 예시

  1. 보안 정책 확인 및 수정
    시스템에서 관리되는 파일 시스템의 보안 정책을 확인하기 위해 semanage fcontext -l 명령어를 실행하여, /var/www/html 경로에 설정된 보안 컨텍스트를 조회한다.
  2. SELinux Boolean 기능
    HTTPD 서버가 메일을 보내는 기능을 활성화하려면, setsebool httpd_can_sendmail 1 명령어로 해당 기능을 설정하고, 이 설정을 재부팅 후에도 유지하도록 하려면 setsebool -P httpd_can_sendmail 1 명령어를 사용한다.
  3. 정책 규칙 확인 및 설정
    주체인 httpd_t가 객체인 httpd_sys_content_t에 대해 어떤 규칙을 가지고 있는지 확인하려면 sesearch -A -t httpd_sys_content_t -s httpd_t -ds 명령어를 실행한다.
  4. 파일 객체의 타입 변경
    /var/www/html/myfile.txt 파일에 httpd_sys_content_t 타입을 설정하려면 chcon -t httpd_sys_content_t /var/www/html/myfile.txt 명령어를 사용하고, 원상복구할 때는 restorecon /var/www/html/myfile.txt 명령어를 사용한다.
  5. SELinux 로그 분석
    ausearch -m avc -ts recent 명령어로 최근에 발생한 SELinux AVC 메시지를 검색하고, 이를 통해 발생한 오류를 분석한 후 audit2allow -a 명령어로 해결책을 생성한다.

 

 

SELinux (Security-Enhanced Linux) -> 오류를 확인 가능

SELinux의 기본 개념과 관리에 필요한 명령어 외에도 보안 정책 관리, 로그 분석, 정책 수정 및 복구 등의 기능이 존재한다. SELinux에서 발생하는 오류나 접근 차단은 주로 /var/log/audit/audit.log에 기록되므로 이를 분석하는 것이 매우 중요하다.


SELinux에서의 보안 레벨 설정

SELinux는 MLS(Multi-Level Security) 또는 MCS(Multi-Category Security) 방식을 사용하여 보안 레벨을 설정할 수 있다.

각 객체와 주체는 일정한 보안 등급을 가지며, 이를 통해 정보의 기밀성을 강화한다.

  • 보안 레벨 설정: SELinux에서는 주체와 객체가 각자의 보안 레벨을 가지며, 상위 레벨의 정보는 하위 레벨의 주체가 접근할 수 없다.

 

 

저작자표시 비영리 변경금지 (새창열림)

'Linux' 카테고리의 다른 글

칼리 리눅스 초기 설정(네트워크 설정, 로그인, 한글) + GVM 설치 및 설정  (1) 2025.07.15
pam 모듈 별 역할, 설정  (0) 2025.06.16
실습 /web,ftp, iptables,db  (0) 2025.05.28
crontab (예약작업 프로그램)  (0) 2025.05.26
FTP(File Transfer Protocol) ,ftpusers, user_list,chroot 설정 방식  (0) 2025.04.30
'Linux' 카테고리의 다른 글
  • 칼리 리눅스 초기 설정(네트워크 설정, 로그인, 한글) + GVM 설치 및 설정
  • pam 모듈 별 역할, 설정
  • 실습 /web,ftp, iptables,db
  • crontab (예약작업 프로그램)
햅삐root
햅삐root
happyroot 님의 블로그 입니다. IT 보안 정리💛
  • 햅삐root
    햅삐한 root
    햅삐root
  • 전체
    오늘
    어제
    • 전체보기 IT (123)
      • Linux (21)
      • Network (23)
      • packet tracer& GNS3 (10)
      • Cryptology (7)
      • WEB (16)
      • DB (16)
      • Hacking (28)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Hack
    sqlinjection
    injectionvector
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
햅삐root
접근 통제, SElinux 사용방법
상단으로

티스토리툴바