[리눅스] SELinux 개념 및 설정 방법, on/off (feat. semanage)

반응형

 

SELinux(Security-Enhanced Linux)란 ?

SELinux는 MAC 기반 리눅스 커널 레벨의 보안 모듈이며, 대부분의 리눅스 배포판에서 지원되고 있습니다.

MAC 기반 SELinux는 어떤 프로세스가 특정 파일/디렉터리/포트 등에 접근 가능한지에 대해 이미 정의된 접근 통제 정책이 제공됩니다. 서버 운영자는 이미 정의된 접근 통제 정책을 운영 환경에 맞게 추가/변경/삭제 작업을 한다고 보면 됩니다.

 

 

SELinux 기능 켜기/끄기

/etc/selinux/config 파일 또는 setenforce 명령어로 설정할 수 있습니다.

방법1
[servera]# vi /etc/selinux/config
SELINUX=enforcing/permissive/disabled 택 1
   enforcing - 활성화
   permissive - 관련 경고만 표시, 비활성화
   disabled - 비활성화


방법2
[servera]# setenforce 0
[servera]# getenforce
Permissive
[servera]# setenforce 1
[servera]# getenforce
Enforcing

 

 

sestatus 명령어로 상태 확인

[servera]# sestatus
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
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      33

 

 

정책 관리

semanage 명령어는 SELinux 보안 정책 조회/추가/변경/삭제 시 사용되는 유틸리티입니다.

참고로 semanage 사용을 위해서는 아래 패키지 설치가 필요합니다.

[servera]# dnf provides */semanage
Last metadata expiration check: 0:06:33 ago on Tue Apr  9 22:55:21 2024.
policycoreutils-python-utils-3.5-3.el9_3.noarch : SELinux policy core python utilities  // 여기에 나온 패키지 설치 해야함
Repo        : @System
Matched from:
Filename    : /usr/sbin/semanage
Filename    : /usr/share/bash-completion/completions/semanage


[servera]# dnf install -y policycoreutils-python-utils

 

 

로그 관리

기본적으로 /var/log/audit 아래에 저장되며, 정확한 분석을 하기 위해서 sealert 로그 분석 및 해결 방안 패키지 설치를 추천

[servera]# dnf install -y setroubleshoot-server
[servera]# sealert -a /var/log/audit/audit.log

 

 

예시1.

상황 : 고객사 특정 서버 SSH 포트 변경 요청을 받았다. (기존 22, 변경 2211)

1. SSH 포트 변경 및 서비스 재시작

[servera]# vi /etc/ssh/sshd_config
... (생략)
#Port 22  // 주석처리
Port 2211
... (생략)


[servera]# systemctl restart sshd

 

2. SELinux 정책 중 SSH 서비스 확인

[servera]# semanage port -l | grep -i ssh
ssh_port_t      tcp      22

 

3. SELinux 정책에 SSH 서비스 신규 포트 추가

[servera]# semanage port -a -t ssh_port_t -p tcp 2211

 

4. SELinux 정책 중 SSH 서비스 재확인 (변경사항 반영 확인)

[servera]# semanage port -l | grep -i ssh
ssh_port_t       tcp      2211, 22

 

 

예시2.

상황 : SELinux 사용 환경의 서버에서 서비스 운영 장애 발생 시 트러블 슈팅 방법

1. 로그 분석

[servera]# sealert -a /var/log/audit/audit.log

 

2. 로그를 확인했음에도 불구하고 정확한 문제 파악이 어렵다면 우선 SELinux 모드를 Enforcing → Permissive로 변경

[servera]# vi /etc/selinux/config
SELINUX=Permissive

또는

[servera]# getenforce
Enforcing
[servera]# setenforce 0
Permissive

 

3-1. Permissive 모드 설정 이후 서비스가 정상화 되었다면?

SELinux 보안 정책 문제이므로 정책을 다시 확인하고 필요시 추가/변경/삭제를 수행한다.

 

3-2. Permissive 모드 설정 이후에도 서비스가 정상화되지 않는다면?

SELinux 문제가 아니므로 다른 곳에서 원인을 파악한다.

 

반응형

댓글

Designed by JB FACTORY