2011-08-11 12 views
1

... C#ツールを使用してユーザーに一時的な管理者権限を与えたい。したがって、ユーザーを管理者ユーザーグループに追加します(権限のあるサービスアカウントで実行されているバックグラウンドサービスはこのジョブを実行します)。ただし、変更は新しいセッション(ログアウト/再ログインの後)でのみ有効で、不便です。現在のユーザープロファイルを更新する方法はありますか?現在のユーザープロファイルを更新する

私はいくつかの方法を試してみました:

  • .NET Process.Start経由してtrueに設定LoadUserProfileプロパティで。
  • 次は、LoadUserProfile Win32 API関数を使用して試しました。
  • もう一つの方法は、.NET偽装権限の変更を認識しませんでした

これらすべての試行でユーザーを偽装することでした。古い特権を含み、いつでも再ロードされる、キャッシュされたユーザープロファイルがあるようです。

新しいプロファイルがロードされた唯一の方法は、runasコマンドである、しかし我々は、ユーザーがコマンドラインで遊んでする必要はありません、.NET

からこれを行うことは可能であるべき素晴らしいことです別のオプションがある場合は?多分これを行うためのツールがありますか?


[OK]をクリックすると、ユーザーが再ログインして、次に新しいトークンを使用します。 CreateProcessAsUserを使用して、新しいトークンを使用して新しいプロセスを実行します。現在のWindows環境に新しいトークンを割り当てる方法があるので、ユーザーがWindowsで実行するすべてのアクションはこの新しいトークンを使用しますか?それ以外の場合は、lsrunasのような他のツールを使って新しいコンテキストでプロセスを開き、winapi呼び出しを避けることができます。

私たちはユーザー(個人のノートブック)を信頼して、彼が望む(一時的な時間)ソフトウェアをインストールすることができますが、私たちは各ツールをツールで文書化しています。我々は、グループ割り当てとシステム文書を管理するバックグラウンドでローカル管理者アカウントを使用してサービスを実行しています。

答えて

2

Windowsにログオンすると、すべてのグループメンバーシップ(ネストされたメンバーシップを含む)が解決されるセキュリティトークンが作成されます。トークンには、ユーザーが所属するSID(セキュリティ識別子)のリストが含まれています。最初のSIDはユーザー自身のIDで、次にグループや役割(対話型ログオン、全員など)が含まれます。つまり、アクセス制御が行われるたびに、グループメンバーシップをユーザーDB(Active Directoryサーバーなど)に対して検索する必要はありません。代わりに、オブジェクト(例えば、ファイル)のACL(アクセス制御リスト)がトークンに対してチェックされる。

グループメンバーシップを更新するには、新しいトークンを作成する必要があります。あなたがログアウトして、それを説明するときに再度ログインするか、同じユーザーに対して別のログインをLogonUserとしなければなりません。しかし、その機能には通常のユーザーはアクセスできません。

私はそれがすべて別のデザインを見つけることに沸騰すると思います。管理グループからユーザを追加したり削除したりすることは、セキュリティの観点からは奇妙に見えます。必要なリソースにユーザーがアクセスできるようにする他の方法はありますか? LocalSystemアカウントで実行されるWindowsサービス内から実際の作業を行うことはできますか?

+0

あなたのサービスがハングアップしたり、誰かがそれを破壊する方法が見つかった場合はどうなりますか?あなたはUATや通常のセキュリティ方法を迂回してユーザーを昇格させる方法を提供しました。 –

+0

ローカルシステム権限で実行されているサービスにはリスクがあります。もちろん、サービスのインターフェースはセキュリティを念頭に置いて開発する必要があります。 –

関連する問題