¿Es posible crear un entorno para ejecutar de forma segura scripts arbitrarios de Python en Linux? Se supone que esos scripts deben recibirse de personas no confiables y pueden ser demasiado grandes para verificarlos manualmente.

Una solución de fuerza bruta es crear una máquina virtual y restaurar su estado inicial después de cada lanzamiento de un script no confiable. (Muy caro.)

Me pregunto si es posible restringir que Python acceda al sistema de archivos e interactúe con otros programas, etc.

2
Andrew T 20 may. 2009 a las 12:50

5 respuestas

La mejor respuesta

Considera usar una cárcel chroot. Esto no solo es muy seguro, está bien respaldado y probado, sino que también se aplica a las aplicaciones externas que ejecuta desde python.

4
SpliFF 20 may. 2009 a las 09:25

¿no podría simplemente ejecutarse como un usuario que no tiene acceso a nada más que a los scripts en ese directorio?

1
theheadofabroom 13 mar. 2011 a las 14:18

Hay 4 cosas que puedes probar:

  • Como ya mencionó, usar una máquina virtual o alguna otra forma de virtualización (¿quizás las zonas solaris son lo suficientemente livianas?). Si el script rompe el sistema operativo allí, entonces no te importa.
  • Usando chroot, que coloca una sesión de shell en un directorio raíz virtual, separado del directorio raíz del sistema operativo principal.
  • Usando systrace. Piense en esto como un firewall para llamadas al sistema.
  • Usando una "cárcel", que se basa en systrace, dando a cada cárcel su propia tabla de procesos, etc.

Systrace ha sido comprometida recientemente, así que ten en cuenta eso.

4
Edd Barrett 20 may. 2009 a las 09:48

Puede ejecutar jython y usar el mecanismo de sandboxing de la JVM. El sandboxing en la JVM es muy fuerte, muy bien entendido y más o menos bien documentado. Tomará algún tiempo definir exactamente lo que desea permitir y lo que no desea permitir, pero debería ser capaz de obtener una seguridad muy fuerte de eso ...

Por otro lado, jython no es 100% compatible con cPython ...

2
Guillaume 20 may. 2009 a las 09:44