Na verdade, uma chamada típica de sudo
não lê a senha de stdin
. Em vez disso, sudo
acessará diretamente o terminal de controle (um tty
ou pty
, através do arquivo /dev/tty
special) e emitirá o prompt e lerá os caracteres diretamente. Isso pode ser visto no arquivo tgetpass.c
na sudo
source.
Existem alguns outros cenários:
- Se um programa
askpass
for especificado, por exemplo no-A
param, esse programa será invocado. - Caso contrário, solicite especificamente
sudo
para lerstdin
, por exemplo com o-S
flag - e também gravará o prompt parastderr
. Este é o caso em que a resposta de MadHatter se aplica. - Caso contrário, se não houver
tty
disponível- Se o eco da senha estiver desabilitado (por padrão, controlado pelo sinal
visiblepw
emsudoers
),sudo
informará um erro:no tty present and no askpass program specified
- Caso contrário,
sudo
voltará a usarstdin
estderr
, mesmo que não tenha sido solicitado especificamente. A resposta de MadHatter também será aplicada aqui.
- Se o eco da senha estiver desabilitado (por padrão, controlado pelo sinal