Seguridad al escribir en una carpeta

2

Me gustaría ejecutar con programas Runtime.exec () en Java (el código de los programas está en C y en Java): los usuarios están cargando el código Java / C y mi aplicación los ejecuta. El código se guarda en una carpeta separada para cada usuario, así como los archivos de entrada y salida.

En caso de código C, el código de compilación es el siguiente:

compileCommand = pathToMinGW + "gcc " + pathToFile + fileName + ".c -o " + pathToFile + fileName

Y el comando para ejecutar:

executeCommand = pathToFile + fileName + ".exe"

Ejecutando el comando:

Runtime runtime = Runtime.getRuntime();
Process run = runtime.exec(executeCommand);

¿Cómo puedo otorgar permisos para la función exec () para permitir modificar los archivos de salida de la carpeta donde se encuentra el código cargado, pero nada más?

    
pregunta MMMM 05.07.2012 - 15:22
fuente

1 respuesta

0

Primero crea un usuario aislado (por ejemplo, sin grupos), y ejecuta otra instancia de java desde el administrador (por ejemplo, a través del servicio de Windows), si presiona los comandos en una cola y tiene una cola de error códigos, por ejemplo, en SQL DB.

Y en Linux, también puede ejecutar Java desde la raíz, y hacer una cola de comandos (con archivos en la carpeta y SQL, y enviar los comandos y recibir los resultados a través de otra cola).

Y la instancia de Java que ejecuta exe debe ejecutarse desde la raíz o el administrador, para poder ejecutar otro exe con un usuario diferente, por lo que no es necesario volver a cargar Java cada vez. En Windows, necesitaría compilar un binario haciendo esto usando Windows Process, para iniciar un comando externo a través de otro usuario. En Linux puedes usar los comandos "su" o "sudo" para hacerlo, así que puedes hacerlo:

[root@abcdef ~]# su - test -c "/usr/bin/id"
uid=503(test) gid=503(test) groups=503(test) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Por lo tanto, tu java requeriría acceso al SQL con la cola, así que esta sería la forma más fácil, supongo, lo he hecho de esta manera y hasta ahora no he sido hackeado.

ps. La cola debe ser serializada y con tiempo de espera para cada ejecución.

    
respondido por el Andrew Smith 05.07.2012 - 17:36
fuente

Lea otras preguntas en las etiquetas