我正在運行一個值得信賴的(我的世界)J2SE應用程序,但可能包含完全不受信任的(甚至可能是一些敵對的)插件。我可以使用Java策略文件安全地運行帶有sudo的不受信任的應用程序
我想創建一個可以訪問Raspberry PI上的GPIO引腳的插件。
我見過的每個解決方案都要求爲sudo-superpowers提供這樣的應用程序,因爲可以通過直接內存訪問來訪問gpio。
看起來正確的解決方案是提供一個命令行選項是這樣的:
-Djava.security.policy=java.policy
這似乎是你默認是沒有權限(甚至訪問文件和高端口),然後添加那些您的應用需要重新加入策略文件。
實際上,你似乎給了Java「sudo」權力,然後信任java的安全模型,只給予各種類適當的權力。我猜這使得應用程序安全地與sudo一起運行 - 這是正確的嗎?
有趣的是,自從1.0以來我每天都在使用Java,而且從未需要這些......每天都會學到新的東西。
這將是我的第一個想法,但由於我在Raspberry pi上運行,並且內存是稀缺資源,所以我試圖避免旋轉多個JVM。如果安全模型的東西不起作用,我可能會嘗試一個C程序來完成你所說的,但我更喜歡Java。您是否對Java安全模型有任何特定的問題體驗?仍然不錯的建議,我會投它:) –
我的假設是守護進程將用C編寫,所以它的開銷應該比較低。無論如何,你是否必須去C進行硬件訪問?我沒有任何可以引用的負面經歷,但我認爲如果存在操作系統級別的安全機制,應該使用它並在應用程序級別模仿它是一種劣質解決方案。與此有關的人士非正式地告訴我,突破JVM約束是「容易的」,但我無權談論這一點。 – 5gon12eder
硬件訪問似乎是通過/ dev/mem在java庫中實現的。當然,它也在C庫中實現 - 甚至可能作爲某種類型的服務,但如果這種內存保護功能真正起作用,我寧願留在Java中 - 少移動的部分,更簡單的構建,並且我學習了一些東西新:) –