Ниже приведен образ процесса, который я использовал для создания пользователя на bash в Linux.
Я понимаю, что пароль не должен отображаться в целях безопасности, но что я имею в виду, почему звездочки (или введенные мной символы) не отображаются?
Ниже приведен образ процесса, который я использовал для создания пользователя на bash в Linux.
Я понимаю, что пароль не должен отображаться в целях безопасности, но что я имею в виду, почему звездочки (или введенные мной символы) не отображаются?
Ответы:
Потому что так мы поступаем в * nix land. :) Это дает немного дополнительной безопасности, не показывая кучу звездочек. Таким образом, тот, кто видит ваш экран, не может увидеть длину вашего пароля.
Но я должен признать, что немного страшно не получать никаких откликов при вводе пароля, особенно если у вас плохая клавиатура. Таким образом, большинство диалоговых окон с паролями в системах * nix дают некоторую обратную связь, например, с использованием звездочек или, что более часто, ⬤. А некоторые даже отображают каждый символ по мере того, как вы его *
печатаете , но затем немедленно заменяете его на a или ⬤, но это не так хорошо, если кто-то может смотреть через ваше плечо. Или, если у них есть устройство, которое может принимать и декодировать видеосигнал, отправляемый с вашего компьютера на монитор.
stty -echo
Какой самый простой способ скрыть пользовательский ввод?
Не отображать это!
Скрывать пароли, когда они вводятся, - старая традиция. Это имеет смысл с точки зрения безопасности в большинстве случаев: если кто-то смотрит через ваши плечи, вы не хотите, чтобы было легко увидеть, что вы печатаете. (Некоторые современные правила безопасности, например, 1 2 3 4 5 , рекомендуют иметь возможность сделать пароль видимым, потому что это позволяет пользователю иметь возможность выбирать более сложные пароли и быть уверенным, что они не будут тратить свое время на исправление невидимого опечатки. Наибольший риск - не серфинг на плечах, а угадывание грубой силы, возможно, в автономном режиме.)
Решив, что пароль должен быть скрыт, исполнители должны были решить, как это сделать. Терминал имеет режим, в котором отображается пользовательский ввод (эхо-сигнал включен), и режим, в котором пользовательский ввод не отображается (эхо-сигнал выключен). Режим эхо-отключения в некотором роде существует: это режим, в котором терминал не выполняет дополнительную работу по отображению пользовательского ввода. Этот режим также должен существовать для приложений, в которых ввод ключа не вставляет этот символ, а вместо этого вызывает ярлык приложения, связанный с этим ключом. Таким образом, такие команды, как passwd
просто установить терминал в режим эха, пока они читают пароль.
Печать звездочек для каждого символа потребует дополнительной работы по внедрению только для сравнительно небольшого преимущества, которое разработчики passwd
команды не хотели делать. Там нет режима терминала для печати звездочек, потому что это будет очень специализированная функция, полезная только при вводе паролей.
Кстати, если вы хотите видеть свой пароль при его изменении, вы можете использовать его cat | passwd
(по крайней мере, в некоторых системах - в некоторых версиях passwd
требуется опция, подобная, cat | passwd --stdin
а в некоторых вообще ее не принимают). (Вы можете даже сделать { echo 'current password'; echo 'new password'; echo 'new password'; } | passwd
, но не делайте этого: это сохранит пароли в истории оболочки, из-за чего существует гораздо больший риск утечки.) Для этого нужно подготовить команды, которые читают пароль из терминала, а не что-либо еще. их стандартный ввод, такой как sudo
или ssh
, является более сложным; если у вас есть графический интерфейс, вы можете использовать ssh-askpass, который показывает, сколько символов вы набрали ( SUDO_ASKPASS=/usr/bin/ssh-askpass sudo -A
для sudo; для ssh это сложно, когда вы вызываете его из терминала).
Создание пароля невидимым делает его более безопасным, так как длина пароля не может быть видна другим. Это исключает риск того, что другие попытаются угадать пароль по его длине и войти в свою учетную запись.