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)을 구현하지만 접근 방식이 다릅니다.
| 항목 | AppArmor | SELinux |
|---|---|---|
| 정책 기준 | 파일 경로(Path) | Security Context(Label) |
| 설정 난이도 | 쉬움 | 비교적 어려움 |
| 기본 배포판 | Ubuntu, Debian | RHEL, 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가 특정 디렉터리의 파일을 읽지 못하는 상황을 가정해 보겠습니다.
다음 순서로 점검합니다.
aa-status로 AppArmor 활성화 여부 확인journalctl | grep apparmor로 차단 로그 확인- 해당 Nginx 프로파일 검토
- 필요한 디렉터리 접근 권한 추가
apparmor_parser -r로 프로파일 다시 로드- 서비스 재시작 후 정상 동작 확인
실무에서는 단순한 파일 권한 문제가 아니라 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 정책을 효과적으로 관리하고 운영 환경의 보안 수준을 높일 수 있습니다.