Какой выбор у меня есть на платформах MS Windows для эквивалента SUID от Unix-платформ? - PullRequest
6 голосов
/ 16 марта 2009

Чтобы понять, что я спрашиваю, важно отличать одно из нескольких применений SUID в Unix.

У меня есть проект, который использует исполняемый файл в ПУТИ пользователя, который принадлежит проекту и в котором установлен бит SUID. Таким образом, когда он запускается, он запускается в контексте владельца файла, а не вызывающего пользователя. Таким образом, он имеет доступ к вещам, которых нет у пользователя, и, таким образом, эти вещи защищены от пользователя обычными средствами защиты файловой системы. Это работает достаточно хорошо. Планируется перевести проект на архитектуру клиент-сервер, но это займет некоторое время. В то же время, как я могу повторить этот тип поведения в системах Windows?

Обратите внимание, что исполняемые файлы проекта не вызывают библиотечный вызов SETUID, хотя, честно говоря, это было бы отличной возможностью добавить, на мой взгляд, с учетом того, что делает проект. Проекту не нужны системные привилегии root. Первая проблема безопасности заключается в том, что ему необходимо защищать свои собственные файлы от пользователя (которым является любой пользователь, кроме владельца файла), и было бы очень хорошо, если бы он имел возможность переключаться в «контекст пользователя» для доступа к файлу Система, как если бы это был вызывающий пользователь. (Таким образом, было бы легче определить, что нормально для проекта, а что нет.)

Проект написан на комбинации C и Java - программа на C с набором SUID вызывает код Java ...

Мне интересно знать все такие механизмы, и я особенно сосредоточен на тех, которые:

  1. Подходит для C и Java, а;
  2. Простота реализации для программистов не из Windows, и;
  3. Требовать минимального кодирования, уникального для Windows.

Если некоторые решения превосходят вас, поделитесь своими мыслями о том, что вам известно об этом.

ПРИМЕЧАНИЯ:

  1. LogonUser: требуется пароль в виде обычного текста. Как это может быть ответом?
  2. RunAs: Требуется ввести пароль на PROMPT! ... как с LogonUser только хуже; Я не понимаю, как это ответ.

Ответы [ 2 ]

4 голосов
/ 12 июля 2012

Cygwin проводит отличную дискуссию о том, как они делают это, не запрашивая пароль пользователя, здесь: Использование безопасности Windows в Cygwin

В основном они устанавливают специальный пакет проверки подлинности LSA, который предоставляет токены безопасности без пароля. В качестве запасного варианта, когда пакет аутентификации не установлен, они используют недокументированный API NtCreateToken.

Приложение, желающее олицетворять, может сделать вызов cygwin setuid перед вызовом java.

3 голосов
/ 16 марта 2009

Я не думаю, что в Windows есть эквивалент SETUID, но вы можете запустить процесс как другой пользователь. Если вы используете C, на самом деле вам нужно изучить только две основные функции Windows:

LogonUser

CreateProcessAsUser

Документы по этим функциям довольно хороши, так что это не должно быть такой большой проблемой. В основном вы будете использовать LogonUser для олицетворения пользователя, а затем CreateProcessAsUser для запуска JVM от имени этого пользователя.

Вы также можете посмотреть на команду RUNAS , но я не уверен, будет ли это соответствовать вашим потребностям или нет.

...