C ++を使用して管理者/ルートとしてファイルを開く/書き込む(UAC / gksudo / etc。)
-
05-07-2019 - |
質問
作業中のアプリケーションには、Linux、OSX、およびWindows [Vista]で特定の保護されたファイルを編集する機能が必要です。一般に、アプリケーションが昇格した権限で何かを行う必要がある場合、パスワード要求ダイアログが表示され、管理者としてアプリケーションにこれらの操作の実行を許可するかどうかをユーザーに確認するよう求めます。
一般に、Windows Vistaはマニフェストファイルを使用し、OSXには認証ライブラリ( https://developer.apple.com/mac/library/documentation/Security/Reference/authorization_ref/Reference/reference.html )、Linuxにはさまざまなsudoがありますフロントエンド。
これを処理する一般的に受け入れられるクロスプラットフォームの方法はありますか?アプリケーションをルートユーザーとして実行する必要はありませんが、読み取り/書き込み操作のために保護されたファイルを開き、通常のユーザーモードに戻ることができるようにしたいです。
解決
Windows Vistaでは、基本的に管理アクションを実行するための専用プロセスが必要です。言及したように、管理者対応プロセスには、要求された実行レベルを指定するマニフェストが必要です( MSDNの記事をご覧ください)。
非昇格で起動し、「昇格」をサポートするWindowsアプリケーションをよく見ると、それ自体、管理者権限が必要になったら実際にまったく新しいプロセスを開くことがわかります(たとえば、UACが有効になっているときにタスクマネージャーに移動し、「すべてのユーザーからのプロセスを表示」をクリックして、管理者権限でどのように再開するかを確認します)
したがって、Windowsの場合、おそらく必要なアーキテクチャには2つのプロセスが必要になります。ほとんどの作業を行う標準プロセスと、管理操作を行うために呼び出す管理プロセスです。 2つのプロセスは、何らかの安全な手段(おそらく名前付きパイプを保護)して、標準プロセスに代わって管理作業を行えるようにします。
このアプローチは他のプラットフォーム間で一般化でき、おそらくプラットフォーム固有の詳細が漏れる必要がないように、何らかのクラス/インターフェースで抽象化できます。