AppArmor란?
Linux의 MAC(Mandatory Access Control) 보안 모듈로, 프로세스가 접근할 수 있는 파일·네트워크·기능을 프로파일로 제한합니다. Ubuntu의 기본 보안 모듈입니다.
설치 및 상태 확인
# 대부분의 Ubuntu에는 기본 설치됨
sudo apt install -y apparmor apparmor-utils
# 상태 확인
sudo aa-status
sudo apparmor_status
# 로드된 프로파일 목록
sudo aa-status | grep -A100 "profiles are loaded"3가지 모드
| 모드 | 설명 |
|---|---|
| enforce | 정책 위반 시 차단 + 로그 |
| complain | 차단하지 않고 로그만 기록 (개발·테스트용) |
| disabled | AppArmor 비활성화 |
# 특정 프로파일을 complain 모드로
sudo aa-complain /usr/sbin/nginx
# enforce 모드로 전환
sudo aa-enforce /usr/sbin/nginx
# 특정 프로파일 비활성화
sudo aa-disable /usr/sbin/nginx
# 모든 프로파일 확인
sudo aa-status --verbose기존 프로파일 관리
# 프로파일 위치
ls /etc/apparmor.d/
# 프로파일 로드 (파일 수정 후)
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx
# 전체 프로파일 재로드
sudo systemctl reload apparmor
# 특정 프로파일 언로드
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.nginx새 프로파일 생성 (aa-genprof)
# 프로파일 자동 생성 (프로그램 실행하며 학습)
sudo aa-genprof /usr/local/bin/myapp
# 1. 다른 터미널에서 myapp 실행 및 테스트
# 2. aa-genprof 프롬프트에서 S(scan) 입력
# 3. 각 접근에 대해 Allow/Deny 선택
# 4. F(finish)로 완료프로파일 수동 작성 예시
# /etc/apparmor.d/usr.sbin.nginx
#include <tunables/global>
/usr/sbin/nginx {
#include <abstractions/base>
#include <abstractions/nameservice>
capability net_bind_service,
capability setuid,
capability setgid,
# 실행 파일
/usr/sbin/nginx mr,
# 설정 파일 읽기
/etc/nginx/** r,
# 로그 쓰기
/var/log/nginx/ rw,
/var/log/nginx/** rw,
# 웹 루트 읽기
/var/www/html/** r,
# PID 파일
/run/nginx.pid rw,
# 소켓
network inet stream,
network inet6 stream,
# 차단: 다른 모든 접근
}# 프로파일 적용
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginx
sudo aa-enforce /usr/sbin/nginx로그 분석
# AppArmor 거부 로그
sudo dmesg | grep -i apparmor
sudo journalctl -k | grep "apparmor.*DENIED"
# audit 로그
sudo grep "apparmor" /var/log/syslog | tail -30
sudo grep "apparmor" /var/log/kern.log | tail -30
# complain 모드로 배운 내용을 프로파일에 추가
sudo aa-logprof # 로그를 분석해 자동으로 규칙 제안이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.