2

root 権限が必要な Qt C++ を使用して、OSX でアプリケーションを作成しています。ユーザー名とパスワードを要求するダイアログ ボックスを表示することで、これらの必要な権限を取得できると思います。XAMPP では次のようになります。

OSX の権限ダイアログ

これはどのように行うことができますか?フォームを手動で作成してから使用するsetuid必要がありますか、それとも SDK に既に組み込み関数がありますか?

4

1 に答える 1

4

当初、Apple は、アプリケーションがルート権限で別のアプリケーションを起動できるようにする関数「 AuthorizationExecuteWithPrivileges 」を提供していました。これは、セキュリティ上の理由から廃止されました。

ここでのダイアログは少し誤解を招きます。Apple は、さまざまな状況でダイアログを起動する認証サービスを提供していますが、通常は、認証データベース (/etc/authorization にあるファイル) にルールを設定し、AuthorizationCreate で Authorization リファレンスを作成した後、AuthorizationCopyRights 関数を呼び出したアプリケーションから起動します。

OSX のセキュリティは、セキュリティ デーモン、セキュリティ エージェント、およびアプリケーションに分割されます。アプリケーションは、このシステムを使用して機能を制限したり、ユーザーが資格情報を入力するための承認を要求したりして、特権アプリケーションを起動できるようにすることができます。これを行う必要があります。

ダイアログはアプリケーションによって表示されたのではなく、セキュリティ GUI のみを担当するセキュリティ エージェントによって表示されたことに注意することが重要です。デーモンは実際に認可を処理します。

Apple の昇格方法は、すべてのアプリケーションを標準ユーザー権限で実行することであり、特権タスクが必要な場合は、launchd で実行するように登録され、昇格された特権が与えられる別のアプリケーションに分割する必要があります。Apple が提供する例はSMJobBlessです。

この例の呼び出しコードは Objective-C で記述されていますが、重要な関数は SMJobBlessAppController.m ファイル内の C 関数だけです。最も注目すべきは、承認参照を作成するAuthorizationCreateと、Objective-C 関数blessHelperWithLabel:error: atのコードです。ファイルの一番下。

プロセスの詳細が記載されている SMJobBless のヘルプ ドキュメントから始めてください。

最後に、Qt を使用している場合は、必要な関数呼び出しのために Apple のセキュリティ フレームワークを含める必要があります。これを行うには、以下を .pro ファイルに追加するだけです: -

QMAKE_LFLAGS += -F /System/Library/Frameworks/Security.framework/
LIBS += -framework Security
于 2013-08-23T15:33:00.103 に答える