スーパーユーザー権限でデーモン(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行ごとに変更することはできますか?