У меня есть служба 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.