スーパーユーザー権限でデーモン(Pythonで記述)を呼び出す必要があるGUIアプリケーションがあります。ユーザーにパスワードの入力を求めずにこれを実行したい。
デーモンはスクリプトであるため、SUIDビットを直接設定することはできません。このためのCラッパーを作成することはできますが、特に私の側のミスがシステムのセキュリティを著しく損なう可能性がある場合は、車輪の再発明をしたくありません。
この状況で私が通常行うことは、/etc/sudoersに行を追加することです。 これにより、ユーザーはNOPASSWDディレクティブを使用して、パスワードなしでrootとしてデーモンを実行できます。これはコマンドラインから正常に機能します。ただし、GUIからこれを行うと、pkexec ユーザーのパスワードを尋ねるダイアログがポップアップ表示されます。 Ubuntuでは、sudoを呼び出すようです GUIからの情報がpkexecによって何らかの形で傍受されています 。
これを回避するためのクリーンな方法はありますか? setuidスクリプトの煩わしさに対処する必要はありません。
ベストアンサー
次のように言うのは不適切です。「Ubuntuでは、sudoを呼び出すようです。 GUIからの情報がpkexecによって何らかの形で傍受されています 「 。 pkexec sudoとの共通点はあまりありません 。 sudoとは対照的 、pkexec プロセス全体にroot権限を付与するのではなく、一元化されたシステムポリシーをより細かく制御できるようにします。
ここで、pkexecからパスワードを要求されることなく、GUIアプリケーションを実行したい場合 、これを行うのは難しくありません。たとえば、 GPartedを見てみましょう。 。それを開くと、パスワードの入力を求める次のダイアログウィンドウが表示されます。
詳細strong>をクリックします ダイアログウィンドウは次のようになります:
ここから、/usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy たとえば、次のコマンドを使用してファイルを作成します。
gksu gedit /usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policy
次の行を変更します:
<allow_any>auth_admin</allow_any>
<allow_inactive>auth_admin</allow_inactive>
<allow_active>auth_admin</allow_active> 次のように:
<allow_any>yes</allow_any>
<allow_inactive>yes</allow_inactive>
<allow_active>yes</allow_active> ファイルを保存して閉じます。次に、 GPartedを開くと パスワードの入力を求められることはもうありません。
関連:Geditまたはコマンドラインを使用して、テキストファイルの4行ごとに変更することはできますか?