Почему введенный пароль не виден?

39

Ниже приведен образ процесса, который я использовал для создания пользователя на bash в Linux.

Создание пользователя и назначение пароля в bash

Я понимаю, что пароль не должен отображаться в целях безопасности, но что я имею в виду, почему звездочки (или введенные мной символы) не отображаются?

Kaiylar
источник
4
всякий раз, когда у вас есть вопрос о Linux, ответ - безопасность.
Кац
IBM Notes делает эту странную вещь, где они отображают случайные звездочки для каждого символа, который вы вводите для пароля. Очень запутанно.
1
Межсайтовый боян: ux.stackexchange.com/q/39774/11086
Вим
1
также связано: security.stackexchange.com/q/35133/3945
wim

Ответы:

43

Потому что так мы поступаем в * nix land. :) Это дает немного дополнительной безопасности, не показывая кучу звездочек. Таким образом, тот, кто видит ваш экран, не может увидеть длину вашего пароля.

Но я должен признать, что немного страшно не получать никаких откликов при вводе пароля, особенно если у вас плохая клавиатура. Таким образом, большинство диалоговых окон с паролями в системах * nix дают некоторую обратную связь, например, с использованием звездочек или, что более часто, ⬤. А некоторые даже отображают каждый символ по мере того, как вы его *печатаете , но затем немедленно заменяете его на a или ⬤, но это не так хорошо, если кто-то может смотреть через ваше плечо. Или, если у них есть устройство, которое может принимать и декодировать видеосигнал, отправляемый с вашего компьютера на монитор.

PM 2Ring
источник
5
... с помощьюstty -echo
Джефф Шаллер
7
Этот ответ неплох, но ИМХО Жиль дал реальный ответ. Практически наверняка разработчики не думали о «дополнительной безопасности» и определенно не думали о взаимодействии с пользователем. Они сделали это так, как сделали, потому что это было дешево и легко сделать таким образом. Потом, позже, мы стали ожидать, что это продолжит работать таким образом ...
Селада
2
@Celada: справедливо. FWIW, я уже одобрил отличный ответ Жиля.
PM 2Ring
2
@Celada Дополнительная безопасность, возможно, не привела к первоначальному решению ничего не отображать, но я всегда считал это преимуществом и вижу, как другие люди, думающие таким образом, могли послужить веской причиной для сохранения этого.
Монти Хардер
1
Я думаю, что краткое отображение последнего набранного символа - это в основном мобильный подход, возможно потому, что набор текста на крошечной экранной клавиатуре более подвержен ошибкам. Я не думаю, что когда-либо видел это в настольных приложениях.
Бармар
82

Какой самый простой способ скрыть пользовательский ввод?

Не отображать это!

Скрывать пароли, когда они вводятся, - старая традиция. Это имеет смысл с точки зрения безопасности в большинстве случаев: если кто-то смотрит через ваши плечи, вы не хотите, чтобы было легко увидеть, что вы печатаете. (Некоторые современные правила безопасности, например, 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 это сложно, когда вы вызываете его из терминала).

Жиль "ТАК - перестань быть злым"
источник
1
На мой взгляд, это лучший ответ, и на самом деле он очень полезен. Спасибо за разъяснение моей веры и расширение ^, ^ заслуживает голосования!
DankyNanky
4
Обработчик терминала заботится о простых функциях редактирования (например, backspace) и буферизации строки. Строка, прочитанная с помощью функции fgets (), не возвращается, пока не будет нажата кнопка ввода. так что печать звездочек сложнее. Если бы вы читали его по одному символу за раз и отображали звездочки, вы потеряли бы функциональность возврата на задний план или потребовали бы дополнительных усилий для его поддержки.
Jasen
1
Когда я углубляюсь в исторический аспект этого вопроса, мне интересно, как это относится ко времени, когда tty на самом деле ссылался на телетайп ...
Джаспер
1
Существуют способы выполнения команды без ее сохранения в истории команд. Смотрите, например, Выполнить команду, не сохраняя ее в истории .
CVn
2
Приложение: Терминалы, которые «выполняют дополнительную работу», чтобы повторить пользовательский ввод, являются так называемыми «полнодуплексными» терминалами. В Ye Olde Days были также «полудуплексные» терминалы, где символ отображался сразу после ввода, а ОС не отправляла его обратно в терминал для отображения. Если я правильно помню, эти терминалы не могли отключить эхо.
Алексис
3

Создание пароля невидимым делает его более безопасным, так как длина пароля не может быть видна другим. Это исключает риск того, что другие попытаются угадать пароль по его длине и войти в свою учетную запись.

Кодер AP
источник
Клавиатуры, как правило, издают некоторый шум при использовании, который можно услышать или записать для последующего анализа для определения длины пароля. Некоторые модели клавиатур тише, чем другие . Кроме того, некоторые клавиши, как правило, издают разные шумы (например, пробел, ввод и т. Д.). В этом контексте также подумайте, насколько важно держать в секрете длину своего пароля? по информационной безопасности .
CVn
@ Michael Kjörling: То, что вы сказали, - это уровень безопасности на продвинутом уровне, который следует учитывать (особенно для тех, чьи слуховые способности действительно хороши, кто может узнать длину пароля через шум клавиатуры). Но это аппаратная проблема, которую необходимо учитывать на аппаратном уровне, и поэтому теперь у нас есть клавиатура с сенсорным экраном, которая не создает шум.
Кодер AP