리눅스 시스템을 운영하다 보면 보안이라는 단어가 끊임없이 머릿속을 맴돌게 됩니다. 특히 서버를 운영하거나 중요한 데이터를 다루는 경우라면 더욱 그렇겠죠. 이때 등장하는 두 가지 핵심적인 보안 도구가 바로 AppArmor와 SELinux입니다. 이 두 녀석은 리눅스 시스템의 보안을 강화하기 위해 설계된 Mandatory Access Control (MAC) 시스템입니다. 마치 보디가드처럼, 허가되지 않은 접근을 차단하여 시스템을 보호하는 역할을 수행하죠. 하지만 이름만큼이나 작동 방식과 설정 방법에도 차이가 있습니다. 이번 글에서는 AppArmor와 SELinux의 차이점을 꼼꼼하게 비교하고, 각각의 설정 방법을 자세히 알아보겠습니다. 마치 두 보안 전문가를 옆에 두고 설명을 듣는 것처럼, 쉽고 명확하게 설명해 드릴 테니, 리눅스 보안에 대한 이해를 한 단계 더 높여보세요!
AppArmor와 SELinux, 그들은 누구인가?
Mandatory Access Control (MAC)이란 무엇일까요?
AppArmor와 SELinux를 제대로 이해하기 전에, 먼저 MAC (Mandatory Access Control)이라는 개념을 짚고 넘어갈 필요가 있습니다. MAC은 시스템 자원에 대한 접근 권한을 시스템 관리자가 중앙 집중적으로 관리하는 보안 모델입니다. 쉽게 말해, ‘누가’ ‘무엇’을 ‘어떻게’ 할 수 있는지 미리 정의해두고, 시스템은 이 규칙에 따라 접근을 허용하거나 차단하는 것이죠. 이는 일반적인 DAC (Discretionary Access Control) 모델과는 대조적입니다. DAC에서는 파일 소유자가 자신의 파일에 대한 접근 권한을 자유롭게 설정할 수 있지만, MAC에서는 시스템 관리자가 설정한 정책이 우선됩니다.
AppArmor, 간결함 속에 숨겨진 강력함
AppArmor는 Canonical에서 개발한 MAC 시스템으로, Ubuntu를 비롯한 여러 리눅스 배포판에서 기본적으로 사용됩니다. AppArmor의 가장 큰 특징은 ‘경로 기반’ 정책 설정 방식입니다. 즉, 특정 프로그램이 특정 파일 경로에 접근하는 것을 허용하거나 차단하는 규칙을 정의하는 것이죠. 이러한 방식은 비교적 직관적이고 이해하기 쉬워서, 초보자도 쉽게 정책을 설정하고 관리할 수 있습니다.
SELinux, 복잡하지만 강력한 보안 전문가
SELinux는 NSA (미국 국가안보국)에서 개발한 MAC 시스템으로, Red Hat, Fedora, CentOS 등 주로 Red Hat 계열의 리눅스 배포판에서 많이 사용됩니다. SELinux는 AppArmor와 달리 ‘보안 컨텍스트’ 기반 정책 설정 방식을 사용합니다. 각 파일, 프로세스, 네트워크 포트 등에 보안 컨텍스트라는 레이블을 부여하고, 이 레이블 간의 상호작용을 정의하는 규칙을 설정하는 것이죠. 이러한 방식은 AppArmor보다 훨씬 더 세밀하고 강력한 보안 정책을 구현할 수 있지만, 설정과 관리가 복잡하다는 단점이 있습니다.
주요 특징 비교 분석
정책 설정 방식 비교
- AppArmor: 경로 기반 정책 설정. 특정 프로그램이 특정 파일 경로에 접근하는 것을 허용/차단.
- SELinux: 보안 컨텍스트 기반 정책 설정. 파일, 프로세스 등에 레이블을 부여하고, 레이블 간 상호작용을 정의.
AppArmor는 경로 기반으로 정책을 설정하기 때문에, 새로운 프로그램이 설치되거나 파일 경로가 변경될 경우 정책을 수정해야 할 수 있습니다. 반면, SELinux는 보안 컨텍스트 기반으로 정책을 설정하기 때문에, 파일 경로 변경에 덜 민감합니다. 하지만 SELinux는 정책 설정이 훨씬 더 복잡하고, 잘못 설정하면 시스템 전체가 작동하지 않을 수도 있습니다.
학습 곡선 및 사용 편의성 비교
- AppArmor: 비교적 직관적이고 이해하기 쉬운 정책 설정 방식. 초보자도 쉽게 접근 가능.
- SELinux: 복잡하고 난해한 정책 설정 방식. 고급 사용자에게 적합.
AppArmor는 사용 편의성이 뛰어나기 때문에, 리눅스 보안에 처음 입문하는 사용자에게 적합합니다. SELinux는 학습 곡선이 가파르지만, 고급 기능을 활용하여 더욱 강력한 보안 환경을 구축할 수 있습니다. 따라서 보안 전문가나 시스템 관리자에게 적합하다고 할 수 있습니다.
성능 영향 비교
- AppArmor: 시스템 성능에 미치는 영향이 비교적 적음.
- SELinux: 시스템 성능에 미치는 영향이 AppArmor보다 큼.
AppArmor는 정책 설정 방식이 비교적 간단하기 때문에, 시스템 성능에 미치는 영향이 적습니다. SELinux는 더욱 복잡한 정책을 처리해야 하므로, 시스템 성능에 부담을 줄 수 있습니다. 하지만 최근 하드웨어 성능이 향상됨에 따라, SELinux의 성능 영향은 과거에 비해 많이 줄어들었습니다.
지원 및 커뮤니티 비교
- AppArmor: Ubuntu를 중심으로 활발한 커뮤니티 지원.
- SELinux: Red Hat을 중심으로 폭넓은 커뮤니티 지원.
AppArmor는 Ubuntu를 비롯한 Debian 계열의 리눅스 배포판에서 널리 사용되기 때문에, 관련 커뮤니티 지원이 활발합니다. SELinux는 Red Hat 계열의 리눅스 배포판에서 주로 사용되며, 보안 전문가들이 많이 사용하기 때문에, 더욱 전문적인 커뮤니티 지원을 받을 수 있습니다.
AppArmor 설정 방법
AppArmor 설치 및 활성화
Ubuntu에서는 AppArmor가 기본적으로 설치되어 활성화되어 있습니다. 만약 설치되어 있지 않다면, 다음 명령어를 사용하여 설치할 수 있습니다.
sudo apt-get install apparmor apparmor-utils
AppArmor가 활성화되어 있는지 확인하려면 다음 명령어를 사용합니다.
sudo apparmor_status
프로파일 생성 및 수정
AppArmor는 각 프로그램에 대한 프로파일을 사용하여 정책을 정의합니다. 새로운 프로파일을 생성하려면 다음 명령어를 사용합니다.
sudo aa-genprof /path/to/your/program
위 명령어를 실행하면 AppArmor가 해당 프로그램을 실행하면서 발생하는 모든 활동을 기록하고, 이를 바탕으로 프로파일을 생성합니다. 생성된 프로파일은 /etc/apparmor.d/
디렉토리에 저장됩니다. 프로파일을 수정하려면 텍스트 편집기를 사용하여 해당 파일을 열고 수정하면 됩니다.
프로파일 적용 및 비활성화
프로파일을 적용하려면 다음 명령어를 사용합니다.
sudo aa-enforce /etc/apparmor.d/your.profile
프로파일을 비활성화하려면 다음 명령어를 사용합니다.
sudo aa-disable /etc/apparmor.d/your.profile
AppArmor 모드 변경
AppArmor는 두 가지 모드로 작동합니다. ‘Enforcement’ 모드에서는 정책에 위반되는 모든 활동을 차단하고, ‘Complain’ 모드에서는 정책에 위반되는 활동을 기록만 합니다. 모드를 변경하려면 다음 명령어를 사용합니다.
sudo aa-enforce /etc/apparmor.d/your.profile # Enforcement 모드로 변경
sudo aa-complain /etc/apparmor.d/your.profile # Complain 모드로 변경
SELinux 설정 방법
SELinux 설치 및 활성화
Red Hat 계열의 리눅스 배포판에서는 SELinux가 기본적으로 설치되어 활성화되어 있습니다. 만약 설치되어 있지 않다면, 다음 명령어를 사용하여 설치할 수 있습니다.
sudo yum install selinux-policy selinux-policy-targeted selinux-utils
SELinux가 활성화되어 있는지 확인하려면 다음 명령어를 사용합니다.
sestatus
SELinux 모드 변경
SELinux는 세 가지 모드로 작동합니다. ‘Enforcing’ 모드에서는 정책에 위반되는 모든 활동을 차단하고, ‘Permissive’ 모드에서는 정책에 위반되는 활동을 기록만 하고 차단하지 않습니다. ‘Disabled’ 모드에서는 SELinux가 완전히 비활성화됩니다. 모드를 변경하려면 /etc/selinux/config
파일을 수정해야 합니다.
SELINUX=enforcing # Enforcing 모드로 설정
SELINUX=permissive # Permissive 모드로 설정
SELINUX=disabled # Disabled 모드로 설정
파일을 수정한 후에는 시스템을 재부팅해야 변경 사항이 적용됩니다.
보안 컨텍스트 변경
SELinux는 각 파일, 프로세스 등에 보안 컨텍스트라는 레이블을 부여합니다. 보안 컨텍스트를 변경하려면 chcon
명령어를 사용합니다.
chcon -t httpd_sys_content_t /path/to/your/file
위 명령어는 해당 파일의 보안 컨텍스트를 httpd_sys_content_t
로 변경합니다. 보안 컨텍스트를 영구적으로 변경하려면 semanage fcontext
명령어를 사용해야 합니다.
정책 규칙 생성 및 수정
SELinux 정책 규칙은 SELinux Policy Management (semanage
) 도구를 사용하여 관리합니다. 새로운 규칙을 생성하거나 기존 규칙을 수정하려면 semanage
명령어를 사용해야 합니다. SELinux 정책 규칙은 매우 복잡하고 난해하기 때문에, 전문가의 도움이 필요할 수 있습니다.
사용 경험 및 성능 분석
개인적으로 AppArmor와 SELinux를 모두 사용해 본 경험을 바탕으로 말씀드리자면, AppArmor는 설정이 비교적 간단하고 사용하기 쉬워서, 웹 서버나 파일 서버 등 일반적인 서버 환경에서 사용하기에 적합합니다. 반면, SELinux는 설정이 복잡하고 어렵지만, 더욱 강력한 보안 환경을 구축할 수 있어서, 금융 서버나 데이터베이스 서버 등 보안이 매우 중요한 환경에서 사용하기에 적합합니다.
성능 측면에서는 AppArmor가 SELinux보다 시스템 성능에 미치는 영향이 적습니다. 하지만 최근 하드웨어 성능이 향상됨에 따라, SELinux의 성능 영향은 과거에 비해 많이 줄어들었습니다. 따라서 시스템 성능보다는 보안 수준을 우선적으로 고려해야 하는 경우라면 SELinux를 선택하는 것이 좋습니다.
유사 제품/서비스와의 비교
AppArmor와 SELinux 외에도 리눅스 시스템의 보안을 강화하는 다양한 도구들이 있습니다. 예를 들어, firewalld
는 네트워크 방화벽 역할을 수행하여 외부로부터의 공격을 차단하고, fail2ban
은 특정 IP 주소로부터의 접속을 차단하여 무차별 대입 공격을 방지합니다. 이러한 도구들은 AppArmor와 SELinux와 함께 사용하여 더욱 강력한 보안 환경을 구축할 수 있습니다.
또한, 클라우드 환경에서는 AWS Security Groups, Azure Network Security Groups 등 클라우드 제공업체에서 제공하는 보안 서비스들을 활용하여 네트워크 보안을 강화할 수 있습니다. 이러한 서비스들은 AppArmor와 SELinux와 함께 사용하여 클라우드 환경의 보안을 더욱 강화할 수 있습니다.