3

条件は次のとおりです。Objective-cで記述されたMacOSX10.7およびCocoaグラフィカルアプリケーション。

私は次の問題に直面しています。Cocoaアプリケーションの/user/binフォルダーからデーモンアプリケーションを起動できません。そのためにはroot権限が必要です。

* .pkgではなく、手動で作成したインストーラーアプリケーションのインストーラーがあります。インストールプロセスが終了した後、デーモンを起動する必要があります。Objective-Cアプリケーションで特権レベルを上げるにはどうすればよいですか?

私はこのコードを持っています。ただし、AuthorizationExecuteWithPrivileges呼び出しは非推奨です。

使用しないでください。

AuthorizationItem authItem      = { kSMRightModifySystemDaemons, 0, NULL, 0 };
AuthorizationRights authRights  = { 1, &authItem };
AuthorizationFlags flags        = kAuthorizationFlagDefaults |
                                  kAuthorizationFlagInteractionAllowed |
                                  kAuthorizationFlagPreAuthorize |
                                  kAuthorizationFlagExtendRights;

AuthorizationRef authRef = NULL;

OSStatus status = AuthorizationCreate(&authRights,
kAuthorizationEmptyEnvironment, flags, &authRef);

status = AuthorizationExecuteWithPrivileges(authorizationRef, tool, kAuthorizationFlagDefaults, args, &pipe);

2番目の方法は、特権ヘルパーを使用することです。私の場合、この方法は非常に複雑に見えます。インストール後にデーモンを起動する必要があります。

当然のことながら、私はユーザーにMacを再起動するように頼むことができます。しかし、私はそれを避けたいと思います。

他の可能性は、デーモン実行可能ファイルのSUIDビットです。しかし、それは安全ではないと思います。

私の質問は:それを行う他のより簡単な方法はありますか?

4

1 に答える 1

2

まあ、ここに答えがあるかもしれません。

必要がある:

  1. 操作でシェル スクリプトを作成します。
  2. NSStringシェル スクリプトの実行を要求する Apple スクリプトを作成しますwith administrator privilege
  3. NSAppleScriptapple スクリプトのインスタンスを作成して実行します。

詳細は次のとおりです。

AuthorizationExecuteWithPrivileges は非推奨です

于 2013-03-21T20:26:30.213 に答える