Исполняемый файл, запущенный службой Windows с использованием локальной системной учетной записи, не может получить доступ к сетевым ресурсам - PullRequest
7 голосов
/ 30 октября 2008

У меня есть исполняемый файл, который запускается службой Windows, эта программа будет запускаться на компьютере клиента, и для выполнения определенной задачи потребуется подключение к удаленному общему ресурсу. Эта доля указывается клиентом через пользовательский интерфейс, поэтому мы не знаем этого заранее, что означает, что она не может быть «жестко запрограммирована», или доля заранее назначена.

Ранее мы требовали, чтобы клиент входил в систему на своем компьютере и запускал исполняемый файл при входе в систему, но мы всегда хотели, чтобы наша программа работала внутри службы и не требовала входа в систему, в первую очередь, чтобы упростить ее. для клиента и предотвратить случайные выходы из системы, закрытие нашего программного обеспечения. Таким образом, это также означает, что мы не знаем, какие локальные учетные записи пользователей существуют на компьютере клиента, поэтому нам нужно запустить службу с использованием локальной системной учетной записи.

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

Однако, когда программное обеспечение пытается подключиться к общему ресурсу Windows (имя UNC), оно не может подключиться. Принимая во внимание, что если исполняемый файл был запущен вручную, он подключается нормально.

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

Редактировать: Я забыл упомянуть, что это приложение могло (и чаще всего будет) работать на Win2K, а не на XP, и я думаю, что я прав, говоря, что учетная запись локальной сети недоступна до XP?

Ответы [ 3 ]

6 голосов
/ 30 октября 2008

Если вы можете изменить службу Windows так, чтобы она работала под учетной записью сетевой службы, тогда ваш исполняемый файл сможет получить доступ к сетевым ресурсам (это одна из причин, по которой была создана учетная запись сетевой службы).

Учетные записи локальной системы и локальной службы не имеют сетевых учетных данных и поэтому не могут проходить проверку подлинности в сети. Это по замыслу.

Редактировать: IIRC, учетная запись сетевой службы была введена в Server 2003 и добавлена ​​в один из пакетов обновления XP.

Если вы не можете полагаться на доступность учетной записи сетевой службы, то вы можете рассмотреть вопрос о создании выделенной учетной записи домена, где-то хранить учетные данные учетной записи, читать их изнутри вашей службы, затем войти в систему и выдать себя за этого пользователя до доступа к сети. доля. В качестве альтернативы, служба Windows может работать как выделенная учетная запись напрямую, в этом случае ей потребуется привилегия «вход в систему как служба».

5 голосов
/ 30 октября 2008

Если у вас есть служба, работающая с NT AUTHORITY \ LOCALSYSTEM (которая является именем учетной записи службы), она отображается как учетная запись DOMAINNAME \ COMPUTERNAME $ (обратите внимание на знак $) для остальной части сети. То есть он отображается как учетная запись КОМПЬЮТЕРА в Active Directory. Просто предоставьте свой файл и поделитесь разрешениями для DOMAINNAME \ COMPUTERNAME $, и все будет хорошо.

0 голосов
/ 30 октября 2008

Почему вы не можете использовать другой аккаунт? В Windows есть учетная запись сетевой службы, специально предназначенная для служб, которым требуется доступ к сети.

В любом случае, будьте очень внимательны, когда служба запускает exe.

Если доступ для записи в папку с exe-файлом не отключен, пользователь может заменить этот exe-файл на (например) cmd.exe. В следующий раз, когда служба попытается запустить ваш exe, voilà: Командная оболочка с системными правами!

...