업무를 하던 중 system daemon 이 특정 directory 에 접근하지 못해서 이를 해결하느라 애를 먹었다. 알고 보니 AppArmor 라는 보안 기능이 system daemon 의 파일 접근 권한을 막고 있었다.. 그래서 이번 기회에 AppArmor 에 대해 한번 정리해보았다.
AppArmor 의 핵심은 각 process 가 허용된 자원 (파일 시스템, 네트워크 등)에만 접근하게 허용해주는 것이다. system daemon 같은 경우는 root 권한을 갖고 돌기 때문에 악용된다면 보안적으로 심각한 문제를 초래할 수 있기에 이런 보안적인 장치가 꼭 필요하다!
예를 들어, Apache2와 같은 웹 서버는 일반적으로 다음 경로에만 접근하도록 설정할 수 있다.
- /etc/apache2: 설정 파일 경로
- /var/www: 웹 콘텐츠 경로
Apache2 가 여기 저기 접근할 수 있으면 client 가 web 을 통해 서버를 해킹 할 수 있을 수 있다! 그래서 AppArmor 가 저 위에 경로만 허용해 주는것..
또 AppArmor 은 파일시스템 뿐 아니라 네트워크와 프로세스 제어도 가능하다. 예를들어, 이메일 앱은 다음 포트를 통해서만 통신할 수 있도록 설정할 수 있다.
- SMTP: 포트 25
- IMAP: 포트 143
AppArmor Profile
AppArmor의 제어는 프로파일(profile)을 기반으로 이루어진다. 프로파일은 특정 바이너리(/usr/bin/* 등)을 기준으로 /etc/apparmor.d/ 디렉토리에 저장된다. 예를 들어, Firefox 브라우저의 프로파일은 다음 경로에 위치한다.
/etc/apparmor.d/usr.bin.firefox

프로파일 관리
AppArmor 프로파일을 수정하거나 새로 생성한 후에는 다음 명령어로 이를 적용하거나 비활성화 할 수 있다.
# 적용
sudo apparmor_parser -r /etc/apparmor.d/usr.bin.your-executable
# 비활성화
sudo apparmor_parser -R /etc/apparmor.d/usr.bin.your-executable
또는 특정 바이너리에 대해 AppArmor를 비활성화하려면 다음과 같이 실행한다.
# 바이너리 AppArmor 비활성화
sudo aa-disable /usr/bin/your-executable
# 바이너리 AppARmor 다시 활성화
sudo aa-enforce /usr/bin/your-executable
모드: Enforce와 Complain
AppArmor는 두 가지 주요 모드를 지원한다.
- Enforce Mode: 프로파일에 정의된 제약을 강제적으로 적용한다.
- Complain Mode: 제약을 적용하지는 않지만, 위반 사항을 로그로 기록한다.
# enforce mode
sudo aa-enforce /etc/apparmor.d/your-executable
# complain mode
sudo aa-complain /etc/apparmor.d/your-executable
상태 확인
AppArmor의 현재 상태와 각 바이너리의 모드를 확인하려면 다음 명령어를 사용한다.
sudo aa-status
로그와 디버깅
AppArmor의 로그는 기본적으로 다음 위치에 저장된다.
- /var/log/syslog
- /var/log/audit/audit.log
오늘의 결론. system daemon 이 파일시스템 등 자원 접근에서 Permission Error 를 받는다면 AppArmor 를 의심해보자..
'시스템 프로그래밍' 카테고리의 다른 글
커널 모듈(Kernel Module) (1) | 2024.11.27 |
---|---|
dmesg vs journalctl (0) | 2024.11.23 |
SELinux: 리눅스 보안 툴 2 (0) | 2024.11.22 |
GStreamer 란? (1) | 2024.11.19 |
왜 자꾸 sudo apt update 를 쳐줘야 할까? (0) | 2024.11.16 |