質問

(この質問 同じタイトルがありますが、質問本体はスクリプトの視点でそれを尋ねます。 su -c, 、それにこれをだまさないでください)

ユーザー入力に基づいて /etcでファイル操作を実行する必要があるQT GUIアプリがあります。おそらく1つのオプションが使用されます system()sudo, 、しかし、それでも混乱を招く必要があります sudoers ある時点でファイル。私もしたくない system() プラススクリプトは、ファイルを変更するためにハックしますが、適切なファイル操作。

これを行うために私のアプリケーションの権利をプログラム的に高める最良の方法は何ですか?

編集:ボーナスとして、Maemo/Meego/他のハンドヘルドでも機能するかどうかは素晴らしいことです(Afaik PolicyKitはそこで利用できません。)

役に立ちましたか?

解決

私は完全に別のプログラムを書きます。この線に沿って何か 哲学. 。基本的に - 必要なことを正確に実行する簡単なプログラムを作成し、ファイルシステム上のファイル許可を使用して動作を制御します。主に、

SetUIDプログラムではできるだけ少ないことをします.

SetUIDプログラムは非常に危険な環境で動作する必要があります。ユーザーは、FD、ARGS、Environ、CWD、TTY、RLIMITS、タイマー、シグナルなどを完全に制御しています。さらに悪いことに、制御されたアイテムのリストは、ベンダーのUNIXによって異なるため、すべてをクリーンアップするポータブルコードを作成することは非常に困難です。

最新の20のSendmailセキュリティホールのうち、ElevenはSendMailシステム全体がSetUIDであるために機能しました。

qmailプログラムは1つだけです:qmail-queue。その唯一の目的は、発信キューに新しいメールメッセージを追加することです。

と、

ルートのようにできるだけ少ないことをします.

SendMailシステム全体がルートとして実行されるため、オペレーティングシステムの組み込み保護によってその間違いをキャッチする方法はありません。対照的に、qmail-startとqmail-lspawnの2つのqmailプログラムのみがルートとして実行されます。

他のヒント

PolicyKitを使用できます。これは、特にUbuntuでGKSU/SU/SUDOに徐々に置き換えられています。 行動, 、プログラム全体ではありません。

ヘルパーを作成します setUidプログラム それはあなたがやりたいことだけをします、そして フォーク / exec それからあなたのアプリケーション。次に、子プロセスに特権をドロップします。両方のアプリケーションは、パイプ、ソケット、またはそのようなものを介して通信できます。

SetUIDプログラムはセキュリティリスクであるため、実装する際には非常に注意する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top