小さな診断 OSX プログラム (小さなメニュー トレイ アプリ) があり、これを顧客に提供する必要があります。プログラムは dtrace を使用します。そのため、MacOS ディレクトリに、suid ビットが設定され、所有権が root:wheel に設定された補助実行可能ファイルがあります。ヘルパーの唯一の役割は、含まれている dtrace スクリプトを使用して dtrace にすぐに exec() を実行することです。
私の問題は、これを顧客に届ける良い方法がわからないことです。素朴に .zip アーカイブに入れると、すべての特別なアクセス許可が消去されました。
DMG に入れようとすると、root:wheel の所有権が私のもの (ted:staff) にリセットされました。ファイルオブジェクトの所有権設定を尊重し始めるには、DMG で todiskutil
を使用する必要があることがわかりました。enableOwnership
これで、DMG 内で、ヘルパー プログラムに必要な root:wheel および +s suid 権限が設定されていることがわかります。
しかし、アプリ バンドルを DMG からデスクトップにドラッグ アンド ドロップすると、権限が再びリセットされることがわかりました。さらに、DMG からアプリケーションを実行しようとすると、ヘルパー プログラムに suid ビットが設定されていないかのように動作します。
これを少し振り返ると、なぜこれが機能するのかまったくわかりません。開発者がこのように suid ビットを設定したアプリ バンドルを配布できるようにすることは、厄介で非常に明白なセキュリティ ホールのようです。
では、これはどのように行われるのでしょうか。パッケージインストーラーは必要ですか? それはsuidビットを保持しますか?誰かがこれがどのように機能するかを教えてくれますか?