Terminal

su 命令如何屏蔽/保護我的密碼不顯示在螢幕上?

  • March 17, 2016

抱歉,如果這是一個抽象的問題 - 我會盡量具體。

當我在 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”中,你必須使用一些惡作劇。

引用自:https://unix.stackexchange.com/questions/270505