Назад | Перейти на главную страницу

Есть ли способ запустить PsExec, указав имя пользователя и пароль (-u -p) при работе в локальной системе?

У меня есть служба Windows, работающая как локальная система в Windows Server 2003, и я пытаюсь использовать PsExec для запуска команды от имени другого пользователя (используя -u -p параметры), но я продолжаю получать Access is denied. PsExec could not start ошибки.

Для воспроизведения проблемы можно выполнить следующее:

C:\Documents and Settings\me>PsExec.exe -s cmd

PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com


Microsoft Windows [Version 5.2.3790]
(C) Copyright 1985-2003 Microsoft Corp.

C:\WINNT\system32>whoami
nt authority\system

C:\WINNT\system32>PsExec.exe -u DOMAIN\my-user -p mypass cmd

PsExec v2.11 - Execute processes remotely
Copyright (C) 2001-2014 Mark Russinovich
Sysinternals - www.sysinternals.com

Access is denied.
PsExec could not start cmd:

В приведенном выше примере первая команда PsExec (PsExec.exe -s cmd) предоставит вам командную строку как локальную систему. Затем вторая команда PsExec (PsExec.exe -u DOMAIN\my-user -p mypass cmd) выдает ошибку, которую я пытаюсь решить.

Любая помощь будет принята с благодарностью! Заранее спасибо!

После запуска вашего первого экземпляра PSEXEC.EXE в качестве учетной записи LocalSystem включите IP-адрес локального компьютера в команду для запуска второго экземпляра PSEXEC, например:

PSEXEC.EXE \\LocalComputerIPAddress -u DOMAIN\my-user -p mypass CMD


Объяснение

Такое поведение вызвано новой функцией безопасности, добавленной пакетом обновления 1 для Windows Server 2003, которая называется Функциональность кольцевой проверки. Согласно связанной статье MSKB:

После [установки пакета обновления 1] возникают проблемы с аутентификацией при попытке получить доступ к серверу локально, используя его полное доменное имя (FQDN) или его псевдоним CNAME в следующем пути универсального соглашения об именах (UNC):

    \\servername\sharename

В этом случае вы испытываете один из следующих симптомов:

  • Вы получаете повторяющиеся окна входа в систему.
  • Вы получаете сообщение об ошибке «Доступ запрещен».
  • Вы получаете сообщение об ошибке «Ни один сетевой провайдер не принял данный сетевой путь».
  • Событие с кодом 537 регистрируется в журнале событий безопасности.

В статье предлагаются два решения (в дополнение к обходному пути, который я предоставил выше), оба из которых включают редактирование реестра: 1) добавить имена хостов, на которые можно ссылаться в запросе проверки подлинности NTLM, или 2) эффективно отключить проверку обратной связи проверки подлинности. возвращение сервера к поведению до SP1.

Согласно этой статье WindowsITPro.com на как работает PSEXEC:

PsExec запускает исполняемый файл в удаленной системе и управляет потоками ввода и вывода процесса исполняемого файла, чтобы вы могли взаимодействовать с исполняемым файлом из локальной системы. PsExec делает это, извлекая из своего исполняемого образа встроенную службу Windows с именем Psexesvc и копируя ее в общий ресурс Admin $ удаленной системы.

Таким образом, даже если вы запускаете PSEXEC на своем локальном компьютере, он использует ADMIN$ тем не менее поделиться, поэтому вы столкнулись с описанным выше изменением поведения Loopback Check Functionality.