問題タブ [impersonation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
3149 参照

wcf - WCF サービスを管理者アカウントで実行したい

管理者アカウントで実行するように WCF サービスを構成するにはどうすればよいですか? (これは本番用ではなく、テスト用です)。

それは単に web.config の微調整ですか?

IIS 7 がホストする WCF サービス。

0 投票する
2 に答える
9515 参照

wcf - 私の IIS がホストする wcf サービスはどのユーザー アカウントで実行されますか?

IIS 7 でホストしている場合、.Net WCF サービスはどのユーザー アカウントで実行されますか?

IUSR_machineアカウントですか?

別のアカウントで実行する最も簡単な方法は何ですか? (このサービスのためだけに、IIS でホストされている他のものに影響を与えたくありません)。

0 投票する
1 に答える
693 参照

c++ - ユーザーになりすましてハイブにアクセスする - さまざまな方法、実際の問題は何ですか?

Win2000、XP、および Vista で LocalSystem アカウントで実行するサービスを設計しています。ユーザーがログインしている場合とログインしていない場合の両方で、ユーザーのレジストリ ハイブへのアクセスが必要になることがあります。 、ロードしようとしません。)

ユーザーがログオンしている場合、さまざまな手段 (たとえば、Explorer プロセスから、またはサービス コントロール マネージャーからログオン イベントを受信する) でユーザー アクセス トークンを取得し、ImpersonateLoggedOnUser と RegOpenCurrentUser を使用してユーザーのハイブにアクセスできます。しかし、私が偽装してハイブを開いているときに、ユーザーが [スタート] メニューから [ログオフ] を選択した場合、どのような影響がありますか? ログオフは防止されますか? なりすましは終了しますか?

ユーザーがログオンしていない場合は、RegLoadKey を使用してハイブ NTUSER.DAT を直接開くことができます。(ログオンしているユーザーには不可能です)。しかし、ユーザーがログオンすることを決定した場合、これはどのような意味を持ちますか (ハイブがロックされ、ログオンが妨げられるか、または問題が発生する可能性があると思いますか?)

これらのアイデアを調査するためにいくつかのテスト プロジェクトを設定しますが、明らかな結果に関係なく、これらの質問は、ユーザーによるこれらのアクション中にログイン/ログアウトすることによってどのような種類の問題が発生する可能性があるか、または発生するかという点で理論的なものです。サービス。

警告: ImpersonateLoggedOnUser は、ログオンしているユーザー (プロセスまたは SCM イベントから取得したトークン)、または WinLogon を呼び出してトークンを取得するためのプレーンテキスト パスワードを持っているユーザーに対してのみ使用できます - TRUE / FALSE ? つまり、私は LocalSystem として最大の権限を持っており、ユーザーのパスワードを変更したり、ユーザーのアカウントを削除したりすることさえできますが、ユーザーがログオンしていない場合、新しいトークンを作成してユーザーを偽装することはまったく不可能です。パスワード?

0 投票する
3 に答える
4815 参照

c++ - 違いは何ですか: LoadUserProfile -vs- RegOpenCurrentUser

これら 2 つの API は非常に似ていますが、どのような違いがあり、それぞれをいつ使用する必要があるかは不明です (ただし、私が使用していない CreateProcessAsUser で使用するために LoadUserProfile が指定されていることを除きます。単にハイブ アクセスを偽装しているだけです)。

LoadUserProfile http://msdn.microsoft.com/en-us/library/bb762281(VS.85).aspx

RegOpenCurrentUser http://msdn.microsoft.com/en-us/library/ms724894(VS.85).aspx

サービスとレジストリの記事: http://msdn.microsoft.com/en-us/library/ms685145(VS.85).aspx によると、偽装するときは RegOpenCurrentUser を使用する必要があります。

しかし、ユーザー プロファイルがローミングしている場合、RegOpenCurrentUser は何をする必要がありますか?それをロードする必要がありますか?

