xbindkeysによるパスワードのないsudo呼び出し

xbindkeysによるパスワードのないsudo呼び出し

VT(仮想端末)を変更するためにキーバインディングを設定してみましたXこの投稿。端末エミュレータを入力すると、sudo chvt $(($XDG_VTNR-1))VTが適切に変更されます。しかし、高い権限で実行することは、chvtターミナルエミュレータ(たとえば)でコマンドとして実行されたときにのみ機能することがわかりました。これが私が避けようとしている要件です。xterm -e

私の設定の説明:

次の行がに追加されました/etc/sudoers

me    ALL=NOPASSWD:/bin/chvt

me出力はですwhoami。また、この行のバリエーションを試しました(たとえば、me ALL=(ALL) NOPASSWD:/bin/chvtおよびme ALL=(ALL:ALL) NOPASSWD:/bin/chvt)。

の場合、~/.xbindkeysrcキーバインディングを追加しました。

"sudo chvt $(($XDG_VTNR-1))"
   alt + c:113

"sudo chvt $(($XDG_VTNR+1))"
   alt + c:114

または

"sudo chvt $(($XDG_VTNR-1))"
   m:0x8 + c:113

"sudo chvt $(($XDG_VTNR+1))"
   m:0x8 + c:114

最初はリンクされた投稿の作成者が提案したもので、後者はxbindkeys -k私のシステムで実行して決定したものです。

キーバインディングが失敗し、xbindkeys調査のためにデーモンではなくモードで実行しました。実行中にAlt +左​​またはAlt +右を押すと、xbindkeys -n次のエラーが発生します。

sudo: no tty present and no askpass program specified

~/.xbindkeysrc有効なキーバインディングが発生するコマンドでコマンドを変更するとxterm -e sudo chvt ...(ただし、インスタンスを開き、xtermパスワードの入力を求められます)、欠落しているaが問題であるttyことを確認します。最初に呼び出さずにsudoin呼び出しを実装する方法は?.xbindkeysterminal

システムの詳細: debian v9.2., dwm v6.1, openbox v.3.6.1, xbindkeys v1.8.6, sudo v1.8.19p1

答え1

セキュリティに敏感なデフォルト値(または少なくともディストリビューションのデフォルトのsudoerに追加)は、アプリケーションの脆弱性によって特権の昇格が発生しないようにttyなしでsudoコマンドを許可しないことです。ショートカットを使用して実行されるコマンドにはttyがないため、実行されません。この設定はグローバルに無効にできますが、このコマンドを除くすべての項目に対して無効にすることをお勧めします。オプション名は次のとおりですrequiretty

Cmnd_Alias    CHVT = /bin/chvt
me            ALL = NOPASSWD: CHVT
Defaults!CHVT !requiretty

1つ目は!Cmnd_Aliasが続くことを意味し、2つ目!は論理NOT演算子を意味します。したがって、chvtを実行すると要件が免除される可能性があります。ここでは Cmnd_Alias を使用する必要はありませんが、オプションでコマンドを使用する場合、または両方のコマンドの要件を無効にする場合は、構文に必要です。

注:一部の他の設定では、これらの行の一部が表示されない場合があります。したがって、sudoersの最後に置くことをお勧めします。 OPも機能するためにこれを行う必要があるようです。%sudo ALL=(ALL:ALL) ALL

関連情報