Terminal
su 命令如何屏蔽/保護我的密碼不顯示在螢幕上?
抱歉,如果這是一個抽象的問題 - 我會盡量具體。
當我在 bash shell 並通過 切換到另一個帳戶時
su - foo
,系統會提示我輸入密碼。我在此密碼提示下鍵入的字元從螢幕上隱藏,不知道我正在鍵入多少字元或它們是什麼。bash(或一般的 Linux)如何做到這一點?
您鍵入的內容會顯示在終端中,因為終端會“回顯”它。當要求輸入密碼時,回顯被關閉。另請參閱
help read
及其-s
選項。
我相信
su
可能打開/dev/tty
了,將終端驅動程序設置更改為不回顯,然後從/dev/tty
文件描述符中讀取。為了測試這個信念,我
strace -o su.out su -
在我的 Arch linux 筆記型電腦上執行。輸出的相關部分strace
:ioctl(0, SNDCTL_TMR_CONTINUE or TCSETSF, {B38400 opost isig icanon -echo ...}) = 0 write(2, "Password: ", 10) = 10 read(0, "hahanotthis\n", 511) = 7 ioctl(0, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig icanon echo ...}) = 0
我不是 100% 錯的。
su
實際上是從標準輸入讀取的,但它確實使用終端控制項關閉了標準輸入上的回顯ioctl()
。輸入密碼su
後,重新打開回顯,再次使用ioctl()
系統呼叫。我知道其他一些程序,
ftp
特別是客戶端,確實使用/dev/tty
讀取密碼,這意味著你不能在命令行上輸入密碼,或者在“here document”中,你必須使用一些惡作劇。