Windowsでは、ユーザーコンテキストで実行されているクライアントがソケットやパイプを使用して接続するサービスを持つことができます。接続しているユーザーを偽装して例えば、ユーザーだけがアクセスできるファイルにアクセスする(または、他のファイルにアクセスしていないことを確認する)ことができます。Mac OS Xでユーザーを偽装する
Mac OS Xでこれを達成するのと同等の方法は何ですか(Linuxも面白いですか)。私はset * uid関数が何らかの方法でこれに使用されると仮定します。
しかし、偽装するユーザーを認証して、ユーザーがソケットに接続しているときにuidを設定するにはどうすればよいですか?
また、set * uid関数はプロセス全体に影響するように見え、マルチスレッドデーモンでの使用は困難です。 Mac OS X/Linux上でこのタイプのサービスに共通に使用されるデザインパターンがありますか?
編集: pmjordanの答えセット* uidのプロセスごとの専用の問題の世話をするようだ、と疑問How can I pass user credentials through a Unix-domain socket on Mac OS X?は、UNIXドメインソケットの代わりにプレーンなソケットを使用して、実際の認証の問題の世話をするようです。
デーモンから特定のユーザーとして実行中のサブプロセスを作成することは、やり方のようです。しかし、どのUIDを使用するのかはどのようにわかりますか?私は別のやり方でやるべきことをしようとしているかもしれません - 私は、デーモンに、呼び出し元のユーザーがアクセスできるファイルにアクセスしていることを確認したいと思っています。私として実行するのに十分な特権で動作しているものと通信します。たぶん、これを行う別の方法がありますか? – villintehaspam
あなたが何を意味するのかよく分かりません。 "デーモンは、呼び出し元のユーザーがアクセスできるファイルにアクセスしていることを確認する必要があります" - 子プロセスが問題のユーザーとして実行されている場合は、そのユーザーの権限しか持たない*あなたが閉じることができる 'fork()'中にハンドルをオープンします。それとも、他に何かを求めていますか? – pmdj
"私は、ユーザアプリケーションが、私として実行するのに十分な特権を持って動作しているものと通信していることを、ユーザアプリケーションが知ることができるようにしたい。 - 私はあなたがこの部分で何を求めているのか全く理解していないのが残念です。あなたのプログラムが実際にやるべきことの大まかなアイデアや例を与えるのに役立つと思います。 – pmdj