LinuxコンピューターでC++でアプリケーションを開発するのに忙しいです。アプリケーションは、イーサネットアダプタとネットワークを使用するサードパーティのライブラリを使用します。ライブラリは、GigEVisionカメラのライブラリです。起動時に、アプリケーションはカメラへの接続を試み、カメラに関する情報を返します。その後、アプリケーションへのビデオのストリーミングを開始します。
しばらくすると、アプリケーションはカメラに接続したり、カメラからカメラ情報を取得したりできなくなりましたが、root(sudo)としてアプリケーションを実行すると問題が解決します。
私は図書館の供給者に連絡しました、そして彼らは私が以下をするべきであると示しました:
rootとして実行するとシステムのセキュリティが損なわれると感じるユーザーは、次の実装で十分だと感じるかもしれません。
- 実行可能所有者をrootとして設定します。
- 実行可能ファイルに「setuid」権限ビットを設定します
- コードでは、アプリケーションの起動時にcapset()を使用して、次の権限を除くすべての権限を解放します。CAP_SYS_NICE、CAP_NET_ADMIN、CAP_NET_BROADCAST、CAP_NET_RAWアプリケーションはすべてのroot権限で起動しますが、起動後すぐに削除されます。
これは機能しますが、実行可能ファイルを変更せずにこれを行う別の方法はありませんか?これらの特権にアクセスできるグループにユーザーを追加することを考えています。助けていただければ幸いです。
上記のソリューションは、コンパイルのたびに所有者を変更して権限を設定する必要があるという意味で最適ではありません。このアプリケーションは、ビデオの録画と画像のキャプチャに使用されます。前述のソリューションでは、これらの記録とキャプチャもrootユーザーが所有しているため、ファイルを配布するときにユーザーを元に戻す必要があります。
OS:Ubuntu Linux 11.10環境:Qtを使用したC ++