通過 xbindkeys 呼叫無密碼 sudo
X
如本文所述,我嘗試設置用於更改虛擬終端 (VT) 的鍵綁定。鍵入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+left 或 Alt+rightxbindkeys -n
會出現以下錯誤:sudo: no tty present and no askpass program specified
將命令更改
~/.xbindkeysrc
為xterm -e sudo chvt ...
生成有效的密鑰綁定(但以打開xterm
實例並提示輸入密碼為代價),這確認缺少 atty
是問題所在。在不先呼叫 a的情況下如何呼叫sudo
in ?.xbindkeys``terminal
系統詳細資訊:debian v9.2.、dwm v6.1、openbox v.3.6.1、xbindkeys v1.8.6、sudo v1.8.19p1
安全敏感的預設設置(或至少放在您的發行版的預設 sudoers 中)是不允許沒有 tty 的 sudo 命令,以防止權限升級因應用程序中的漏洞而升級。使用快捷方式執行的命令沒有 tty,因此不會執行。您可以全域禁用此設置,但最好對除此命令之外的所有內容禁用它。該選項名為
requiretty
:Cmnd_Alias CHVT = /bin/chvt me ALL = NOPASSWD: CHVT Defaults!CHVT !requiretty
第一個
!
表示後面是 Cmnd_Alias,第二個!
是邏輯非運算符。所以執行 chvt 是免除 requiretty 的。這裡不需要使用 Cmnd_Alias,但如果您使用帶有選項的命令,或者想要禁用語法要求的兩個命令的 requiretty。注意:其他一些設置可能會取消其中一些行。因此,可能需要將它放在最後一個 sudoers 中。看來 OP 也需要這樣做才能使其正常工作,可能是因為
%sudo ALL=(ALL:ALL) ALL