Docker / LXC의 AppArmor 프로파일


11

MySQL을 실행하는 Docker 컨테이너 (LXC)가 있습니다. Docker의 기본 개념은 일반적으로 "컨테이너 당 하나의 실행 프로세스"이므로 MySQL 바이너리를 대상으로하는 AppArmor 프로파일을 정의하면 적용됩니까? 이것을 테스트 할 수있는 방법이 있습니까?


왜 당신은 용기 안에서 의복을 사용하고 싶습니까?
c4f4t0r

3
경우 제로 데이 또는 다른 액세스를 방지하기 위해 데이터베이스에 대해 실행 악용 아무것도 다른 사람을. 나는 리눅스 cgroups를 믿지만 그렇게 많지는 않다 . 미안보다 안전하는 것이 낫습니다 .MySQL 제로 데이가 cgroup을 벗어날 수있는 방법을 찾는 것보다 MySQL을 잠그고 싶습니다.
Naftuli Kay

답변:


8

첫째, cgroup은 시스템의 다른 응용 프로그램과 응용 프로그램을 분리하는 데 사용되지 않습니다. 리소스 사용 및 장치 액세스를 관리하는 데 사용됩니다. (제한된) 격리를 제공하는 다양한 네임 스페이스 (PID, UTS, mount, user ...)입니다.

또한 Docker 컨테이너 내에서 시작된 프로세스는 실행중인 AppArmor 프로파일을 관리하지 못할 수 있습니다. 현재 취해진 접근법은 컨테이너를 시작하기 전에 특정 AppArmor 프로파일을 설정하는 것입니다.

Docker의 libcontainer 실행 드라이버가 컨테이너대한 AppArmor 프로파일 설정을 지원하는 것처럼 보이지만 문서에서 예제 나 참조를 찾을 수 없습니다.

분명히 AppArmor는 Ubuntu의 LXC 에서도 지원됩니다 .

애플리케이션 내부에 AppArmor 프로파일을 작성하고 컨테이너 내부에서 프로세스를 시작하기 전에 LXC / libcontainer / Docker / ...가로드하는지 확인해야합니다.

이 방법으로 사용 된 프로파일은 적용되어야하며 테스트하려면 불법 액세스를 시도하여 실패하는지 확인해야합니다.

이 경우 바이너리와 실제로 적용되는 프로파일 사이에는 링크가 없습니다. 컨테이너에이 프로파일을 사용하려면 Docker / LXC에 명시 적으로 지시해야합니다. MySQL 바이너리에 대한 프로파일을 작성하면 컨테이너가 아닌 호스트에서만 프로파일을 시행합니다.


이것은 지금까지 나의 (제한된) 경험이었습니다. Docker 컨테이너 내에서 프로파일을 생성하는 데 문제가 있었지만 컨테이너 외부 에서 프로파일을 생성 한 다음 복사 한 경우 실행 가능해야합니다. 물론 실행 파일을 실행하기 전에 컨테이너에서 AppArmor를 시작해야합니다.
Naftuli Kay

@Siosm : LCX! = libcontainer. 문제는 LXC 드라이버에 관한 것이었다.
0xC0000022L

@ 0xC0000022L : AppArmor 프로파일 적용 모델은 컨테이너의 프로세스를 제한하는 데 사용되는 모든 도구에 대해 동일합니다.
Siosm

3

대답은 매우 가능성이 높습니다.

우분투 서버 가이드 주제 LXC에 꽤 많이 나와있는 정확한 질문 다음과 같은 성명을 :

컨테이너의 프로그램은 더 이상 제한 될 수 없습니다. 예를 들어 MySQL은 컨테이너 프로파일 (호스트 보호)에서 실행되지만 컨테이너를 보호하기 위해 MySQL 프로파일로 들어갈 수는 없습니다.

원하지 않는 영향을받는 악용을 피하는 더 좋은 옵션은 컨테이너를 실행하는 사용자를 제한 하고 커널 의 기능 을 활용하는 사용자 공간 LXC 컨테이너를 사용하는 것 입니다. 그러나 docker현재 내 지식으로는 지원하지 않습니다 userns.

이 경우 호스트 관점에서 MySQL은 권한이없는 사용자로 실행되지만 컨테이너 내부에서는 다음과 같이 실행될 수 있습니다 root. 그런 다음 iptables필요한 경우 MySQL을 호스트의 외부 포트에 바인딩하는 데 사용할 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.