저는 현재 안전한 샌드박스 환경에서 신뢰할 수 없는 프로그램(학생 작업)을 평가하는 프로젝트를 시작하고 있습니다. 주요 아이디어는 GlassFish용 웹 애플리케이션과 lxc-utils 주변의 Java 래퍼를 만들어 LXC 컨테이너를 관리하는 것입니다. 여기에는 대기 중인 프로그램의 대기열이 있으며 Java 래퍼는 고정된 수(풀)의 LXC 컨테이너를 유지하여 각 프로그램에 하나의(사용되지 않은) 컨테이너를 할당합니다.
호스트 시스템을 보호하려면 SELinux를 사용하여 각 컨테이너를 보호해야 합니다.
내 질문은: 샌드박스 환경을 위한 메커니즘을 만드는 것이 좋은 생각입니까, 아니면 이 문제에 대한 더 나은 해결책이 있습니까? 학생들의 창의력에 영향을 주지 않으면서 가볍고 안전해야 합니다.
답변1
가장 안전한 가상화 솔루션이 아니기 때문에 LXC를 선택한 이유를 밝히지 않았습니다. 저는 KVM/XEN 및 LXC를 많이 사용하고 있으며 한 가지 말할 수 있는 것은 보안과 관련하여 Linux 컨테이너(LXC/OpenVZ/VServer에 관계없이)를 절대 사용하지 않는다는 것입니다. KVM/XEN을 사용하는 것이 더 쉽고 안정적입니다.
성능이나 하드웨어 요구 사항에 관한 것이라면 그렇습니다. LXC를 사용해 볼 수 있지만 몇 가지 규칙을 따라야 합니다.
- libvirt는 SELinux를 사용할 때 컨테이너가 엄격하게 제한되도록 보장합니다(LXC_driver 덕분에). 이것이 단지 RHEL/Centos/Fedora 사례인지는 확실하지 않습니다(저는 Ubuntu/Debian을 그렇게 많이 사용하지 않습니다).https://www.redhat.com/archives/libvir-list/2012-January/msg01006.html- 따라서 SELinux를 사용하는 것이 좋은 생각입니다. (제 생각에는 이 경우 "필수"라고 생각합니다)
- 게스트가 호스트를 정지시키거나 다른 컨테이너에 영향을 주지 않도록 엄격한 cgroup 규칙을 설정하세요.
- 나는 LVM 기반 컨테이너를 사용하고 싶습니다. 항상 "보안"의 추가 계층입니다.
- 네트워크 솔루션과 아키텍처를 고려하십시오. 이러한 컨테이너는 서로 통신해야 합니까?
독서부터 시작하세요이것- 고대이지만 여전히 - 거기에는 많은 지식이 있습니다. 그리고-만나다사용자 네임스페이스
결국, 다시 생각해 보십시오. LXC를 안전하게 플레이할 수 있는 시간이 실제로 그렇게 많습니까? KVM은 훨씬 간단합니다...