2009-03-16 6 views
6

私が求めていることを理解するためには、UnixにおけるSUIDのいくつかの使い方と区別することが重要です。UnixベースのプラットフォームからSUIDに相当するものについては、MS Windowsプラットフォームでどのような選択肢がありますか?

プロジェクトが所有し、SUIDビットが設定されているユーザーのPATHの実行可能ファイルを使用するプロジェクトがあります。この方法では、実行時に、呼び出し元のユーザーではなくファイルの所有者のコンテキストで実行されます。この方法では、ユーザーにはアクセスできないため、通常のファイルシステム保護によってユーザーから保護されます。これは合理的にうまくいく。計画はプロジェクトをクライアント/サーバーアーキテクチャに移行することですが、それには時間がかかります。その間、Windowsシステムでこの種の動作をどのように複製できますか?

プロジェクトの実行可能ファイルは、私の意見ではプロジェクトが何をしているかを考慮すると、正直なところ、SETUIDライブラリ呼び出しを呼び出さないことに注意してください。プロジェクトにはシステムのルート権限は必要ありません。最初のセキュリティ上の懸念は、ユーザー(ファイル所有者以外のユーザー)から自分のファイルを保護する必要があることです。ファイルにアクセスするために「ユーザーコンテキスト」に切り替えることができれば非常に良いでしょうシステムを呼び出すユーザーとして扱います。 (このようにして、プロジェクトが接触するかどうかを判断するのは簡単です)

プロジェクトはCとJavaの組み合わせで作成されます。SUIDセットのCプログラムはJavaコード...

私はすべてのそのようなメカニズムを知ることに熱心だし、特にされているものに焦点を当てています:CとJavaに適し

  1. 、と。
  2. Windows以外のプログラマにとっては簡単に実装できます。
  3. Windows固有の最小限のコーディングが必要です。

いくつかのソリューションが優れている場合は、この点についてご承知の上でご意見をお寄せください。

NOTES:

  1. のLogonUser:プレーンテキストでパスワードが必要です。どのように答えがありますか?
  2. RunAs:PROMPT!にパスワードを入力する必要があります。 ... LogonUserの場合と同様に悪化します。私はこれが答えであるかどうか分かりません。
+0

適切な解決策は、サービスをインストールすることです。 –

答えて

3

私はWindowsにSETUIDが存在しないと思いますが、別のユーザーとしてプロセスを起動することはできます。あなたがCを使用している場合は、あなたがに見てする必要があります実際には二つの主要なWindowsの具体的な機能があります。

LogonUser

CreateProcessAsUser

は、それらの機能のためのドキュメントはかなり良いですので、それはshouldnそれは巨大な挑戦です。基本的には、LogonUserを使用してユーザーを偽装し、CreateProcessAsUserを使用してそのユーザーとしてJVMを起動します。

また、RUNASコマンドを見ることもできますが、あなたのニーズを満たすかどうかはわかりません。

+0

ありがとう、彼らを見て... RT –

4

Cygwinは、彼らがここにユーザーのパスワードを必要とせずに、これを行う方法についての優れた議論があります。Using Windows security in Cygwin

基本的に彼らは、パスワードを必要とせずにセキュリティトークンを提供するカスタムLSA認証パッケージをインストールします。代替として、認証パッケージがインストールされていない場合は、ドキュメント化されていないNtCreateToken APIを使用します。

偽装したいアプリケーションは、javaを呼び出す前にcygwin setuidを呼び出すことができます。

+0

はい、それは、私たちがミッドナッツ以来行ってきたことです。しかし、ユーザにはCygwinをインストールする必要があります。私の考えではボーナスですが、ユーザは、特にそれらの価値を理解していない/認識していないときに、あまりにも多くのパッケージをインストールしなければならないということは喜ばしくありません。しかし、これは他の唯一の方法だと思われます(他の回答の欠如があるため)。 –

+0

よろしくお願いします。セキュリティの観点からみると、なんと悪夢ですか? Cygwin、IMOをクリアするもう一つの理由! –

関連する問題