2016-07-12 13 views
1

マシンキーに基づいて設定ファイルを暗号化するコマンドラインプログラム(c#)があります。 PowerShellスクリプトはビルドをターゲットサーバにコピーし、それに応じてコンフィグを変更し、Windowsサービスをインストールします。 すべてのWindowsサービスはローカルシステムアカウント(標準ユーザー、非管理者)として実行されます - このアカウントを "locuser"と呼ぶことにしましょう。Powershell remoting - 別のユーザーとしてexeを実行できません

ターゲットサーバは、2012年のWindows Serverです。上記のすべては、ビルドサーバーからこのターゲットサーバーへのPSリモーティングによって実現されます。

ここで、暗号化コマンドラインプログラムを「locuser」として実行する必要があります。そのため、プログラムはアカウント固有のキーを使用して暗号化を行うことができます。 -Credentialsパラメーターを使用してStart-Processコマンドレットを呼び出すと、これを簡単に実現できます。さて、ここでキャッチは、上記の作業はうまくいけば、私はターゲットサーバにリモート(RDP)してから、Powershell ConsoleからStart-Process .... -Credential $credを実行する。

しかし、配備中にTargetServerにリモートイン(スクリプトを使用して)している間、これが動作する必要があります。私がTargetServerにリモートインするとき、私は管理者権限を持つ資格情報を使用します。

私は、「フルコントロール」および「起動(実行)」Set-PSSessionConfiguration -Name Microsoft.PowerShell -ShowSecurityDescriptorUIコマンドを使用してアクセス許可の両方の「locuser」を許可している以下の

  1. を試してみました。私はこのコマンドを実行しましたMicrosoft.PowershellMicrosoft.Powershell32 - まだアクセスが拒否される
  2. "ローカルセキュリティポリシー" - > "ローカルポリシー" - > "ユーザー権利の割り当て" - >認証後にクライアントを偽装 - そして、Adminアカウント(私がログインしていること)と「locuser」アカウントの両方を追加しました - それでもアクセスが拒否されました取得
  3. 私も付与されてきたlocuserの管理者権限 - それでも私はかなり確信しているアクセスが

を拒否された取得私が逃しているもののPS Remoting Sideにはいくつかの設定がありますが、Powershellが私をスローするので、何も分かりません。Access Deniedエラーです(スクリーンショット参照)。さらなるトラブルシューティングに役立つ情報

また、トレースはチェックされていますが使用できません。

PS Remoting Error

答えて

0

あなたは恐ろしいダブルホップの餌食に落ちたんです。基本的には、コンピュータAからコンピュータBへの認証をしてから、コンピュータBからコンピュータCへの認証を再度試みています(この場合もBとなります)。

可能であれば、セッションを終了してlocuser資格情報で新しいセッションを開始し、Start-Processを呼び出す方がよい場合があります。もう一つ、もっと面倒なアプローチはschtasksを使うことです。

私はどのように同じセッションでそれを行うにはあなたを伝えることができますが、それは少し厄介と非常に複雑だし、唯一の最後でなければなりません:元のサーバー上で

(サーバの構築):

  1. Enable-WSManCredSSP -Role Client -Delegate [name]コマンドを実行します。[name]は、ターゲットサーバーを含むIPまたはDNSアドレス/範囲です(例: "192.168.1。* ")
  2. オープンgpedit.mscをは、ターゲットサーバ上[name]

Computer Configuration\Administrative Templates\System\Credentials Delegationに移動して、ルールAllow delegating fresh credentialsAllow delegating fresh credentials with NTLM...が有効になっていることを確認し、次のとおりです。

  1. コマンドを実行しEnable-WSManCredSSP -Role Server

コマンドの実行:

Invoke-Command [targetserver] [-Credential $cred] -Scriptblock { 
    ## do stuff 

    Invoke-Command . -Credential $locusercred -Authentication Credssp -ScriptBlock { 
     Start-Process -FilePath $sC#etc 
    } 
} 

いくつかのものは、注意すべき:

は、まず私はそこから遠く離れ、その後、ローカルセッションを作成するには、この設定を使用(そうAAB代わりにABBの)ので、グループポリシーのものは間違った場所にあるかもしれないが、それが正しいと確信しています。

第2に、資格情報がセッション(この場合は$locusercred)で働く苦労であることがわかりました。私はそれをネイティブに行っていましたが、奇妙なことに、それは突然securestringを解読できませんでした。私はレジストリに定義された鍵で安全な文字列を保存することになってしまったので、いつでもどのアカウントからでも解読できるので、そこであなた自身の解決策を考え出す必要があるかもしれません。

無料の電子書籍"The Secrets of PowerShell Remoting"で説明されていますが、ダブルホップのアプローチをとる場合は、読んでみることをおすすめします。

+0

実際、私はこれがなぜ問題なのか説明していないことに気付きました。これは、別のコンピュータに資格情報を送信してからそこから3台目のコンピュータに資格情報を送信し、Windowsが偽装またはリダイレクトされていないことを完全には信用していないためです。基本的にセキュリティ上の予防措置です。信頼できるものには例外を追加し、自分が何をしているのかを確認できるようにする必要があります。 –

+0

私は上記のコマンドを試しました。これでより詳細なエラーが表示されます - [localhost]次のエラーメッセージでリモートサーバーlocalhostに接続できませんでした:WinRMクライアントは 要求を処理できません。 CredSSP認証は、クライアント構成で現在無効になっています。クライアントの構成を変更して、 の要求を再度実行してください。 CredSSP認証は、サーバー構成でも有効にする必要があります。 – obfuscate

+0

私はこれを両方のサーバーから実行しました - 元のサーバー(ビルドサーバー)とターゲットサーバーの両方から実行すると同じエラーが発生します - また、ターゲットサーバーの資格情報を委任することもできますエラー:(それはlocuserがEnable-WSManCredSSPで設定されている必要がありますか?それをどうするかわかりません.Poershellコンソールを管理者として実行してもlocuserとしてログインすることはできません。 – obfuscate

関連する問題