2009-11-08 16 views
6

¿Hay un intérprete de Python seguro?Secure Python intepreter?

Imagine una máquina virtual de Python que puede ejecutar en su máquina, que restringe las operaciones. No se pueden abrir archivos, no hay llamadas al sistema, etc. Simplemente transforma stdin a stdout, tal vez con procesamiento de texto + matemática, etc.

¿Existe una máquina virtual de Python tan segura?

Respuesta

2

Puede ejecutar Jython en la JVM con un SecurityManager que le permite especificar las operaciones permitidas/no permitidas.

7

No conozco ningún ejemplo "intérprete seguro" que se distribuye abiertamente (obviamente, Google tiene una que se utiliza en App Engine, aunque con algo diferentes restricciones de las que usted desea, por ejemplo, ciertos archivos pueden ser abierto, en una forma de solo lectura). Sin embargo, hay algunos reclamos, p. Ej. here, aunque no puedo verificarlos. Pypy's Python in a Sandbox es probablemente el mejor que vale la pena probar, dada la alta calidad y reputación del equipo de desarrollo de pypy (es MUY improbable que hagan afirmaciones sin fundamento).

+0

Lo siento Alex, acabamos de tener una condición de carrera. Edité la pregunta para hacer que utilizara la terminología de Python (restringida) para lo que el OP estaba pidiendo (seguro). – ddaa

+0

@ddaa, no creo que OP quiera específicamente rexec, solo una máquina virtual de Python "segura y aislada" ("sandbox" es el término que se usa con más frecuencia en dichos contextos). –

1

Puede ejecutar IronPython dentro de un dominio de aplicación .NET que tiene privilegios restringidos.

Esto definitivamente funcionaría en Windows, y posiblemente/probablemente en Mono (no podría decirlo).

Debería escribir un pequeño programa que incorpore el intérprete de IronPython y le pase la secuencia de comandos.

El primer ejemplo en el capítulo sobre incrustación en el libro Iron Python in Action muestra que se escribe tal iniciador.

No recuerdo si cubre appdomains, pero esa información debe estar en la Web en alguna parte.

-1

He estado jugando con esto últimamente. Mis requisitos incluyen Python 3.x, que inmediatamente saca de la mesa soluciones como Jython e IronPython. De todos modos, dudaría en tomar esa ruta, ya que nunca he confiado en las máquinas virtuales de lenguaje en modo usuario.

En este caso, para mi propósito, la mejor solución hasta ahora es sacarlo por completo del intérprete y ejecutarlo en un contenedor fuertemente bloqueado (OpenVZ o similar). Sin embargo, esto está tomando un martillo en el problema (aunque no es el mazo de la virtualización completa), y puede no ser viable si tiene que ejecutar un número realmente grande de intérpretes aislados.

Sin embargo, una ventaja es que, como no depende de la seguridad de ningún intérprete en particular, puede usar cualquier lenguaje arbitrario que desee en el entorno; no tiene que vincularse con Python o el conjunto de idiomas/implementaciones disponibles para JVM o .NET/Mono.

1

Soy estudiante y en mi primer año, nos enseñaron a Python. Teníamos estas cosas llamadas "CodeLabs" que tenían que enviarse periódicamente. Funciona haciendo una pregunta y pidiendo al alumno que ingrese su respuesta en un cuadro de texto y ejecute el código en algunos casos de prueba y verificando sus valores de retorno

Un día, el sitio web de codelabs (turingscraft.com) se volvió inaccesible porque alguien decidió ejecutar un bucle while interminable y llamar a os.fork() dentro de él.

Esto fue obviamente un problema para los administradores de turingscraft.com.Sin embargo, más tarde encontraron una forma de restringir el acceso a dichos comandos para los estudiantes.

Si yo fuera usted, buscaría información sobre su sitio. Tal vez publicaron algo de información sobre esto y cómo solucionarlo

2

No necesita un Python modificado para restringir la ejecución en cierto sentido. Solo mira codepad.org, un pastebin donde puedes pegar código (en Python y otros lenguajes) y ejecutarlo y mostrar el resultado. El código se ejecuta en un entorno muy restringido, pero esa es solo la configuración del sistema operativo. (Example paste)

0

Siempre puedes ir al código fuente y crear tu propio estilo de Python. Si suficientes personas lo necesitan, no habrá tiempo antes de que esté funcionando.

+0

+1, en parte porque no hay una buena razón para haber votado negativamente, en parte porque eso es exactamente lo que hizo Google al construir Google App Engine. –

-1

¿La seguridad no es más un trabajo para el sistema operativo?

Es decir, crear un usuario con acceso restringido a archivos y tal. Luego, deje que vm se ejecute solo con estos derechos.

O tal vez estoy hablando tonterías. No soy un administrador de sistemas ni un experto en seguridad, pero tiendo a hacer cosas con las herramientas que están hechas para eso.

+0

* nix no están hechos para ser seguros contra el código que se ejecuta como el mismo usuario que usted, puede intentar hacer esto, pero será un infierno. Lo mejor que puede hacer es ejecutar una aplicación completa como otro usuario, pero luego no puede usar la misma pantalla X11 que usted. –

Cuestiones relacionadas