invocando sudo sem senha via xbindkeys

1

Eu tentei configurar as combinações de teclas para alterar o terminal virtual (VT) em X , conforme descrito em este post . Digitar sudo chvt $(($XDG_VTNR-1)) em um emulador de terminal altera adequadamente o VT. No entanto, acho que executar chvt com privilégios elevados funciona somente quando executado como um comando para um emulador de terminal (por exemplo, xterm -e ), um requisito que estou tentando contornar.

Para descrever minha configuração:

A seguinte linha foi adicionada a /etc/sudoers :

me    ALL=NOPASSWD:/bin/chvt

em que me é a saída de whoami . Eu também tentei variações nesta linha (por exemplo, me ALL=(ALL) NOPASSWD:/bin/chvt e me ALL=(ALL:ALL) NOPASSWD:/bin/chvt )

Para ~/.xbindkeysrc , adicionei associações de chaves:

"sudo chvt $(($XDG_VTNR-1))"
   alt + c:113

"sudo chvt $(($XDG_VTNR+1))"
   alt + c:114

ou

"sudo chvt $(($XDG_VTNR-1))"
   m:0x8 + c:113

"sudo chvt $(($XDG_VTNR+1))"
   m:0x8 + c:114

O primeiro foi sugerido pelo autor do post vinculado e o segundo foi determinado executando xbindkeys -k no meu sistema.

As ligações de chave falharam e eu executei xbindkeys no modo não daemon para investigar. Pressionar Alt + left ou Alt + right durante a execução de xbindkeys -n apresenta o seguinte erro:

sudo: no tty present and no askpass program specified

Alterar o comando em ~/.xbindkeysrc para xterm -e sudo chvt ... produz uma ligação de chave de trabalho (mas ao custo de abrir uma instância xterm e solicitar uma senha), o que confirma que a falta de tty é a questão. Como a invocação de sudo in .xbindkeys pode ser obtida sem primeiro invocar um terminal ?

Detalhes do sistema: debian v9.2., dwm v6.1, openbox v.3.6.1, xbindkeys v1.8.6, sudo v1.8.19p1

    
por user001 30.10.2017 / 20:33

1 resposta

1

O padrão sensível à segurança (ou pelo menos colocado nos sudoers padrão de sua distribuição) é não permitir um comando sudo sem tty, a fim de evitar o escalonamento de privilégios de uma violação em um aplicativo. O comando executado com um atalho não tem tty, por isso não será executado. Você pode desativar essa configuração globalmente, mas é melhor desativá-la para tudo, exceto esse comando. A opção é denominada requiretty :

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

O primeiro ! significa o que segue é um Cmnd_Alias, o segundo ! é o operador lógico. Portanto, executar o chvt é isento de requiretty. Aqui o uso de Cmnd_Alias não era necessário, mas você deveria usar um comando com opções, ou querer desabilitar requiretty para dois comandos que a sintaxe exige.

NOTA: Algumas outras configurações podem cancelar algumas dessas linhas. Portanto, colocá-lo por último em sudoers pode ser necessário. Parece que o OP também precisava fazer isso para que funcionasse, talvez por causa de %sudo ALL=(ALL:ALL) ALL

    
por 30.10.2017 / 21:04