Yanıtlar:
Aslında, tipik bir çağırma sudo
parolayı hiç okumaz stdin
. Bunun yerine, sudo
kontrol terminaline (a tty
veya pty
, /dev/tty
özel dosya aracılığıyla ) doğrudan erişecek ve istemi çıktıracak ve karakterleri doğrudan okuyacaktır. Bu tgetpass.c
, sudo
kaynaktaki dosyada görülebilir .
Birkaç başka senaryo var:
askpass
program belirtilirse, örneğin -A
param içerisinde, o program çağrılır.sudo
okuma talebinde bulunursanız - ve ayrıca soruyu da yazar . MadHatter'ın cevabının geçerli olduğu durum budur.stdin
-S
stderr
tty
mevcut
değilsevisiblepw
bayrakla kontrol edilir sudoers
) sudo
bir hata bildirir:no tty present and no askpass program specified
sudo
kullanmaya geri düşecek stdin
ve stderr
bunun özel olarak talep edilmese dahi. MadHatter'ın cevabı da burada geçerli olacak.Boru sudo cat
stdout'unu stdin'e bağlar less
, bu nedenle sudo cat
stdin etkilenmez ve şifreyi alabilir.
İstemi gelince, sudo cat
stderr üzerinde gider ; bash’de, bunu kullanarak stdout ile yeniden yönlendirmeyi deneyin.
sudo cat /etc/resolv.conf |& less
ve cevabın ne kadar farklı olduğunu görün.
sudo
stdin'in hala '' '' '' '' '' komutu '' '' '' '' '' '' '' '' '' '' '' 'W-G--B -B-BFBF \' ' Bu cevap doğru stdin' s hala terminal komutuna example komutu ile bağlı olsa da, bu onun şifresini nasıl doğrudan aldıkları ile doğrudan ilgili değildir: varsayılansudo
olarak stdin üzerinden şifre istemeyecek ya da komut istemi göstermeyecektirstderr
- siz2>/dev/null
Bunu doğrulamaya çalışabilirim . Bunun yerine,sudo
doğrudan tty'ye erişir.