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
ことを確認します。最初に呼び出さずにsudo
in呼び出しを実装する方法は?.xbindkeys
terminal
システムの詳細: 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