IT 기술 문서

2025.02.01 17:04

CentOS 7 유용한 명령어 시리즈 - ⑨ SELinux 관리

  • it2033 4일 전 2025.02.01 17:04
  • 6
    0

alt text


CentOS 7에서는 SELinux(Security-Enhanced Linux)가 기본적으로 활성화되어 있으며, 시스템 보안을 강화하는 중요한 역할을 합니다. 하지만, SELinux 설정이 잘못되면 특정 서비스가 정상적으로 작동하지 않을 수 있습니다. 이 글에서는 SELinux를 관리하는 명령어들을 정리하겠습니다.


SELinux 기본 개념

  • SELinux(Security-Enhanced Linux): 사용자, 프로세스 및 파일 간의 접근을 제어하는 보안 기능.

  • 기본 설정: CentOS 7에서는 SELinux가 Enforcing(강제 적용) 상태로 활성화됨.

  • SELinux 모드:

    • Enforcing (강제 적용): SELinux가 활성화된 상태. 정책을 위반하는 액세스는 차단됨.

    • Permissive (허용 모드): 정책을 위반하는 액세스가 허용되지만, 로그에 기록됨.

    • Disabled (비활성화): SELinux가 완전히 비활성화됨.


1. SELinux 상태 확인

sestatus
  • 현재 SELinux의 상태를 확인할 수 있음.

출력 예시:

SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
  • Current mode: enforcing → SELinux가 강제 적용됨.

  • Mode from config file: enforcing → 설정 파일에서 enforcing으로 설정됨.


2. SELinux 모드 변경 (일시적 변경)

2.1. Permissive 모드로 변경 (일시적)

setenforce 0
  • SELinux를 **Permissive(허용 모드)**로 변경.

  • 시스템 재부팅 후 다시 enforcing 모드로 복귀됨.

2.2. Enforcing 모드로 변경 (일시적)

setenforce 1
  • SELinux를 다시 **Enforcing(강제 적용 모드)**로 변경.

2.3. 현재 모드 확인

getenforce
  • Enforcing, Permissive, Disabled 중 현재 상태를 출력.


3. SELinux 영구적 비활성화 (재부팅 후 유지)

3.1. 설정 파일을 직접 수정

nano /etc/selinux/config
  • 다음과 같이 SELINUX 값을 변경:

SELINUX=disabled  # SELinux 완전 비활성화
# SELINUX=permissive  # Permissive 모드 (필요할 경우)
  • 파일을 저장한 후 시스템을 재부팅해야 적용됨.

reboot

3.2. SELinux를 영구적으로 Permissive 모드로 변경

sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
reboot
  • enforcing 모드를 permissive로 변경하고 시스템을 재부팅.


4. SELinux 정책 및 컨텍스트 관리

SELinux는 각 파일과 프로세스에 보안 컨텍스트를 적용하여 접근을 제어함.

4.1. 파일의 SELinux 보안 컨텍스트 확인

ls -Z /var/www/html

출력 예시:

-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 index.html
  • httpd_sys_content_t: Apache가 접근할 수 있는 컨텍스트.

4.2. 특정 파일의 SELinux 컨텍스트 변경

chcon -t httpd_sys_content_t /var/www/html/index.html
  • Apache가 접근할 수 있도록 컨텍스트 변경.

4.3. SELinux 기본 컨텍스트로 복원

restorecon -Rv /var/www/html
  • 변경된 SELinux 보안 컨텍스트를 기본값으로 복원.

4.4. SELinux 정책 목록 확인

semanage fcontext -l
  • 시스템에서 설정된 모든 SELinux 보안 컨텍스트를 확인.


5. SELinux 로그 및 문제 해결

5.1. SELinux 관련 로그 확인

cat /var/log/audit/audit.log | grep AVC
  • SELinux 정책 위반(AVC Denials) 로그를 확인.

5.2. SELinux 오류 해결 자동화

sealert -a /var/log/audit/audit.log
  • SELinux 오류 메시지를 분석하고 해결 방법을 제안.

5.3. 특정 SELinux 정책 허용

ausearch -m AVC -ts recent
  • 최근 SELinux 차단 로그 조회.

audit2allow -a
  • 차단된 정책을 기반으로 새로운 허용 정책을 생성.

audit2allow -a -M mypolicy
semodule -i mypolicy.pp
  • mypolicy라는 이름으로 새로운 SELinux 정책을 추가.


6. SELinux 포트 관리

6.1. 특정 서비스가 사용할 수 있는 포트 확인

semanage port -l | grep http

출력 예시:

http_port_t                     tcp      80, 443
  • Apache 웹 서버는 기본적으로 80, 443 포트를 사용.

6.2. 새로운 포트를 추가 (예: Apache를 8080 포트에서 실행)

semanage port -a -t http_port_t -p tcp 8080
  • 8080 포트를 Apache 서비스에 허용.

6.3. 기존 포트 제거

semanage port -d -t http_port_t -p tcp 8080
  • Apache 서비스에서 8080 포트를 제거.


7. SELinux 부팅 시 옵션 설정

SELinux 부팅 시 특정 설정을 적용할 수도 있음.

7.1. GRUB을 통해 일시적으로 Permissive 모드로 부팅

  1. 부팅 시 GRUB 메뉴에서 편집 모드(e 키)를 선택.

  2. linux16 또는 linux 라인이 있는 곳에서 끝에 다음 추가:

    enforcing=0
  3. Ctrl + X를 눌러 부팅.


정리

명령어

설명

sestatus

SELinux 상태 확인

getenforce

현재 SELinux 모드 확인

setenforce 0

SELinux를 Permissive 모드로 변경 (일시적)

setenforce 1

SELinux를 Enforcing 모드로 변경 (일시적)

nano /etc/selinux/config

SELinux 설정 파일 편집 (영구 변경)

restorecon -Rv /var/www/html

파일의 SELinux 컨텍스트 복원

chcon -t httpd_sys_content_t /var/www/html/index.html

특정 파일의 SELinux 컨텍스트 변경

`cat /var/log/audit/audit.log

grep AVC`

audit2allow -a

SELinux 차단 정책 분석 및 허용 정책 생성

semanage port -l

SELinux에서 허용된 포트 확인

semanage port -a -t http_port_t -p tcp 8080

특정 포트를 SELinux에 추가

sealert -a /var/log/audit/audit.log

SELinux 문제 자동 분석

이번에는 CentOS 7에서 SELinux를 관리하는 방법을 정리했습니다. 다음 시리즈에서는 시스템 종료 및 재부팅 명령어를 다루겠습니다.

  • 공유링크 복사