Wszystko,SecurityManager dla „sandbox” chmura usług
pracuję nad projektem usługi chmurowej, który zapewni możliwość wykonania jakiegoś „wtyczki” Kod przedłożony przez klientów. Aby to działało, konieczne jest, aby wtyczki nie zagrażały integralności systemu ani nie miały dostępu do danych innych klientów.
Idealnie chciałbym, aby klienci mogli przesłać prosty plik jar (zawierający klasę zgodną z pewnym wstępnie zdefiniowanym interfejsem), który następnie byłby uruchamiany w piaskownicy.
Kod klient powinien mieć możliwość:
- Weź tyle czasu procesora, ile potrzebuje na jednym wątku
- wykonać żadnych obliczeń, korzystając ze standardowych klas Javy (np java.lang.Math, Jawa. util.Random itp)
- wywołać dowolną biblioteki dołączane w słoiku (ale które muszą podlegać takim samym ograniczeniom)
ale chciałbym konkretnie trzeba zabronić następujące:
- tarła nowych wątków (tak, że zasób serwer może być dość udało!)
- Wszelkie dostępu do systemu plików/IO/network
- Wszelkie dostęp do kodu natywnego
- żadnego dostępu do danych w JVM innych niż przekazane/stworzony przez kod klienta
- Wszelkie dostęp do refleksji na klas innych niż te, w .jar piaskownicy
- Wszelkie zdolność do wywołania metody na obiektach poza piaskownicą, inne niż standardowych bibliotek Javy
Czy można to osiągnąć przy użyciu niestandardowej konfiguracji ClassLoader/SecurityManager? Czy muszę zacząć szukać bardziej wyrafinowanego rozwiązania (na przykład uruchamiania wielu maszyn JVM?)
@M postęp w raporcie? –