Setuid() в Java на Windows

Этот вопрос не так прост, как сказать мне использовать runas; Пожалуйста, прочитайте вопрос перед ответом.

Когда я использую C в UNIX/Linux и хочу написать программу для запуска с повышенными привилегиями, я использую этот поток:

  1. запускается программа.
  2. процесс снижает привилегии с помощью setuid().
  3. процесс делает непривилегированную работу.
  4. процесс повышает привилегию с помощью setuid().
  5. процесс выполняет привилегированную работу, например, открытие ограниченного файла.
  6. процесс снижает привилегии с помощью setuid().

Критическая часть потока заключается в том, что процесс сразу снижает его привилегию после запуска и лишь увеличивает свою привилегию достаточно долго, чтобы выполнить соответствующую работу.

Как я могу сделать подобное в Windows с помощью Java?

Моим конкретным вариантом использования является то, что я хочу читать и записывать защищенные файлы, так что единственный способ для пользователя программы получить доступ к файлам - через мою программу Java. Я не хочу запускать весь процесс с правами администратора только для защиты нескольких файлов.

1 ответ

JRE сама по себе этого не позволяет. В "Java" есть два варианта:

  1. Использовать JNI для вызова C в ОС
  2. setuid() скрипты вызовов, которые используют setuid() (используйте язык сценария или создайте исполняемый файл C) и попросите JVM выполнить этот сценарий.

Я считаю, что более сложной частью вашей проблемы будет поиск эквивалента setuid() в Windows. См. Https://serverfault.com/questions/16886/is-there-an-equivalent-of-su-for-windows. Самый простой способ - обернуть runas (да, я сказал это) в скрипт или, возможно, выполнить скрипт с runas. Инструкции о том, как это сделать, см. В командной строке "Запуск" в качестве администратора.

licensed under cc by-sa 3.0 with attribution.