Respostas:
Na verdade, uma chamada típica de sudo
não lê a senha stdin
. Em vez disso, sudo
acessará diretamente o terminal de controle (a tty
ou pty
, através do /dev/tty
arquivo especial) e emitirá o prompt e lerá os caracteres diretamente. Isso pode ser visto no tgetpass.c
arquivo na sudo
fonte.
Existem alguns outros cenários:
askpass
programa for especificado, por exemplo, no -A
parâmetro, esse programa será chamado.sudo
a leitura de stdin
, por exemplo, com a -S
bandeira - e ela também escreverá o prompt em stderr
. É o caso em que a resposta do MadHatter se aplica.tty
disponível
visiblepw
sinalizador sudoers
), sudo
será relatado um erro:no tty present and no askpass program specified
sudo
voltará a usar stdin
e, stderr
mesmo que não tenha sido solicitado especificamente. A resposta do MadHatter também será aplicada aqui.O pipe conecta sudo cat
o stdout ao less
stdin, para que sudo cat
o stdin não seja afetado e possa receber a senha.
Quanto ao prompt, ele sai no sudo cat
stderr; no bash, tente redirecioná-lo junto com stdout, usando
sudo cat /etc/resolv.conf |& less
e veja quão diferente é a resposta.
sudo
o stdin ainda está conectado ao terminal com o comando de exemplo, isso não é diretamente relevante para a maneira como obtém sua senha: por padrãosudo
, não solicitará senhas via stdin nem exibirá o prompt viastderr
- você pode tentar2>/dev/null
confirmar isso. Em vez disso,sudo
acessa diretamente o tty.