2014-04-04 49 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