Dağıtılmış simülasyonlar uygulayan bir proje üzerinde çalışıyorum: rasgele kod birden çok düğüm üzerinde yürütülür ve sonuçları daha sonra toplanır ve toplanır.
Her düğüm bir Ubuntu Linux sanal makinesinin bir örneğidir ve yürütülecek kodu bir dizi çalışan işleme (her çekirdek için 1 adet) iletmekle ilgilenen bir ana işlem yürütür.
Bu soru, her çalışanın, her biri için sanal makine örneği kullanımına başvurmadan korumalı bir ortamda çalıştığından nasıl emin olacağınızla ilgilidir. İşçiler için kesin gereksinimler şunlardır:
- fs : yazma izni yok, tek bir dizin (ve alt klasörler) ile sınırlı salt okunur izin
- net : yalnızca yerel iletişime izin verilir (IPC, TCP, her neyse ...)
- mem : bellek kullanımı sınırı (takas belleği yok) mem sınırı aşıldığında öldür
- cpu : sadece 1 çekirdeğe izin verilir, zaman aşımı durumunda öldür
Başka bir sınırlama getirilmemelidir: çalışan dinamik kütüphaneleri (salt okunur klasörden) yükleyebilmeli, yeni iş parçacıkları veya süreçleri oluşturabilmeli, sistem işlevini çağırmalı, ecc ecc olmalıdır, ancak sınırlar doğmuş / yüklenmiş varlıklar tarafından devralınmalı ve toplam olarak uygulanmalıdır (örneğin, bir işçinin 800MB kullanan iki iş parçacığı üretemediğimizde, her biri bu tür bir işçinin bellek sınırı 1 GB'dir).
İşçinin haklarını yükseltmesinin bir yolu olmaması gerektiğini söylemeye gerek yok.
Gereksinimlerimi karşılayan en basit çözüm için mevcut alternatifleri (SELinux, AppArmor, cgroups, ulimit, Linux ad alanları, LXC, Docker, ...) gözden geçirmek için epey zaman harcadım, ancak alandaki deneyimim sınırlı.
Şu anki anlayış: LXC ve Docker, kullanım durumum için biraz ağır tarafta ve tamamen güvenli değil 1 . AppArmor, daha kolay yapılandırma nedeniyle SELinux'a tercih edilir, fs ve net kısıtlamalar için kullanın; ulimit'e tercih edilen cgroups (tek bir işlemde çalışır), mem ve cpu kısıtlamaları için kullandı.
Hedefime ulaşmanın en basit yolu bu mu? AppArmor veya gruplarını yalnızca kullanabilir miyim? Modelimde belirgin bir güvenlik açığı var mı? Kılavuz "işçinin kendisini başka bir şeyden aşağı indirmesine izin verilmelidir " olmalıdır .