web-dev-qa-db-ja.com

xbindkeysを介してパスワードなしのSudoを呼び出す

この投稿 で説明されているように、Xの仮想端末(VT)を変更するためのキーバインディングを設定しようとしました。ターミナルエミュレータにSudo chvt $(($XDG_VTNR-1))と入力すると、VTが適切に変更されます。ただし、昇格された特権でchvtを実行すると、ターミナルエミュレーター(_xterm -e_など)へのコマンドとして実行された場合にのみ機能することがわかりました。これは、回避しようとしている要件です。

私のセットアップを説明するには:

次の行が_/etc/sudoers_に追加されました。

_me    ALL=NOPASSWD:/bin/chvt
_

ここで、mewhoamiの出力です。この行のバリエーションも試しました(例: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を実行しました。 _xbindkeys -n_の実行中にAlt +左​​またはAlt +右を押すと、次のエラーが発生します。

_Sudo: no tty present and no askpass program specified
_

_~/.xbindkeysrc_のコマンドを_xterm -e Sudo chvt ..._に変更すると、有効なキーバインディングが生成されます(ただし、xtermインスタンスを開き、パスワードの入力を求められます)。これにより、ttyの欠如が問題であることが確認されます。最初にSudoを呼び出さずに、_.xbindkeys_でterminalを呼び出すにはどうすればよいですか?

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

1
user001

セキュリティに配慮したデフォルト(または少なくともディストリビューションのデフォルトのsudoerに入れる)は、アプリケーションの違反による特権の昇格を防ぐために、ttyなしでSudoコマンドを許可しないことです。ショートカットを使用して実行するコマンドにはttyがないため、実行されません。この設定をグローバルに無効にすることもできますが、このコマンド以外のすべての設定を無効にすることをお勧めします。オプションの名前はrequirettyです。

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

最初の_!_は、次がCmnd_Aliasであることを意味し、2番目の_!_は論理否定演算子です。したがって、chvtの実行はrequirettyから免除されます。ここでは、Cmnd_Aliasを使用する必要はありませんでしたが、オプション付きのコマンドを使用する場合、または2つのコマンドのrequirettyを無効にする場合は、構文で必要です。

注:他の設定によっては、これらの行の一部がキャンセルされる場合があります。したがって、sudoersの最後に配置する必要がある場合があります。おそらく%Sudo ALL=(ALL:ALL) ALLのために、OPもこれを機能させるためにこれを行う必要があったようです。

1
A.B