현재 안전한 샌드박스 환경에서 신뢰할 수 없는 프로그램(학생 과제)을 평가하는 프로젝트를 시작하고 있습니다. 주요 아이디어는 LXC 컨테이너를 관리하기 위해 lxc-utils 주변에 GlassFish 및 Java 래퍼용 웹 앱을 만드는 것입니다. 여기에는 대기 중인 프로그램의 대기열이 있으며 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를 사용하는 것은 좋은 생각입니다(제 생각에는 그런 상황에서는 "반드시 있어야" 합니다).
- 게스트가 호스트를 정지시키거나 다른 컨테이너에 영향을 주지 않도록 엄격한 cgroups 규칙을 설정하십시오.
- 저는 LVM 기반 컨테이너를 선호합니다. 항상 "보안" 계층이 하나 더 추가되는 것입니다.
- 네트워크 솔루션과 아키텍처에 대해 생각해 보세요. 해당 컨테이너는 서로 통신해야 합니까?
독서부터 시작하세요이것- 꽤 오래됐지만 그래도 - 거기에는 많은 지식이 있습니다. 그리고 또한 - 만나사용자 네임스페이스
그런 다음 다시 생각해 보십시오. 실제로 LXC 보안을 사용할 시간이 그렇게 많습니까? KVM은 훨씬 더 간단합니다...