1

認証を作成し、それを使用して認証されたコマンドを実行するCLIツールがあります。この CLI ツールを連続して何回も呼び出す必要があります。

ツールを初めて呼び出したときに与えられた認証を再利用するにはどうすればよいですか? これは私の認証コードです:

AuthorizationRef authorizationRef;
status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &authorizationRef);
AuthorizationExecuteWithPrivileges(authorizationRef, "/bin/rm", kAuthorizationFlagDefaults, NULL  , NULL);
4

2 に答える 2

3

AuthorizationMakeExternalForm認証トークンのシリアル化可能なバージョンを作成するために使用します。これは、アプリケーション間で使用するために限られた時間だけ保存できます。でデシリアライズしAuthorizationCreateFromExternalFormます。詳細については、 Authorization Services プログラミング ガイドを参照してください。埋もれている重要な詳細は定数kAuthorizationExternalFormLengthです。シリアル化するオブジェクトの大きさを知るために必要です (32 バイトですが、定数を使用します)。

このトークンは非常に機密性が高いため、保管方法には細心の注意を払う必要があります。一般に、アプリケーションが通信できる別の特権ヘルパー ツールを作成することをお勧めします。XPCを使用して 10.8 以降でこれを行う方法のサンプル コードについては、EvenBetterAuthorizationSample を参照してください。(10.8 より前のバージョンが必要な場合は、10.6 までさかのぼって動作する BetterAuthorizationSample というサンプル コードがありました。Apple は削除しましたが、Google でコピーを見つけることができます)。

特権ヘルパー ツールの設定はより複雑ですが、はるかに安全です。launchd を使用して起動し、( を使用して) 認証トークンを渡しますAuthorizationMakeExternalForm。Launchd は、一定時間アイドル状態になるまで、自動的に実行を続けます (したがって、認証されます)。その後、launchd は自動的にそれを強制終了します。これにより、認証トークンをファイルに書き込む際のセキュリティ上の問題がすべて解消されます。

于 2013-11-05T22:19:10.063 に答える
2

AuthorizationExecuteWithPrivileges はかなり前から廃止されていることに注意してください。

@RobNapier の包括的な回答で示唆されているように、ヘルパーに必要な昇格を提供する、launchd に登録されたヘルパー アプリを作成する必要があります。

EvenBetterAuthorizationSample は目指すべきものですが、特にアプリケーションとそのヘルパーの間で XPC 通信を使用するため、初めて使用する場合は非常に複雑です。

SMJobBlessは、別のヘルパー アプリケーションを作成するための概念を理解し、理解するのに役立つ簡単な例です。

于 2013-11-06T10:06:41.510 に答える