zsh - expanda completamente o caminho binário em <tab>

10

No meu comportamento atual do zsh, pressionar a tecla tab após digitar "sudo" apenas adiciona um espaço.

$ sudo ...

O que eu realmente quero é que a guia se expanda completamente para o caminho do binário que está prestes a executar quando eu clicar na guia, permitindo que eu veja o que será executado:

$ /usr/bin/sudo ...

O objetivo é proteger contra o caso em que o usuário local na minha máquina é invadido, uma entrada adicionada à minha $PATHvariável e 'sudo' executa um programa malicioso, o que seria uma escalação fácil para o root.

Todos
fonte
Há outra solução que não envolve a guia de religação. Anexe o nome do comando com =e pressione tab após o comando, e ele expandirá o nome do comando no caminho completo.
22613 Mischa Arefiev

Respostas:

7

Use o bindkeycomando builtin para vincular chaves aos comandos Zsh, desta forma:

bindkey "^I" expand-cmd-path 

Onde "^I"está Tab. Você pode simplesmente soltar esta linha no seu ~/.zshrcarquivo. Aviso: interromperá o preenchimento automático de argumentos.

Mischa Arefiev
fonte
Felicidades! Claramente, essa não é uma solução ideal, portanto, vinculei-a ao Ctrl-O. No entanto, não há muitos binários que recebem entradas de senha (sudo, ssh, gpg, ...), por isso estou feliz em pressionar Ctrl-O sempre que estiver usando um deles. não resolve todo o problema, pois qualquer pessoa com acesso à minha conta pode subvertê-lo por meio de .zshrc ou xmonad.hs, mas me leva até lá!
Ali