이번 글에서는 AppArmor 프로필을 생성하는 방법을 알아보겠습니다. 이전 글에서 몇 가지 AppArmor 프로필 예제를 보았지만, 이번에는 특정 애플리케이션에 맞춘 사용자 정의 프로필을 처음부터 만드는 과정을 살펴보겠습니다.
간단한 bash 스크립트를 사용하여 /opt
파일 시스템 아래에 디렉터리를 생성하고, 이 디렉터리 내에 파일을 작성하는 스크립트를 만들겠습니다. 이 특정 스크립트에 대한 AppArmor 프로필을 생성해보겠습니다.
먼저 AppArmor 유틸리티를 설치해야 합니다. Ubuntu에서는 다음 명령어를 실행하여 apparmor-utils
패키지를 설치할 수 있습니다:
sudo apt-get install apparmor-utils
aa-genprof
명령어를 사용하여 bash 스크립트에 대한 프로필을 생성할 수 있습니다. 다음 단계에 따라 진행합니다.
aa-genprof
명령어를 실행합니다.# add_data.sh
#!/bin/bash
data_directory=/opt/app/data
mkdir -p ${data_directory}
echo "=> File created at `date`" | tee ${data_directory}/create.log
sudo aa-genprof /root/add_data.sh
$ ./add_data.sh
File created at Mon Mar 12 03:29:22 UTC 2021
aa-genprof
창으로 돌아와서 s
를 입력하여 스크립트를 실행할 때 생성된 AppArmor 이벤트에 대한 시스템 로그를 스캔합니다.s
aa-genprof
명령어가 보안 프로필을 생성할 때 참고할 수 있는 일련의 질문들을 생성합니다. 예를 들어, 첫 번째 이벤트는 스크립트가 mkdir
명령을 실행할 수 있도록 권한을 부여할지 묻습니다.Inherit
, Child
, Named
, IX
, Deny
, Abort
, Finish
등의 옵션 중 하나를 선택할 수 있습니다.mkdir
를 실행할 수 있는 권한을 부여하기 위해 Inherit
옵션을 선택합니다.I
A # 예: tty 인터페이스 접근 허용
D # 예: /proc 파일 시스템 접근 거부
S
를 사용하여 프로필을 저장하고 F
를 눌러 완료합니다.S # 프로필 저장
F # 완료
새로 생성된 프로필은 /etc/apparmor.d
디렉터리에 저장됩니다. 예를 들어. add_data.sh
라는 쉘스크립트에 대한 프로필은 /root
에 위치하며, 선언한 모든 규칙이 중괄호 안에 들어있습니다.
프로필이 강제 모드로 설정되어 있는 동안, 스크립트를 다시 실행하여 정상 작동하는지 확인합니다. 로그 파일이 작성되는 경로를 /opt
대신 /opt/app/data
로 변경하여 테스트해 봅니다.
/opt/app/data
이제 스크립트를 실행하면 실패할 것입니다. 메시지는 여전히 터미널에 출력되지만, AppArmor는 /opt/app
및 /opt/app/data
디렉터리에 대한 쓰기만 허용하고 /opt
에는 허용하지 않기 때문입니다.
기존 AppArmor 프로필을 사용하는 방법도 알아보겠습니다. 프로필을 로드하려면 다음 명령어를 실행합니다:
sudo apparmor_parser -r /etc/apparmor.d/your_profile
아무 것도 출력되지 않으면 프로필이 성공적으로 로드된 것입니다. 프로필을 비활성화하려면 같은 명령어를 실행하되 -r 플래그를 사용하고 /etc/apparmor.d/disabled 디렉터리에 프로필을 생성합니다.
sudo apparmor_parser -r /etc/apparmor.d/disabled/your_profile
AppArmor 프로필을 생성하고, 이를 통해 특정 bash 스크립트를 보호하는 방법을 알아보았습니다. 다음 글에서는 Kubernetes Pod 안에서 실행되는 애플리케이션을 보호하기 위해 AppArmor 프로필을 사용하는 방법을 알아보겠습니다.