web-dev-qa-db-ja.com

ローカルシステムとして実行しているときに、ユーザー名とパスワード(-u -p)を指定してPsExecを実行する方法はありますか?

Windows Server 2003でローカルシステムとして実行されているWindowsサービスがあり、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)は、ローカルシステムとしてコマンドラインを提供します。次に、2番目のPsExecコマンド(PsExec.exe -u DOMAIN\my-user -p mypass cmd)解決しようとしているエラーをスローします。

どんな助けでも大歓迎です!前もって感謝します!

3
Jesse

PSEXEC.EXEの最初のインスタンスをLocalSystemアカウントとして開始した後、次のように、ローカルコンピューターのIPアドレスをコマンドに含めて、2番目のPSEXECインスタンスを開始します。

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

説明

発生している動作は、Windows Server 2003のService Pack 1によって追加された ループバックチェック機能 と呼ばれる新しいセキュリティ機能によるものです。リンクされたMSKB記事によると:

[Service Pack 1をインストール]した後、次の汎用名前付け規則(UNC)パスで完全修飾ドメイン名(FQDN)またはCNAMEエイリアスを使用してローカルでサーバーにアクセスしようとすると、認証の問題が発生します。

    \\servername\sharename

このシナリオでは、次のいずれかの現象が発生します。

  • 繰り返しログオンウィンドウが表示されます。
  • 「アクセスが拒否されました」というエラーメッセージが表示されます。
  • 「指定されたネットワークパスを受け入れたネットワークプロバイダーはありません」というエラーメッセージが表示されます。
  • イベントID 537がセキュリティイベントログに記録されます。

この記事では、2つの解決策(上記の回避策に加えて)を提案しています。どちらの場合も、レジストリを編集して、1)NTLM認証要求で参照できるホスト名を追加するか、2)認証ループバックチェックを無効にします。サーバーをSP1以前の動作に戻します。

このWindowsITPro.comの記事によると PSEXECのしくみ

PsExecは、リモートシステムで実行可能ファイルを開始し、実行可能ファイルのプロセスの入出力ストリームを制御して、ローカルシステムから実行可能ファイルと対話できるようにします。 PsExecは、実行可能イメージからPsexesvcという名前の埋め込まれたWindowsサービスを抽出し、それをリモートシステムのAdmin $共有にコピーすることでそうします。

つまり、ローカルマシンに対してPSEXECを実行しているにもかかわらず、それでもADMIN$共有を使用しているため、上記のループバックチェック機能の動作が変更された理由です。