2009-03-22 9 views
0

ユーザーアカウントで起動されたソフトウェアの管理者権限を必要とする命令(net share、、netsh ...)を黙秘する必要があります。Windowsで管理者権限でコマンドを安全に呼び出す

Unixの亜種の下では、ユーザーモードソフトウェアと一緒に、慎重に書かれたsuidビットのスクリプトをインストールし、必要なコマンドを起動します。

Microsoft Windowsの同等のベストプラクティスは何ですか?私は特にVistaに優しいが、XP互換のソリューションに興味があるだろう。

答えて

1

BobbyShaftoeによると、Windowsでこの問題を解決する標準的な方法は、サービスがデフォルトでLocalSystemアカウントで実行されるためです。他の方法では、管理者ユーザーとしてログオンする必要があり、資格情報が必要になります。

Vistaに必要な情報の追加ビットは、Vistaではコンソールとサービスが異なるセッションにあるため、クライアントアプリケーションがセッション境界を越えることができるIPCの何らかの形でサービスと対話する必要があることです。この場合に使用される通常のIPC方法は、名前付きパイプです。

XPでも同じ解決策が有効です。

+0

これはまさに私が必要としている答えの一種です。私は特定の資格情報を必要としない標準的な方法を使いたいと思っていました。 Vistaの追加のチップをありがとう。 – oparisy

1

1つの方法として、管理上の特権で動作するサービスを使用する方法があります。その後、アプリケーションから、それらのコマンドを呼び出すようにサービスに指示します。私はあなたが管理者の資格情報を知っていることをユーザーに要求されることを望まないと仮定しています。

+0

私は確かに、資格情報の認識や入力など、私たちからユーザーを流したがっています。あなたの方法は独創的ですが、この仕事のために絶えず稼働しているサービスではありませんか?同等のWindows suidはありませんか? – oparisy

+0

これに相当するものはありません。インストールするユーザーからユーザーの資格情報を取得し、そのユーザーを他の場所の暗号化されたフォームに格納することができます。しかし、ユーザーはそれが気に入らない可能性があり、資格情報が変更されたときにそのケースを処理する必要があります。しかし、それもうまくいくでしょう、ちょうどRunAs機能を使用してください。 – BobbyShaftoe

+0

しかし、私は最初の方法に行くでしょう。 – BobbyShaftoe

0

WinAPI関数LogonUserCreateProcessAsUserを使用して、異なるアクセス権を持つ新しいプロセスをプログラムで開始することができます。

あなたのシナリオでは、必要なnetコマンドを使用してバッチスクリプトを作成し、必要に応じてスクリプト名をパラメータとして取得する新しいcmd.exeプロセスを作成します。

このソリューションでは、アプリケーションにLogonUserで使用されている資格情報を何らかの形で保存する必要があるため、セキュリティ上のリスクが発生する可能性があります。

+0

管理者権限でバッチスクリプトが呼び出されましたか?これは起こるのを待っている列車の難破の災害です。管理者の資格情報を保存することは良い考えでもありません。 – snemarch