我有一个 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
) 抛出我试图解决的错误。
任何帮助将不胜感激!先感谢您!
以 LocalSystem 帐户启动您的第一个实例后
PSEXEC.EXE
,在命令中包含本地计算机的 IP 地址以启动您的第二个 PSEXEC 实例,如下所示:解释
您遇到的行为是由于 Windows Server 2003 的 Service Pack 1 添加的称为Loopback Check Functionality的新安全功能。根据链接的 MSKB 文章:
这篇文章提出了两种解决方案(除了我上面提供的解决方法),它们都涉及将注册表编辑为:1)添加可以在 NTLM 身份验证请求中引用的主机名,或者 2)有效地禁用身份验证环回检查将服务器返回到 SP1 之前的行为。
根据这篇关于PSEXEC 工作原理的 WindowsITPro.com 文章:
因此,即使您在本地计算机上运行 PSEXEC,它
ADMIN$
仍然使用共享,因此您遇到上述环回检查功能行为更改的原因。