una txt texto linea leer guardar especifica espaƱol ejercicios editar datos binarios archivos archivo python multithreading permissions jython

txt - leer una linea especifica de un archivo en python



Permisos de archivos Java para hilos (2)

Estoy programando un servidor Java que tiene que manejar el código Python dado por el usuario usando Jython. Obviamente, no puedo simplemente ejecutarlo sin el riesgo de que un cracker acceda a los archivos y comandos del sistema que él / ella no debería. He estado buscando alguna forma de restringir los permisos de archivos para hilos específicos durante horas, y lo más cerca que he estado ha sido restringir los permisos de archivo para toda la aplicación. ¿Hay una clase implementada que haga algo así o algún método para hacerlo?


Con jython 2.5.2 encontré estos permisos necesarios:

permission java.io.FilePermission "${user.dir}${/}path${/}to${/}python${/}-", "read"; permission java.util.PropertyPermission "user.dir", "read"; permission java.lang.RuntimePermission "accessDeclaredMembers"; permission java.lang.RuntimePermission "createClassLoader"; permission java.lang.RuntimePermission "getProtectionDomain";

(Esto debería ser un comentario de la respuesta aceptada, excepto que un comentario no formateará de forma legible).


Podría intentar usar java.lang.SecurityManager . Consulte también esta pregunta sobre el uso de un administrador de seguridad para establecer diferentes configuraciones de seguridad por subproceso.

Puede establecer un administrador de seguridad y una política de seguridad como esta:

jython -Djava.security.manager=securitymanager -Djava.security.policy=policyfile

donde securitymanager es el administrador de seguridad para usar y policyfile contiene la especificación de la política como se describe, por ejemplo, aquí . Si usa un archivo de política como fuente para la política de seguridad, aquí hay un ejemplo:

grant { permission java.security.AllPermission; }

Jython necesitará algunos permisos para iniciarse, incluidos los siguientes:

grant { permission java.io.FilePermission "${user.home}${/}-", "read, write"; permission java.lang.RuntimePermission "createClassLoader"; permission java.lang.RuntimePermission "getProtectionDomain"; };

(esto supone que su cachedir está bajo el directorio HOME del usuario actual). Esto hará algo parecido a lo que necesita para permitir el acceso de lectura y escritura a los archivos en el INICIO del usuario actual y no permitir el acceso a todas las demás partes del sistema de archivos. Aquí está el resultado (el primer open () se refiere a un archivo bajo el directorio HOME del usuario actual, ya que este es el directorio de trabajo actual):

>>> f1=open(''test.txt'', ''r'') >>> f2=open(''/tmp/test.txt'', ''r'') Traceback (innermost last): File "<console>", line 1, in ? java.security.AccessControlException: access denied (java.io.FilePermission /tmp/test.txt read) at java.security.AccessControlContext.checkPermission(AccessControlContext.java:342) at java.security.AccessController.checkPermission(AccessController.java:553) at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) at java.lang.SecurityManager.checkRead(SecurityManager.java:888) at java.io.File.exists(File.java:748) at org.python.core.PyFile._setup(Unknown Source) at org.python.core.PyFile.file_init(Unknown Source) at org.python.core.PyFile$1.new_impl(Unknown Source) at org.python.core.PyType.invoke_new_(Unknown Source) at org.python.core.PyType.type___call__(Unknown Source) at org.python.core.PyType.__call__(Unknown Source) at org.python.core.PyObject.__call__(Unknown Source) at org.python.pycode._pyx2.f$0(<console>:1) at org.python.pycode._pyx2.call_function(<console>) at org.python.core.PyTableCode.call(Unknown Source) at org.python.core.PyCode.call(Unknown Source) at org.python.core.Py.runCode(Unknown Source) at org.python.core.Py.exec(Unknown Source) at org.python.util.PythonInterpreter.exec(Unknown Source) at org.python.util.InteractiveInterpreter.runcode(Unknown Source) at org.python.util.InteractiveInterpreter.runsource(Unknown Source) at org.python.util.InteractiveInterpreter.runsource(Unknown Source) at org.python.util.InteractiveConsole.push(Unknown Source) at org.python.util.InteractiveConsole.interact(Unknown Source) at org.python.util.jython.main(Unknown Source) java.security.AccessControlException: java.security.AccessControlException: access denied (java.io.FilePermission /tmp/test.txt read) >>>