Suponha que eu esteja esperando a conclusão de um comando de longa execução.
Antes eu conseguia digitar o segundo comando, e o texto digitado era preservado quando o primeiro comando era concluído e o prompt retornava (e até mesmo executava o segundo comando se eu tivesse pressionado Enter).
Isso não acontece mais e não me lembro de atualizar o zsh, o cliente iTerm Mac OS ou qualquer coisa no meu servidor Ubuntu.
Não tenho certeza do que pesquisar no Google, não consigo pensar em quais termos de pesquisa usar. E minhas tags podem ser enganosas. Espero que alguém possa me apontar a direção certa
Exemplo A: 2º comando executado
Desejado
$ sudo zfs create -o mountpoint=/media/me/disk pool_my/disk
(long pause)sudo chown me /media/me/disk<enter>
$ ls -ld /media/me/disk
drwxr-xr-x 2 me me 2 Sep 18 21:37 /media/sarnobat/videos_10G
Real
$ sudo zfs create -o mountpoint=/media/me/disk pool_my/disk
(long pause)sudo chown me:me /media/me/disk<enter>
$ ls -ld /media/me/disk
drwxr-xr-x 2 root root 2 Sep 18 21:37 /media/sarnobat/videos_10G
O 2º comando não foi executado.
Exemplo B: 2º texto de comando preservado
Desejado
$ sudo zfs create -o mountpoint=/media/me/disk pool_my/disk
(long pause)sudo chown me /med
$ sudo chown me /med
Real
$ sudo zfs create -o mountpoint=/media/me/disk pool_my/disk
(long pause)sudo chown me /med
$
O comando incompleto que comecei a digitar antes do comando anterior terminar desapareceu.
É
sudo
isso que consome a entrada prematura.Sua
use_pty
opção (emsudoers
) foi recentemente alterada para ser habilitada por padrão, para evitar ataques do tipo CVE-2005-4890. Presumo que seu sistema recebeu essa alteração recentemente, causando a mudança no comportamento.Com
use_pty
precisa haver um processo em execução (sudo
ele mesmo, ou um fork dele) que continue encaminhando dados para frente e para trás entre o "host" e o "guest" tty. Este design significa necessariamente que qualquer coisa que você digitar é imediatamente consumida e encaminhada para o que estiver em execução emsudo
. Se esse processo parar sem consumi-lo, ele será perdido. Comer sua entrada não é uma decisão deliberada desudo
, mas um efeito colateral necessário deste design.Você pode reverter para o comportamento antigo de não alocar um novo tty. Nesse caso,
sudo
não consome entrada prematura. No entanto, você pode estar sujeito a ataques envolvendoioctl(TIOCSTI)
, algo que hoje em dia está ficando obsoleto e removido dos sistemas Linux (não tenho certeza sobre o macOS, no entanto).Até onde eu entendo, dependendo do seu sistema, o problema de segurança pode ou não ser válido. Se o usuário
X
executar umsudo
para usuárioY
, é possível que um aplicativo malicioso, supostamente rodando como usuárioY
, tenha um efeito ruim no usuário,X
o que não queremos que aconteça. Neste cenário, é uma ameaça real.Presumivelmente, em alguns sistemas de usuário único, o único propósito do
sudo
é executar algumas ferramentas selecionadas com privilégios elevados (root) e, nesse caso, se a ferramenta em questão for maliciosa, todas as apostas já estarão perdidas. Nesse caso, ele está apenas abrindo outra porta onde muitas portas já estão abertas. Em tal configuração, eu me sentiria confortável desabilitando ause_pty
opção. Aviso: não assumo nenhuma responsabilidade. ( Atualização: veja também https://github.com/sudo-project/sudo/issues/338 )Muito obrigado por fazer essa pergunta! Fiquei incomodado por muitos e muitos anos consumindo
sudo apt-get
input prematuro, e agora você me fez investigar e entender o que está acontecendo :)