2009-03-27 5 views
2

名前付きパイプを使用してWindowsサービスにCGIプロセスを接続しようとしています。 開発マシンの別のサーバーを使用してコードが正常に実行されますが、CGIプロセスでCreateFile()を呼び出すと、IISにセキュリティ上の問題が発生します。IISのWindows Named-Pipe ACL

Windowsサービスは名前付きパイプサーバーなので、CGIプロセスはその名前付きパイプにクライアントとして接続しようとしています。

InitializeAcl() 
    AddAccessAllowedAce() 
    SetSecurityDescriptorDacl() 

しかし、私は本当にコンセプトを理解していけない:

私は呼び出すことにより、フラグSECURITY_WORLD_SID_AUTHORITYとグローバルセキュリティ記述子を作成し、いくつかのコードを掘っています。 パイプサーバーCreateNamedPipe()をSECURITY_ATTRIBUTES構造体でこのACLで呼び出す必要があると仮定していますが、名前付きパイプクライアントはどうですか?

グローバルセキュリティ記述子を別に作成し、それにCreateFile()を呼び出しますか?

私はちょうどのCreateFile(にヌルを渡しください

SecurityAttributes.bInheritHandle = TRUE; 

とそれを継承します)を呼び出しますか?

+0

CGIプロセスがどのアカウントで実行されているかを知ることは役に立ちます。 – Murray

+0

私はこれを変更しようとしているので、これを残しました。現在のところ、管理者権限を持つユーザーアカウントですが、最終的にIUSERになる可能性があります –

答えて

1

パイプはサーバーによって作成されるため、サーバーのみがACLを指定する必要があり、クライアントはACLにNULLを使用します。

継承は、名前付きパイプが1つのプロセスで作成され、そのプロセスがハンドルに直接アクセスできるようにするための新しいプロセスを作成する場合にのみ適用されます(ハンドルを再オープンせず、コマンドラインのような他の方法で値を指定します)。

sysinternalsのプロセスエクスプローラを使用して、プロセスで開いている名前付きパイプを表示してからACLを確認できます。

+0

"名前付きパイプを表示する"の仕組みは?また、あなたはACLをどのように見ますか? – codea

+0

"名前付きパイプ"は、特殊なファイルシステム内の単なるファイルです。彼らはHANDLEのファイルタイプを持っています。プロセスエクスプローラは、デフォルトでプロセスのすべてのハンドルを表示します。 – MSalters

関連する問題