為什麼我輸入的密碼不可見?
下面是我在 Linux 中在 bash 上創建使用者的過程。
$ sudo useradd Alexandra $ sudo passwd Alexandra Enter new UNIX password: Enter new UNIX password: passwd: password updated successfully
我知道出於安全目的不應顯示密碼,但我的意思是,為什麼不出現星號(或我輸入的字元)?
因為這就是我們在 *nix 領域做事的方式。:)通過不顯示一堆星號,它提供了一點額外的安全性。這樣,看到您螢幕的人就看不到您的密碼長度。
但是我必須承認,當你輸入密碼時沒有得到任何回饋有點可怕,特別是如果你的鍵盤壞了。因此,*nix 系統上的大多數 GUI 密碼對話框都會給你一些回饋,例如使用星號,或更常見的是 ⬤。有些甚至在您鍵入時顯示每個字元,然後立即將其替換為 a
*
或 ⬤,但如果有人可能正在看著您,那就不太好了。或者,如果他們有一個可以接收和解碼從您的電腦發送到顯示器的影片信號的設備。
隱藏使用者輸入的最簡單方法是什麼?
不顯示!
在輸入密碼時隱藏密碼是一種古老的傳統。在大多數情況下,從安全的角度來看,這是有道理的:如果有人在你的肩膀上看著,你不想讓它很容易看到你正在輸入的內容。(一些現代安全指南,例如1 2 3 4 5確實建議選擇使密碼可見,因為這允許使用者能夠選擇更複雜的密碼並確信他們不會花時間修復看不見錯別字。最大的風險不是肩膀衝浪,而是暴力猜測,可能離線。)
決定隱藏密碼後,實施者必須決定如何操作。終端具有顯示使用者輸入的模式(回顯打開)和不顯示使用者輸入的模式(回顯關閉)。echo off 模式在某種程度上具有內在的存在:這是終端不做額外工作來回顯使用者輸入的模式。對於鍵入鍵不插入該字元但呼叫綁定到該鍵的某些應用程序快捷方式的應用程序,此模式也必須存在。因此,諸如
passwd
在讀取密碼時將終端設置為回顯模式之類的命令。為每個字元列印星號將需要額外的實現工作,但收益相對較小,而該
passwd
命令的實現者並不想這樣做。沒有用於列印星號的終端模式,因為這將是一項非常專業的功能,僅在輸入密碼時才有用。順便說一句,如果您想在更改密碼時看到您的密碼,您可以使用
cat | passwd
(至少在某些系統上 - 有些版本passwd
需要類似的選項cat | passwd --stdin
,有些版本根本不接受)。(您甚至可以這樣做{ echo 'current password'; echo 'new password'; echo 'new password'; } | passwd
,但不要這樣做:它會將密碼保存在 shell 歷史記錄中,從中洩漏的風險更大。)使用從終端讀取密碼而不是從終端讀取密碼的命令進行安排它們的標準輸入,例如sudo
orssh
,更複雜;如果你有一個可用的 GUI,你可以使用 ssh-askpass 來顯示你輸入了多少個字元(SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -A
對於 sudo;對於 ssh,當你從終端呼叫它時會很複雜)。