Jython kullanan kullanıcı tarafından verilen Python kodunu işlemek zorunda olan bir Java sunucusu programlıyorum. Açıkçası, bir korsanın dosyalara ve sistem komutlarına erişmesi gerekmediği için bir risk olmadan bunu gerçekleştiremem. Belirli iş parçacıkları için saatlerce dosya izinlerini kısıtlamak için bir yol aradım ve en yakınım tüm uygulama için dosya izinlerini kısıtlıyordu. Böyle bir şey yapan bir sınıf var mı, yoksa bunu yapmak için bir yöntem var mı?İş parçacıkları için Java dosya izinleri
cevap
java.lang.SecurityManager kullanmayı deneyebilirsiniz. Ayrıca, iş parçacığı başına farklı güvenlik ayarları belirlemek için bir güvenlik yöneticisi kullanmakla ilgili olarak this question konusuna bakın.
Böyle bir güvenlik yöneticisi ve güvenlik politikasını ayarlayabilirsiniz:
SecurityManager güvenlik kullanmaya yöneticisi ve örnek here için açıklandığı şekilde politika belirlemeyi ihtiva eden Policyfile olanjython -Djava.security.manager=securitymanager -Djava.security.policy=policyfile
. Eğer güvenlik politikası için kaynak olarak bir ilke dosyası kullanırsanız, burada bir örnek:
grant {
permission java.security.AllPermission;
}
Jython dahil başlatmak için bazı izinler gerekir aşağıdadır:
grant {
permission java.io.FilePermission "${user.home}${/}-", "read, write";
permission java.lang.RuntimePermission "createClassLoader";
permission java.lang.RuntimePermission "getProtectionDomain";
};
(bu cacheDir varsayar geçerli kullanıcının HOME dizininin altındadır). Bu, mevcut kullanıcının HOME'u altındaki dosyalara okuma ve yazma erişimine ve dosya sisteminin tüm diğer bölümlerine erişimi engellemeye izin vermeniz gerekenlere yakın bir şey yapacaktır. Jython 2.5.2 ile
>>> 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)
>>>
Bu politikayı gönderdiğiniz için teşekkür ederiz; Başka bir yerde var olduğunu sanmıyorum. Aşağıda bir cevapta diğer gerekli izinleri yayınladım (yorumların kod biçimlendirmesine izin veriliyse haklı olarak bir yorum). –
buldum gerekli bu izinlerin:
(bu geçerli çalışma dizini olması nedeniyle ilk açık() geçerli kullanıcının ANA dizin altında bir dosyayı ifade eder) İşte sonuçturpermission 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";
(a comment okunaklı biçimlendirmek olmayacak dışında bu, kabul cevaba bir açıklama olmalıdır.)
- 1. Java: Çok iş parçacıklı ve 2 boyutlu iş parçacıkları
- 2. Java 1.4.2'deki dosya izinleri nasıl değiştirilir?
- 3. Her zaman uyumsuzluklar için iş parçacığı iş parçacıkları kullanın async
- 4. C++ basit iş parçacıkları örnek
- 5. İş paylaşımı mekanizması (OpenMP'de) iş parçacıkları yürütülürken iş parçacıkları arasındaki işlemleri iletiyor mu?
- 6. denetleniyor Dosya sahibi izinleri
- 7. Senkronizasyon dosya izinleri * yalnızca *
- 8. Hakkında Dosya izinleri
- 9. Android'de USB aygıtı için Linux dosya izinleri
- 10. silverstripe - varlık klasörü için dosya izinleri
- 11. Win32 API ile iş parçacıkları nasıl oluşturulur?
- 12. Python'da yerleşik çapraz iş parçacıkları var mı?
- 13. Log4net günlüğü, paralel iş parçacıkları ile çalışmaz
- 14. Diğer iş parçacıkları tamamlanıncaya kadar ana iş parçacığı nasıl engellenir?
- 15. Parçacıkları?
- 16. Dosya izinleri dizin izinlerini devralmaz.
- 17. mkfifo dosya izinleri doğru yürütülmez
- 18. Android NDK içinde iş parçacıkları arasında bir JavaVM * paylaşma
- 19. Onedrive İş için - Dosya paylaşımı
- 20. Paylaşılan birim/dosya izinleri/sahiplik (Docker)
- 21. Kullanıcı düzeyinde iş parçacıkları (ULT) ve çekirdek düzeyi iş parçacıkları (KLT) eşzamanlı yürütme açısından nasıl farklılıklar gösterir?
- 22. java: Eğer kilitleme işleminden önce daima() her zaman çağrılırsa, bekleyen iş parçacıkları aynı kilidi nasıl alabilir?
- 23. FileUtils.copyDirectory kullanırken dosya izinleri nasıl korunur?
- 24. rsync dağıtımı ve dosya/dizin izinleri
- 25. İş parçacıkları, statik başlatma sırasında güvenli bir şekilde oluşturulabilir mi?
- 26. iç içe döngüler, iç döngü paralelleştirme, tekrar iş parçacıkları
- 27. Linux'ta dosya erişim izinleri nasıl değiştirilir?
- 28. Kilitli FIFO üzerinde bekleyen iş parçacıkları var mı?
- 29. Pthread muteksleri, paylaşılan bellekte iş parçacıkları boyunca çalışır mı?
- 30. XCode 4.2: uygulama kilitlendiğinde, iş parçacıkları nadiren aramaları görüntüler.
İlgili (ama yine de açık) sorusu: http://stackoverflow.com/questions/6744553/java -security-manager-thread başına – Thilo
Ayrıca (Jython yerine Rhino ile): http: // stackoverfl ow.com/questions/93911/how-can-you-run-javascript-using-rhino-for-java-in-a-sandbox – Thilo
inheritablethreadlocal ilginç bir seçenektir, ancak dikkatli olmalısınız, çünkü 'kazandı önceden oluşturulmuş ipliklere (örn. Bir iş parçacığı havuzuna gönderilen kod). Yani, muhtemelen kırılgan bir çözümdür. – jtahlborn