Risposte:
In realtà, una tipica chiamata di sudonon legge affatto la password stdin. Al contrario, sudoaccederà direttamente al terminale di controllo (a ttyo pty, tramite il /dev/ttyfile speciale) e genererà il prompt e leggerà direttamente i caratteri. Questo può essere visto nel tgetpass.cfile nel sudosorgente.
Esistono alcuni altri scenari:
askpassviene specificato un programma, ad es. Nel -Aparametro, verrà richiamato quel programma.sudodi leggere stdin, ad esempio con il -Sflag - e scriverà anche il prompt stderr. Questo è il caso in cui si applica la risposta di MadHatter .ttydisponibile
visiblepwflag in sudoers), sudoverrà segnalato un errore:no tty present and no askpass program specifiedsudotornerà all'utilizzo stdine stderranche se non è stato specificamente richiesto. La risposta di MadHatter si applicherà anche qui.La pipe collega lo sudo catstdout allo lessstdin, quindi lo sudo catstdin non è interessato e può ricevere la password.
Per quanto riguarda il prompt, si spegne sullo sudo catstderr; in bash, prova a reindirizzare questo insieme a stdout, usando
sudo cat /etc/resolv.conf |& less
e vedere quanto è diversa la risposta.
sudostdin è ancora collegato al terminale con il comando di esempio, questo non è direttamente rilevante per come ottiene la sua password: per impostazione predefinitasudonon richiederà le password tramite stdin né mostrerà il prompt tramitestderr- tu può provare2>/dev/nulla confermarlo. Invece,sudoaccede direttamente a tty.