시스템 프로그래밍

SELinux: 리눅스 보안 툴 2

_어니언_ 2024. 11. 22. 15:45

SELinux 보안 컨텍스트 관리

작업을 할 때 안드로이드를 부팅할때마다 `setenforce 0` 를 켜줘야 화면이 부팅되는 이슈가 있었다. 처음에는 기계적으로 명령어를 쳤지만 곧 이게 SELinux 라는 놈의 모드를 변경하는 명령어라는 것을 알았다. SELinux 는 리눅스의 보안툴인데 AppArmor 를 정리한 김에 SELinux 도 한번 정리해보기로 했다.

 

SELinux란?

리눅스 시스템에서 강력한 보안 정책을 구현하기 위해 설계된 프레임워크이다. SELinux 를 이해하기 위해서는 MAC(Mandatory Access Control) 이라는 개념을 이해해야한다. 

 


MAC(Mandatory Access Control)이란?

 

리눅스에서는 기본적으로 user 와 group 을 기반으로 파일시스템 등의 자원들을 제어한다. 하지만 이는 한계를 가지고 있는데

  • 루트 사용자나 특권 프로세스가 시스템의 모든 자원에 접근 가능.
  • 악의적인 코드가 루트 권한을 탈취하면 시스템 전반에 심각한 보안 위협 발생.

만약 root 권한을 갖고 도는 시스템 데몬 등이 악용되면 어떻게 할건가? 이를 방지하기 위해 서비스 단위로 명확한 권한 제어를 하는 정책이 필요했고 이 기능을 하는 것이 MAC 이다.

 


SELinux와 AppArmor의 차이

 

그렇다면 SELinux 와 AppArmor 는 어떻게 다른가? 기본적으로 MAC 을 위한 프레임워크라는 점은 같지만 다른 구현체라고 생각하면 된다. 각 리눅스 배포판별로 사용하는 MAC 프레임워크가 다른데 요약하면 다음과 같다.

 

Linux DistroDefault Security Framework

RHEL, CentOS, Fedora SELinux
Rocky Linux, AlmaLinux SELinux
Android SELinux
Ubuntu AppArmor
Debian, OpenSUSE/SLES AppArmor (SELinux optional)
Arch Linux, Gentoo 선택적 사용 (Neither 기본)

 

 


SELinux 기본 명령어

 

그렇다면 SELinux 를 제어하기 위해 기본이 되는 명령어를 알아보자.

 

 

상태 확인

 

sestatus
  • Enabled: SELinux가 활성화됨.
  • Disabled: SELinux가 비활성화됨.
  • Mode: Enforcing(정책 적용), Permissive(로깅만 수행), Disabled(비활성화).

 

모드 변경

 

SELinux는 아래 3가지 모드를 지원한다:

  • Enforcing: 정책을 강제 적용하며, 위반 시 액세스를 차단.
  • Permissive: 정책을 적용하지 않고 위반 로그만 기록.
  • Disabled: SELinux를 완전히 비활성화.

임시로 모드를 변경할 때는 아래 명령어를 사용한다.

sudo setenforce 1 # enforce mode
sudo setenforce 0 # Permissive mode

 

영구로 모드를 변경할 때는 아래 절차를 따른다.

 

1. 다음 파일을 연다.

sudo vim /etc/selinux/config

 

2. SELINUX 변수 수정 (아래 중 하나로 설정)

SELINUX=enforcing
SELINUX=permissive
SELINUX=disabled

 

3. reboot

 


SELinux 보안 컨텍스트 관리

 

1. 보안 컨텍스트 확인

파일이나 디렉터리의 보안 컨텍스트를 확인

ls -Z /path/to/file

 

 

2. 보안 컨텍스트 변경

특정 파일의 보안 컨텍스트를 변경

sudo chcon -t <type> /path/to/file

 

 

3. 기본 정책 복구

컨텍스트가 손상된 경우 기본 정책으로 복구

sudo restorecon -Rv /path/to/directory

 

 


안드로이드나 RHEL 등 SELinux 기반의 보안정책을 가져가는 OS 를 사용할 때 권한제어를 건드려야 한다면 SELinux 를 건드려보자.

'시스템 프로그래밍' 카테고리의 다른 글

커널 모듈(Kernel Module)  (1) 2024.11.27
dmesg vs journalctl  (0) 2024.11.23
AppArmor, 리눅스 보안 툴  (0) 2024.11.20
GStreamer 란?  (1) 2024.11.19
왜 자꾸 sudo apt update 를 쳐줘야 할까?  (0) 2024.11.16