スーパーユーザー特権でデーモン(Pythonで作成)を呼び出す必要があるGUIアプリケーションがあります。ユーザーにパスワードを要求せずにこれを実行したいと思います。
デーモンはスクリプトであるため、SUIDビットを直接設定することはできません。このためにCラッパーを書くことはできますが、特に自分のミスがシステムのセキュリティを著しく損なうことにつながる可能性がある場合は、車輪を再発明したくないでしょう。
この状況で私が通常することは、/etc/sudoers
に行を追加して、ユーザーがNOPASSWDディレクティブを使用して、パスワードなしでrootとしてデーモンを実行できるようにすることです。これは、コマンドラインから正常に機能します。ただし、GUIからこれを行うと、pkexec
ダイアログがポップアップしてユーザーのパスワードを要求します。 Ubuntuでは、GUIからのSudo
への呼び出しは、何らかの形でpkexec
によってインターセプトされているようです。
これを回避する方法はありますか?むしろ、setuidスクリプトの手間を処理する必要はありません。
"Ubuntuでは、GUIからSudo
への呼び出しがpkexec
"によってインターセプトされているようです。 pkexec
はSudo
とほとんど共通点がありません。 Sudo
とは対照的に、pkexec
はプロセス全体にルート権限を付与するのではなく、集中システムポリシーをより細かく制御できます。
これで、pkexec
からパスワードを要求されることなくGUIアプリケーションを実行したい場合、これを行うのは難しくありません。たとえば、GPartedを見てみましょう。開くと、パスワードの入力を求める次のダイアログウィンドウが表示されます。
詳細をクリックすると、ダイアログウィンドウは次のようになります。
ここからは、たとえば次のコマンドを使用して/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を開くと、パスワードの入力を求められなくなります。