これらのドキュメントからわかる限り、両方の API は、スレッドが偽装しているユーザーの HKEY_CURRENT_USER へのハンドルを提供します。したがって、どちらもハイブを「ロード」します。つまり、ハイブをデータベース ファイルとしてロックし、レジストリ API のハンドルを渡します。

LoadUserProfile はユーザーがログオンするときと同じ方法でユーザー プロファイルをロードするように見えるかもしれませんが、RegOpenCurrentUser はそうではありません - これは正しいですか? これら 2 つの API がハイブをマウントする方法の根本的な違いは何ですか?

何が起こるかの意味と違い(もしあれば)は何ですか

  1. これらの偽装された各ハンドルが既に使用されているときに、ユーザーがログオンまたはログオフしますか?

  2. 一致する各クローズ関数 (RegCloseKey および UnloadUserProfile) が呼び出されたときに、ユーザーは既にログオンしていますか?

0 投票する
4 に答える
28976 参照

vb.net - vb.net で別のユーザーとして新しいプロセスを実行する

私は現在、独自の方法を使用して、Vista で別のユーザーとしてプロセスを実行していますが、ハック的で理想的ではないという感覚から逃れることはできません (UAC をクラップアウトし、私のシステムをクラッシュさせるという事実に加えて)アプリにセキュリティ例外があり、UAC を完全に無効にする必要があります)。私のプロセスは、「インターフェイス」と「起動スタブ」の 2 つのプロジェクト (2 つの EXE ファイル) で構成されています。プロセスは次のとおりです。

  1. ユーザーには、「Interface.exe notepad.exe」を起動するショートカットがあります
  2. Interface.exe には、使用したい資格情報を要求するフォームがあります。
  3. Interace.exe は ProcessStartInfo を使用して、LaunchStub.exe (LS) のインスタンスを新しいユーザーとして作成します。
  4. LS は ProcessStartInfo (ShellExecute を true に設定) を使用して、要求されたファイルを起動します。LS は要求されたユーザーとして既に実行されているため、新しいプロセスも実行されます。

2 段階のプロセスを使用する理由は、ユーザーが、OS が既定のアクション (.EXE、.SQL、.MSC など) を持っている任意のファイルを右クリックして起動できるようにし、ProcessStartInfo のみを実行できるようにするためです。 「UseShellExecute」を有効にしてそれをサポートしますが、そのスイッチでは新しい資格情報を使用できないため、一度に 1 つしか実行できません。

これにより、いくつかの問題が発生します。まず、ユーザーはコンピューターに既に存在している必要があります。つまり、以前にローカルでログインしている必要があります。そのユーザーのローカル プロファイルがない場合、要求されたアプリが起動することがありますが、レジストリとプロファイルの例外が発生します。これは、アプリケーションがまだ存在しないもの (ユーザーが存在しないレジストリ内の HKCU ハイブなど) を想定しているためです。ログインしたことがないため)。

アプリケーションの権利を要求しているユーザーに「昇格」させ、新しいプロセスを起動し、昇格を元に戻すことができるはずですが、そのための適切なコードサンプルを見つけることができず、完全に別のユーザーとして実行できるかどうかはわかりません。これはすべて意味がありますか?これを行うためのより良い方法があるように感じずにはいられません。


更新:オンラインで見つけた偽装コードをいくつか試しましたが、役に立ちませんでした。ProcessStartInfo と組み合わせて使用​​すると、提供された資格情報を使用して偽装を有効にしたにもかかわらず、提供したものではなく、現在のログインを使用してプロセスを起動しているように見えます。

0 投票する
1 に答える
1778 参照

.net - スケジュールされたタスクで .NET のユーザーを偽装するときのエラー

スケジュールされたタスクとして、Windows Server 2003 で .NET コンソール アプリを実行しています。

これは Process クラスを使用して別の小さなコンソール アプリを実行しますが、Process.StartInfo.Username を使用してユーザーになりすまして実行します。

管理者のスケジュールされたタスクで偽装されたアカウントの場合、それは完全に機能しますが、そうでない場合はエラーが発生します:

