管理者特権での実行
アプリケーションを実行する必要があるアカウントの種類を確立する最初の手順は、アプリケーションが使用するリソースと、呼び出す特権 API を調べることです。 アプリケーションまたはその大部分に管理者特権が必要ない場合があります。 セキュリティで保護されたコードを記述する場合、Michael Howard と David LeBlanc は、この評価を実行する方法の優れた説明を提供し、強くお勧めします。 (このリソースは、一部の言語や国では使用できない場合があります)。
次のいずれかの方法を使用して、悪意のある攻撃にさらされる可能性が低いアプリケーションに必要な特権を提供できます。
- 特権が低いアカウントで実行します。 これを行う 1 つの方法は、PrivilegeCheck を使用して、トークンで有効になっている特権を決定することです。 使用可能な権限が現在の操作に適していない場合は、そのコードを無効にして、管理者特権を持つアカウントにログオンするようにユーザーに依頼できます。
- 管理者のアクセス許可を必要とする別のアプリケーション関数に分割します。 RunAs コマンドを実行するショートカットをユーザーに提供できます。 ショートカットを設定する方法の詳細な手順については、ヘルプで 「runas」を検索してください。 プログラムで、アプリケーションの AppId Key レジストリ キーの下に RunAs コマンドを構成できます。
- CredUIPromptForCredentials(GUI)呼び出すか、CredUICmdLinePromptForCredentials(コマンド ライン) をしてユーザー名とパスワードを取得して、ユーザーを認証します。 例については、「ユーザーに資格情報のを要求する」を参照してください。
- ユーザーを偽装します。 System などの高い特権を持つアカウントで開始されるプロセスでは、ImpersonateLoggedOnUserまたは同様の Impersonate 関数呼び出すことによって、ユーザー アカウントを偽装できるため、特権レベルが低下します。 ただし、RevertToSelf の呼び出しがスレッドに挿入されると、プロセスは元のシステム特権に戻ります。
管理者特権を持つアカウントでアプリケーションを実行する必要があり、管理者パスワードをソフトウェア システムに保存する必要があると判断した場合は、「パスワードの処理」を参照して、これを安全に実行する方法を確認してください。