Linux AppArmor란? SELinux와의 차이점 및 Ubuntu 보안 정책 관리 방법

Linux 서버를 운영하다 보면 SELinux와 함께 자주 등장하는 보안 기술이 AppArmor(Application Armor) 입니다. 두 기술 모두 애플리케이션의 권한을 제한하여 시스템을 보호하지만, 정책을 작성하는 방식과 관리 방법에는 차이가 있습니다.

특히 Ubuntu와 Debian 계열에서는 AppArmor가 기본적으로 활성화되어 있는 경우가 많으며, Docker나 Snap 패키지 등에서도 AppArmor를 활용하여 애플리케이션의 접근 권한을 제어합니다.

이번 글에서는 AppArmor의 개념과 동작 원리, SELinux와의 차이점, 프로파일(Profile) 관리 방법, 그리고 실무 활용 사례를 자세히 알아보겠습니다.

Linux AppArmor란?

AppArmor는 애플리케이션별로 접근 가능한 파일과 시스템 자원을 제한하는 Linux Kernel 보안 기능입니다.

동작 구조는 다음과 같습니다.

Application

↓

AppArmor Profile

↓

허용 여부 확인

↓

Kernel

↓

파일 및 시스템 자원 접근

애플리케이션마다 별도의 보안 프로파일을 적용하여 필요한 기능만 사용할 수 있도록 제한합니다.

AppArmor가 필요한 이유

예를 들어 웹 서버가 공격을 받아 악성 코드가 실행되었다고 가정해 보겠습니다.

AppArmor가 없다면 공격자는 다음과 같은 작업을 시도할 수 있습니다.

  • 시스템 파일 읽기
  • 중요 설정 파일 수정
  • 사용자 정보 접근
  • 민감한 디렉터리 탐색

하지만 AppArmor 프로파일이 적용되어 있다면 웹 서버는 미리 허용된 파일과 디렉터리만 접근할 수 있습니다.

AppArmor의 동작 방식

AppArmor는 프로파일(Profile) 을 기준으로 접근을 제어합니다.

동작 과정은 다음과 같습니다.

프로그램 실행

↓

AppArmor Profile 확인

↓

파일 접근 요청

↓

허용

↓

접근 성공

또는

↓

차단

↓

접근 거부

정책에 없는 접근은 기본적으로 차단됩니다.

AppArmor와 SELinux의 차이

둘 다 MAC(Mandatory Access Control)을 구현하지만 접근 방식이 다릅니다.

항목AppArmorSELinux
정책 기준파일 경로(Path)Security Context(Label)
설정 난이도쉬움비교적 어려움
기본 배포판Ubuntu, DebianRHEL, CentOS, Rocky Linux
관리 방식프로파일보안 정책

AppArmor는 파일 경로 기반이므로 상대적으로 이해하고 관리하기 쉽습니다.

AppArmor 프로파일

프로파일은 일반적으로 다음 위치에 저장됩니다.

/etc/apparmor.d/

목록 확인

ls /etc/apparmor.d

예시

usr.sbin.nginx

usr.bin.man

usr.sbin.cupsd

각 애플리케이션마다 별도의 프로파일을 가집니다.

AppArmor 상태 확인

현재 AppArmor 상태는 다음 명령으로 확인합니다.

sudo aa-status

예시

apparmor module is loaded

120 profiles are loaded

98 profiles are in enforce mode

현재 활성화된 프로파일과 적용 모드를 확인할 수 있습니다.

AppArmor 동작 모드

AppArmor는 두 가지 주요 모드를 제공합니다.

모드설명
Enforce정책 위반 시 실제 차단
Complain차단하지 않고 로그만 기록

학습 단계에서는 Complain 모드를 많이 사용합니다.

프로파일 모드 변경

Complain 모드로 변경

sudo aa-complain /etc/apparmor.d/usr.sbin.nginx

Enforce 모드로 변경

sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx

설정 후 즉시 적용됩니다.

프로파일 다시 로드

프로파일을 수정한 후에는 다시 로드해야 합니다.

sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx

또는 AppArmor 서비스를 다시 시작합니다.

sudo systemctl reload apparmor

AppArmor 로그 확인

접근이 차단된 이벤트는 시스템 로그에 기록됩니다.

Ubuntu에서는 다음 명령으로 확인할 수 있습니다.

sudo journalctl | grep apparmor

또는

dmesg | grep apparmor

차단 원인을 분석할 때 자주 사용됩니다.

Docker와 AppArmor

Ubuntu에서 Docker를 실행하면 기본적으로 docker-default AppArmor 프로파일이 적용됩니다.

확인

docker inspect 컨테이너명

출력 예시

AppArmorProfile

↓

docker-default

필요에 따라 사용자 정의 AppArmor 프로파일을 지정할 수도 있습니다.

실무에서 자주 사용하는 명령어

AppArmor 상태 확인

sudo aa-status

프로파일 목록

ls /etc/apparmor.d

Enforce 모드

sudo aa-enforce 프로파일명

Complain 모드

sudo aa-complain 프로파일명

프로파일 재적용

sudo apparmor_parser -r 프로파일명

로그 확인

sudo journalctl | grep apparmor

Docker 프로파일 확인

docker inspect 컨테이너명

실무 사례

예를 들어 Ubuntu 서버에서 Nginx가 특정 디렉터리의 파일을 읽지 못하는 상황을 가정해 보겠습니다.

다음 순서로 점검합니다.

  1. aa-status로 AppArmor 활성화 여부 확인
  2. journalctl | grep apparmor로 차단 로그 확인
  3. 해당 Nginx 프로파일 검토
  4. 필요한 디렉터리 접근 권한 추가
  5. apparmor_parser -r로 프로파일 다시 로드
  6. 서비스 재시작 후 정상 동작 확인

실무에서는 단순한 파일 권한 문제가 아니라 AppArmor 정책 때문에 접근이 차단되는 경우도 자주 발생합니다.

자주 묻는 질문

AppArmor와 SELinux 중 어느 것이 더 좋은가요?

정답은 없습니다. AppArmor는 경로 기반이라 설정이 쉽고 Ubuntu 환경에서 많이 사용됩니다. SELinux는 보안 정책이 더 세밀하지만 설정과 관리가 상대적으로 복잡합니다.

AppArmor를 비활성화해도 되나요?

개발이나 테스트 환경에서는 가능하지만 운영 서버에서는 권장되지 않습니다. 보안 계층이 하나 줄어들어 애플리케이션 취약점이 시스템 전체로 확산될 위험이 커질 수 있습니다.

Docker에서도 AppArmor가 적용되나요?

네. Ubuntu에서 Docker를 실행하면 기본적으로 docker-default AppArmor 프로파일이 적용되어 컨테이너의 권한을 제한합니다.

마무리

AppArmor는 Linux Kernel에서 제공하는 MAC 기반 보안 프레임워크로, 애플리케이션별 프로파일을 통해 파일과 시스템 자원 접근을 제한합니다. Ubuntu와 Debian 환경에서 기본적으로 널리 사용되며, Docker와 Snap 같은 최신 플랫폼에서도 중요한 보안 기술로 활용됩니다. aa-status, aa-enforce, aa-complain 등의 명령을 익혀 두면 AppArmor 정책을 효과적으로 관리하고 운영 환경의 보안 수준을 높일 수 있습니다.

댓글 남기기