「アプリケーションを正しく初期化できませんでした (0xc0000142)」</p>

ユーザーに「バッチジョブとしてログオン」および「ローカルでログオン」を試みましたが、これは効果がないようです。コンソール アプリは、偽装されたユーザーとして起動しますが、失敗します。

Process Monitor を見ると、失敗する前の最後のイベントは次のとおりです。

Tool1.exe - イメージの読み込み - C:\WINDOWS\system32\kernel32.dll - 成功

ツールに依存して実行したところ、これがエラーであると報告されました。

GetProcAddress(0x77E40000 [c:\windows\system32\KERNEL32.DLL], "FlsAlloc") は、アドレス 0x7900746D の "c:\windows\system32\MSCOREE.DLL" から呼び出され、スレッド 1 によって 0x77E6B49C を返しました。"c:\stfinstall を終了しました\stf\tools\tool1\TOOL1.EXE" (プロセス 0xB3C) をスレッド 1 でコード 1282 (0x502) で実行します。

誰かがこのエラーの原因について何か知っている場合、またはそれを修正する方法を知っている場合は、お知らせください!

代替アプローチの提案も歓迎します

ありがとう :)

0 投票する
4 に答える
2688 参照

asp.net - ASP.NET - デフォルトでユーザーを偽装する場合、アプリ プール サービス ID を一時的に偽装しますか?

Web アプリケーションが実行されているのと同じサービス ID で実行される SharePoint サイトのコードを呼び出す必要があります。既定では、SharePoint は Web ページを表示しているユーザーを偽装し、ユーザーは必要なアクセス許可を持っていません。

Web アプリケーションのサービス ID を使用してコードを実行し、その後デフォルトの偽装を使用するように戻す最良の方法は何ですか?

0 投票する
2 に答える
1433 参照

asp.net - ASP.NET はユーザーを偽装してパフォーマンス カウンター カテゴリを削除できますか?

ローカル マシンで ASP.NET ページを実行しているときに、自分のユーザー アカウントの偽装に成功したと思います。

こちらで説明されている方法を使用してWindowsIdentity.GetCurrent().Name、ASPNET からドメイン アカウントに正常に変更されました。

自分のアカウントだけがアクセスできるファイル システム上のファイルに正常に書き込むことができます。ただし、パフォーマンス カウンター カテゴリを削除しようとすると、Access Deniedが表示されます。
レジストリのブランチを監査しており、MyMachine\ASPNET が Failing at Object Access であることがわかりました。

失敗しているコードは次のとおりです。

削除呼び出しで失敗します。

(私のアカウントは管理者であり、ASP.NET コンテキストの外部で同じコードを正常に実行できます)。

この System.Diagnostics 名前空間の呼び出しは、実際には何らかの COM プロセスを呼び出しており、2 番目のホップが原因でバウンスされていると思われます。誰が何が起こっているのかを確認できますか?

編集: 例外: アクセスが拒否されました 説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細:

System.ComponentModel.Win32Exception: アクセスが拒否されました

完全な信頼の下で実行されます。

0 投票する
3 に答える
3919 参照

asp.net - ASP.NET での偽装と委任

ASP.NET を使用してリモート サーバー上のテキスト ファイルにアクセスできません。ASP.NET 1.1 アプリケーションは、リクエスタの Windows 資格情報を使用した偽装を使用して Server 2003 で実行されています。クライアント、Web サーバー、およびリモート サーバーはすべて同じドメイン上にあり、ユーザーはテキスト ファイルにアクセスする権限を持っています。ユーザーは、UNC 共有を介して自分のマシンからテキスト ファイルを開くことができます。ユーザーがサーバーに直接ログインしてサイトを実行すると、正常に動作します。ただし、ユーザーが自分のマシンで試してみると、機能しません。これを機能させるには、偽装をどのように設定する必要がありますか?

編集: アプリの他の機能は正常に動作しますが、動作しないリモート ファイルにアクセスするだけです。