Risposte:
In realtà, una tipica chiamata di sudo
non legge affatto la password stdin
. Al contrario, sudo
accederà direttamente al terminale di controllo (a tty
o pty
, tramite il /dev/tty
file speciale) e genererà il prompt e leggerà direttamente i caratteri. Questo può essere visto nel tgetpass.c
file nel sudo
sorgente.
Esistono alcuni altri scenari:
askpass
viene specificato un programma, ad es. Nel -A
parametro, verrà richiamato quel programma.sudo
di leggere stdin
, ad esempio con il -S
flag - e scriverà anche il prompt stderr
. Questo è il caso in cui si applica la risposta di MadHatter .tty
disponibile
visiblepw
flag in sudoers
), sudo
verrà segnalato un errore:no tty present and no askpass program specified
sudo
tornerà all'utilizzo stdin
e stderr
anche se non è stato specificamente richiesto. La risposta di MadHatter si applicherà anche qui.La pipe collega lo sudo cat
stdout allo less
stdin, quindi lo sudo cat
stdin non è interessato e può ricevere la password.
Per quanto riguarda il prompt, si spegne sullo sudo cat
stderr; in bash, prova a reindirizzare questo insieme a stdout, usando
sudo cat /etc/resolv.conf |& less
e vedere quanto è diversa la risposta.
sudo
stdin è ancora collegato al terminale con il comando di esempio, questo non è direttamente rilevante per come ottiene la sua password: per impostazione predefinitasudo
non richiederà le password tramite stdin né mostrerà il prompt tramitestderr
- tu può provare2>/dev/null
a confermarlo. Invece,sudo
accede direttamente a tty.