6

私が何を求めているのかを理解するには、Unix での SUID のいくつかの用途と区別することが重要です。

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

プロジェクトの実行可能ファイルは SETUID ライブラリ呼び出しを呼び出さないことに注意してください。率直に言って、プロジェクトの機能を考えると、これは追加するのに最適な機能です。プロジェクトには、システムのルート権限は必要ありません。最初のセキュリティ上の懸念は、ユーザー (ファイル所有者以外の任意のユーザー) から独自のファイルを保護する必要があることであり、ファイルにアクセスするために「ユーザー コンテキスト」に切り替える機能があれば非常に便利です。あたかも呼び出し元のユーザーであるかのようにシステム。(このようにして、プロジェクトが触れてもよいものとそうでないものをより簡単に判断できます。)

プロジェクトは C と Java の組み合わせで書かれています - SUID が設定された C プログラムは Java コードを呼び出します...

私はそのようなメカニズムをすべて知りたいと思っており、特に次のようなメカニズムに焦点を当てています。

  1. C および Java に適しています。
  2. Windows 以外のプログラマーでも簡単に実装できます。
  3. Windows に固有の最小限のコーディングが必要です。

いくつかの解決策が優れている場合は、この点に関してあなたが知っていることについてあなたの考えを共有してください.

ノート:

  1. LogonUser: プレーン テキストのパスワードが必要です。それがどうして答えになるのでしょうか。
  2. RunAs: PROMPT でパスワードを入力する必要があります。... LogonUser の場合と同様に、さらに悪いことです。これがどのように答えているのかわかりません。
4

2 に答える 2

4

WindowsにはSETUIDに相当するものはないと思いますが、別のユーザーとしてプロセスを起動できます。C を使用している場合、調べる必要がある主な Windows 固有の関数は 2 つだけです。

ログオンユーザー

CreateProcessAsUser

これらの関数のドキュメントは非常に優れているため、それほど大きな課題ではありません。基本的に、LogonUser を使用してユーザーになりすまし、次に CreateProcessAsUser を使用してそのユーザーとして JVM を起動します。

RUNASコマンドを確認することもできますが、それがニーズを満たすかどうかはわかりません。

于 2009-03-16T19:40:21.983 に答える
4

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

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

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

于 2012-07-12T00:16:53.133 に答える