Sudo

通過 xbindkeys 呼叫無密碼 sudo

  • October 30, 2017

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/chvtme 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

將命令更改~/.xbindkeysrcxterm -e sudo chvt ...生成有效的密鑰綁定(但以打開xterm實例並提示輸入密碼為代價),這確認缺少 atty是問題所在。在不先呼叫 a的情況下如何呼叫sudoin ?.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

引用自:https://unix.stackexchange.com/questions/401466