Sto programmando un server Java che deve gestire codice Python dato dall'utente utilizzando Jython. Ovviamente, non posso semplicemente eseguirlo senza il rischio che un cracker acceda a file e comandi di sistema che non dovrebbe. Sono stato alla ricerca di un modo per limitare le autorizzazioni dei file per thread specifici per ore, e il più vicino che ho ottenuto era limitare le autorizzazioni dei file per l'intera applicazione. C'è una classe implementata che fa qualcosa del genere, o un metodo per farlo?permessi dei file Java per le discussioni
risposta
Si potrebbe provare a utilizzare java.lang.SecurityManager. Vedere anche this question sull'utilizzo di un gestore sicurezza per impostare diverse impostazioni di sicurezza per thread.
È possibile impostare un gestore della sicurezza e la politica di sicurezza in questo modo:
jython -Djava.security.manager=securitymanager -Djava.security.policy=policyfile
dove SecurityManager è il responsabile della sicurezza da utilizzare e policyfile contiene specifica politica come descritto per esempio here. Se si utilizza un file di criteri come l'origine per la politica di sicurezza, ecco un esempio:
grant {
permission java.security.AllPermission;
}
Jython avrà bisogno di alcune autorizzazioni per avviare tra cui le seguenti:
grant {
permission java.io.FilePermission "${user.home}${/}-", "read, write";
permission java.lang.RuntimePermission "createClassLoader";
permission java.lang.RuntimePermission "getProtectionDomain";
};
(questo presuppone che il cachedir si trova nella directory HOME dell'utente corrente). Ciò comporterà qualcosa di simile a ciò che è necessario consentendo l'accesso in lettura e scrittura ai file nella HOME dell'utente corrente e l'accesso non autorizzato a tutte le altre parti del filesystem. Ecco il risultato (il primo open() fa riferimento a un file nella home directory dell'utente corrente in quanto questa è la directory corrente di lavoro):
>>> 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)
>>>
Grazie per aver postato questa politica; Non penso esista altrove. Ho postato alcune altre autorizzazioni necessarie in una risposta di seguito (giustamente un commento se i commenti consentivano la formattazione del codice). –
Con Jython 2.5.2 ho trovato queste autorizzazioni necessarie:
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";
(Questo dovrebbe essere un commento alla risposta accettato, tranne che un commento non sarà formato leggibile.)
- 1. I permessi dei file non ereditano i permessi delle directory
- 2. Come garantire i permessi dei file corretti
- 3. Verifica dei permessi dei file in Linux con Python
- 4. OS X Java discussioni massimi per processo
- 5. EKEventStore prompt dei permessi
- 6. Regex per i permessi dei file Linux (notazione numerica)
- 7. Modifica dei permessi su/vagabondo
- 8. django/file upload permessi
- 9. Attendere che le discussioni bambino completato: Java Descrizione
- 10. imposta i permessi dei file nel file setup.py
- 11. C# Uccidi tutte le discussioni
- 12. MSI Installer permessi file/cartella
- 13. Discussioni/Confronto dei processi su Linux/Windows
- 14. C++ - Come impostare i permessi dei file (multipiattaforma)
- 15. Come posso cambiare i permessi dei file in Ubuntu
- 16. aperti i permessi dei file() non correttamente l'impostazione
- 17. Thread all'interno delle discussioni in Java?
- 18. cmake: come modificare i permessi dei file durante l'installazione?
- 19. Impostazione dei permessi sui file sul contenuto del tarfile
- 20. permessi dei file mkfifo non essere eseguiti correttamente
- 21. permessi file capistrano-env
- 22. Come posso impostare i permessi dei file da Perl?
- 23. le discussioni che iniziano sotto Tomcat
- 24. discussioni Ispezione Java in Linux utilizzando top
- 25. È possibile eseguire Mercurial per preservare le autorizzazioni dei file?
- 26. che eseguono 3 discussioni in sequenza java
- 27. Stack stack di tutte le discussioni attive
- 28. Eliminazione dei permessi di root in Python
- 29. In che modo Subversion gestisce i permessi dei file e un file .htaccess?
- 30. Come rilevare i permessi dei file durante l'estrazione del file tar?
correlati (ma ancora aperta) domanda: http://stackoverflow.com/questions/6744553/java -security-manager-per-thread – Thilo
Inoltre (con Rhino anziché Jython): http: // stackoverfl ow.com/questions/93911/how-can-you-run-javascript-using-rhino-for-java-in-a-sandbox – Thilo
the inheritablethreadlocal è un'opzione interessante, ma devi stare attento, perché ha vinto ' t essere propagato a qualsiasi thread già generato (es codice inviato a un pool di thread). quindi, probabilmente è una specie di soluzione fragile. – jtahlborn