2010-02-02 68 views
2

我有一個使用Bluecove庫的Java項目,該庫需要root權限才能執行我在項目中需要的某些操作。我應該在這裏注意到,儘管項目是基於Java的,但僅適用於Linux。保持我的Java程序安全

該項目將有許多功能,不需要root權限,其中一些將不得不與root權限功能進行交互,一些不會。

此外,項目將使用用戶輸入的數據以root權限執行程序,例如hciconfig

所有這些根本活動導致我擔心我的系統的安全性。目標機器是用戶自己的計算機,並且無意在某些公共終端上運行該系統,但安全性仍然很重要,因爲未知的外部藍牙設備將能夠與該系統進行交互。

到目前爲止,我的安全措施涉及大量過濾用戶輸入,並非常注意外部藍牙設備將導致系統執行的所有操作,但我越來越不滿意這一點。

人們會推薦什麼?一個想法是將系統分成兩個或三個模塊,其中一個包含GUI和非根後端,一個包含Bluecove根後端,可能還有一個用於hciconfig和其他工具的根包裝。

我注意到一些程序,例如Apache,一旦運行「下拉」他們的權限。這是如何實現的,這是否有效?

回答

3

apache是​​否會執行setuid系統調用(在libc中),如您所述,它有效地降低了進程的權限。您可以通過JNI或JNA進行libc調用。

即使對於Java程序,它也可以很好地工作,除非一旦您從根目錄遷移到非根目錄,您將無法執行任何需要提升特權的操作。因此,只有在所有特權操作都可以事先完成的情況下才能使用該技術,就像Apache一樣。

另一種可能性是將程序分成兩個進程 - 啓動時,程序會分叉另一個以root身份運行的程序,然後將原始程序降級到非根目錄。兩個進程可以通過它們的stdin/stdout進行通信。

+0

太好了,謝謝你的澄清! – 2010-02-03 10:50:19