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/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+왼쪽 또는 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

첫 번째는 !Cmnd_Alias가 뒤에 오는 것을 의미하고, 두 번째 !는 논리적 NOT 연산자를 의미합니다. 따라서 chvt를 실행하면 요구 사항이 면제될 수 있습니다. 여기서는 Cmnd_Alias를 사용할 필요가 없지만 옵션과 함께 명령을 사용하거나 두 명령의 요구 사항을 비활성화하려는 경우 구문에 필요합니다.

참고: 일부 다른 설정에서는 이러한 줄 중 일부가 표시되지 않을 수 있습니다. 따라서 sudoers 끝에 넣는 것이 좋습니다. OP도 작동하려면 이 작업을 수행해야 하는 것 같습니다.%sudo ALL=(ALL:ALL) ALL

관련 정보