2014-04-04 42 views
1

這個問題不像告訴我使用runas那麼簡單;請在回答之前閱讀問題。setuid()在Windows上相當於Java的

當我用C在UNIX/Linux,並希望寫一個程序,以提升的權限運行,我用這個流程:

  1. 程序啓動。
  2. 進程使用setuid()降低權限。
  3. 過程沒有無特權的工作。
  4. 進程使用 setuid()提高權限。
  5. 進程執行特權工作,例如打開 受限制的文件。
  6. 進程使用setuid()降低權限。

該流程的關鍵部分是該進程在啓動後立即降低其權限,並且僅提升其特權足夠長時間才能完成相應的工作。

如何在使用Java的Windows上做類似的事情?

我的具體用例是我想讀取和寫入受保護的文件,以便程序的用戶訪問文件的唯一方法是通過我的Java程序。我不想用管理員權限運行整個進程來保護一些文件。

+0

你不能在100%的Java。畢竟,你不能在Linux上使用Java來完成它。 – bmargulies

回答

1

JRE本身不允許這樣做。有兩種選擇做它的「Java」:

  1. 使用JNI來使C調用到OS
  2. 腳本出使用setuid()調用(使用腳本語言或創建一個C可執行文件),並有JVM exec腳本。

我相信你的問題中比較困難的部分將是在Windows中找到一個等效的setuid()。見https://serverfault.com/questions/16886/is-there-an-equivalent-of-su-for-windows。最直接的方法是將runas(是的,我說過)包含在腳本中,或者用runas來執行腳本。有關如何做到這一點的想法,請參閱Run command prompt as Administrator