안녕하세요 born2beroot를 진행하면, AppArmor와 SELinux라는 키워드가 등장합니다.
이 두개는 리눅스 커널 기반의 보안 강화 모듈입니다. 보안설정의 경우 신경써야되는 부분이 많고, 결정적으로 귀찮기에 일반 사용자의 경우 보안 기능을 꺼버리는 경우가 많습니다.
나중에 우리가 서버 인프라를 구축하고 관리하려면 보안설정에 대해서도 신경써야된다고 생각합니다. 여러 글을 참고하여 SELinux에 대해서 간단하게 정리해보고자 합니다.
접근 통제 방식
먼저, SELinux 를 이해하기 위해 필수적인 지식인 접근 통제 방식에 대해서 알고 있어야 합니다.
아래 링크의 게시글을 먼저 읽어주세요
SELinux란 무엇일까?
SELinux는 (Security-Enhanced Linux)의 약자이고, MAC 기반의 리눅스 커널 레벨의 보안 모듈입니다.
SELinux는 현재 대부분의 최신 리눅스 배포판에서 지원되고있습니다.
이미 정의되어 있는 접근 통제 정책
MAC 기반으로 되어 있는 SELinux는 어떤 프로세스가 어떤 파일, 디렉터리, 포트등에 접근 가능한지에 대해 사전에 잘 정의된 접근 통제 정책이 제공됩니다. 그러하기에 우리는 해당 정책을 잘 확인해서 변경, 추가, 삭제만 하면 됩니다.
SELinux 기능 켜기
CentOS의 경우 SELinux가 기본으로 탑재되어 있습니다.
/etc/selinux/config 파일에서 On/Off을 설정할 수 있습니다.
# SELINUX= can take one of these three values:
# enforcing - SELinux 켜기
# permissive - SELinux 관련된 경고를 표시만하고, 사용하지 않기
# disabled - SELinux 끄기
SELINUX=enforcing
Bash
복사
sestatus 명령어로 On/Off 상태를 확인할 수 있습니다
[opc@instance-1 ~]$ 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
Max kernel policy version: 31
PowerShell
복사
정책 변경하기
semanage
semanage는 SELinux 의 보안 정책을 조회하고 추가/변경/삭제할 수 있는 명령행 기반의 유틸리티입니다.
semanage 는 아래 패키지를 설치해야 사용할 수 있습니다.
dnf install -y policycoreutils-python
PowerShell
복사
시나리오 : SSH 포트 변경
SSH 연결 포트는 보통 22번으로 사용합니다. 하지만, 여러 이유로 다른 포트로 설정할 수 있습니다.
예를 들어, 22번을 4242번으로 변경하고 싶을때 어떻게 해야되는지 알아보겠습니다.
1.
/etc/ssh/sshd_config 수정
Port 4242
Bash
복사
2.
semanage에서 ssh에 허용된 포트를 확인
[root@instance-1 opc]# semanage port -l | grep ssh
ssh_port_t tcp 22
Shell
복사
3.
semange에서 ssh에 포트 추가
[root@instance-1 opc]# semanage port -a -t ssh_port_t -p tcp 4242
Shell
복사
4.
ssh 허용된 포트 확인
[root@instance-1 opc]# semanage port -l | grep ssh
ssh_port_t tcp 4242, 22
Shell
복사
트러블 슈팅
sealert
SELinux에서 발생하는 오류나 이슈는 /var/log/audit 아래 로그에 저장됩니다.
하지만, 로그를 해석하고 처리하기가 어렵습니다. sealert는 로그를 분석해주고 안내해주는 프로그램입니다.
먼저 다음 패키지를 설치합니다.
dnf install setroubleshoot-server
Shell
복사
-a 옵션으로 현재 이벤트 로그를 분석할 수 있습니다.
sealert -a /var/log/audit/audit.log
Plain Text
복사
프로그램에서 로그 분석이 끝나면 해결방안을 안내 해줍니다.
semanage에 ssh 4242 포트를 추가 안해서 뜬 내용 같습니다.
해석하기 어렵긴 하지만, 로그파일 보단 친절하게 되어있고, 해결방법까지 알려줍니다.
SELinux 장애 처리 절차
SELinux 장애 처리 절차
출처 : web service hardening
SELinux를 사용하다가 서비스 문제가 발생하였다면 장애 처리 절차를 참고해서 처리해야 합니다.
먼저, sealert 또는 로그 분석으로 원인 파악을 합니다.
정확히 원인을 확인이 힘들다면 SELinux를 enforcing 모드에서 Permissive 모드로 전환합니다.
서비스가 잘 구동 되면, SELinux의 보안 정책 문제이므로, 해당 문제를 파악해서 semanage를 이용해 SELinux 정책을 추가합니다.
서비스가 잘 구동이 안되면, SELinux의 문제가 아니므로 다른 원인을 파악합니다.
결론
SELinux를 사용하게 되면 프로세스를 보안정책에 맞게 세팅해야 됩니다. 자유롭게 보안 정책을 수정 할 수 있지만, 한번 더 체크해야 되는 사항이 있는거니 불편하긴 합니다.
또한, SELinux는 한계가 있습니다. SELinux를 설정 하였다고 크래커로부터 무적이 되는것이 아닙니다.
SELinux의 주요 목표는 잘못된 설정이나 프로그램의 보안 버그로 인해 시스템이 공격 당해도 시스템과 데이타를 보호하고 2차 피해를 막는 것이기에, SELinux 를 사용하더라도 추가적으로 방화벽이나 백신, 침입 탐지가 필요하다면 혼용하여 사용해야 합니다.
참고 문헌