Estoy trabajando en un proyecto que compila, ejecuta y prueba automáticamente la salida de los programas enviados en C, C ++, Java y Python. Obviamente, esto debe suceder dentro de algún tipo de entorno seguro ya que se puede enviar cualquier tipo de código. Después de intentar crear el contenedor yo mismo con una cárcel chroot, que terminó no siendo práctica, recurrí a los contenedores.
Ahora, digamos que tengo un programa en C que toma un int i
argumento y lo devuelve i+1
. Quiero escribir un script que copie el programa C (digamos plusone.out
), junto con una lista de entradas de prueba ( input.txt
) en un contenedor LxC, ejecuta el programa dentro del contenedor, escribe las salidas en un archivo ( output.txt
) y exporta ese archivo volver al sistema host para que la aplicación principal (que se ejecuta fuera del contenedor) pueda verificar los resultados. También debe haber algunas restricciones en los recursos, pero puedo hacerlo con la cgroups
implementación incorporada de LxC .
Sé cómo hacer la mayoría de las cosas descritas anteriormente, pero por mi vida no puedo descubrir cómo copiar archivos desde el host al contenedor o al revés. Cada tutorial que veo demuestra el comportamiento al ejecutar ls
o echo
dentro del contenedor, pero nunca importa un script o programa desde el sistema host. ¿Alguien puede ayudarme, o posiblemente referirme a la documentación que me puede decir cómo lograr esto?
Respuestas:
¿Se está ejecutando en un servidor web? Si es así, asegúrese de que el host y los contenedores estén realmente bloqueados. Si está en un sitio web público, asegúrate doblemente (parece que sabes hacer esto, pero pensé en mencionarlo)
Copie el binario directamente al sistema de archivos del contenedor
Suponiendo que su programa 'ejecutor' de host tenga privilegios de root, intente lo siguiente:
Rootfs es el sistema de archivos sin formato para el contenedor. Luego ejecutarías tu script haciendo algo como:
Si no se ejecuta como root, intente utilizar contenedores sin privilegios (esto podría ser mejor desde el punto de vista de la seguridad) . Luego puede copiar el archivo directamente al contenedor sin necesidad de root. Stephane Graber (uno de los desarrolladores de lxc para ubuntu) tiene una gran introducción en su blog: Introducción a los contenedores LXC sin privilegios
fuente