4

この質問のタイトルは同じですが、質問の本文はスクリプトの観点から質問します。たとえばsu -c、これを複製しないでください)

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

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

編集:ボーナスとして、Maemo / Meego /その他のハンドヘルドでも機能するのがいいでしょう(afaik PolicyKitはそこでは利用できません..)

4

3 に答える 3

4

特にUbuntuでは、プログラム全体ではなくアクションを昇格させるため、より高いセキュリティときめ細かい制御のために、gksu/su/sudoに取って代わりつつあるPolicyKitを使用できます。

于 2010-09-16T12:07:29.040 に答える
4

完全に別のプログラムを作成します。この哲学に沿った何か。基本的には、必要なことを正確に実行する単純なプログラムを作成し、ファイルシステムのファイル権限でその動作を制御します。主に、

setuid プログラムではできる限り何もしません

setuid プログラムは非常に危険な環境で動作する必要があります。ユーザーは fds、args、environ、cwd、tty、rlimits、タイマー、シグナルなどを完全に制御できます。さらに悪いことに、制御項目のリストはベンダーの UNIX ごとに異なるため、すべてをクリーンアップする移植可能なコードを作成することは非常に困難です。

最新の 20 の sendmail セキュリティ ホールのうち、11 は sendmail システム全体が setuid されているためだけに機能しました。

1 つの qmail プログラムのみが setuid されています: qmail-queue。その唯一の目的は、新しいメール メッセージを送信キューに追加することです。

と、

root として行うことは最小限に抑えます。

sendmail システム全体が root として実行されるため、オペレーティング システムに組み込まれている保護機能によってエラーが検出されることはありません。対照的に、ルートとして実行できるのは qmail-start と qmail-lspawn の 2 つの qmail プログラムだけです。

于 2010-09-16T12:27:30.910 に答える
1

やりたいことだけを行うヘルパーsetuid プログラムを作成し、そこからアプリケーションをfork / execします。次に、子プロセスの権限を削除します。どちらのアプリケーションも、パイプ、ソケットなどを介して通信できます。

setuid プログラムはセキュリティ上のリスクがあるため、実装する際には細心の注意を払う必要があることに注意してください。

于 2010-09-16T13:08:55.470 に答える