Todo,SecurityManager para un servicio en la nube "caja de arena"
estoy trabajando en el diseño de un servicio basado en la nube que proporcionará la opción de ejecutar algún código "plugin" presentado por los clientes. Para que esto funcione, es esencial que los complementos no amenacen la integridad del sistema ni tengan la capacidad de acceder a los datos de otros clientes.
Idealmente me gustaría que los clientes puedan enviar un archivo jar simple (que contenga una clase conforme a una interfaz predefinida) que luego se ejecutará dentro de un entorno limitado.
El código de cliente debe permitir que:
- Tómese todo el tiempo de CPU, ya que necesita en un solo hilo
- realiza ningún cálculo utilizando las clases de Java estándar (por ejemplo java.lang.Math, java. util.Random etc.)
- llamar a cualquier bibliotecas agrupados en el frasco (pero que deben estar sujetos a las mismas restricciones)
pero necesitaría específicamente para no permitir lo siguiente:
- desove nuevos temas (de modo que los recursos del servidor puede ser bastante logró!)
- Cualquier acceso al sistema de archivos/IO/red
- Cualquier acceso a código nativo
- Cualquier acceso a los datos en el JVM que no sea el que se pasó a/creó el código de cliente
- Cualquier acceso a la reflexión en clases que no sean las de .jar sandbox
- Cualquier posibilidad de invocar métodos en objetos fuera de la zona de pruebas, que no sean las bibliotecas estándar de Java
¿Se puede lograr esto con una configuración personalizada de ClassLoader/SecurityManager? ¿O tendré que empezar a buscar una solución más sofisticada (por ejemplo, lanzar varias JVM?)
@M ¿hay algún progreso para informar? –