Any User/Current host プリファレンス ファイル (Preferences Utilities Reference に従って管理者権限が必要) に書き込み、plist (root のみが書き込み可能) を介して launchd エージェントを有効/無効にする必要があるアプリケーションがあります。
SFAuthorizationView
これらの値を変更する前に、ユーザーに管理者として認証することを要求するために使用しています。
これらの値を実際に変更する最善の方法を決定しようとしています。
安価なハックのオプションは、BLAuthentication を介して、または自分で似たようなものを作成して、AuthorizationExecuteWithPrivileges()
andmv
またはを使用するようです。defaults
これのマイナス面は、実行しているコマンド ライン アプリの戻り値が得られないことと、遭遇した奇妙な難解なバグ (特定の状況で -60008 エラーが発生するなど) です。明らかに、これは Apple によって強く推奨されていますが、人々は実際にそれを行い、ある程度の成功を収めているようです。
--self-repair
2 番目にハックなオプションは、さまざまな場所で説明されているように、suid ビットを設定してオプションを使用してヘルパー アプリを作成することです。これは可能に思えますが、おそらく 3 番目のオプションよりも問題が少ないとは言えません。
launchd
3 番目のオプションは、ルートとして実行され、ソケットを介してアプリケーションと通信する本格的なデーモンを作成することです。これは、いくつかの plist ファイルを読み書きするのは少しやり過ぎのように思えますが、将来的には他の用途を見つける可能性もあり、それが私のアプリケーションの唯一のデーモンではないので、単に別のものを追加します。
このサンプル コードを自分の目的に合わせて変更することを考えています。
私の2つの質問は次のとおりです。
launchd デーモン オプションは、これに最適なルートのように思えますか、それとももっと簡単なルートがありませんか?
他の誰かがそのコードを似たようなものの基礎としてうまく使っていますか? テストアプリで問題なく使用できましたが、皆さんの意見を聞きたいです。