Это настраивающееся*, но, по умолчанию, "sudo" просит у Вас Ваш пароль. Это просто пытается удостовериться, что это - Вы, не кто-то использующий Вашу клавиатуру, в то время как Вы получали кофе.
В отличие от этого, "su корень" просите Вы пароль root.
*Если targetpw в/etc/sudoers является ложью (значение по умолчанию), "sudo" просит у Вас Ваш пароль. Если это верно, то "sudo" просит у Вас пароль корня или при определении некоторого другого пользователя с "-u" опцией, паролем того пользователя.
openssl
stdin представляет собой поток байтов.
Содержимое $ user
представляет собой последовательность байтов, отличных от 0 (которые могут образовывать или не формировать допустимые символы в UTF-8 или другом наборе / кодировке символов).
printf% s "$ user"
stdout - это поток байтов.
printf %s "$user" | openssl dgst -sha256 –binary
Соединит стандартный вывод printf
со стандартным вводом openssl
. Стандартный вывод openssl
- это еще один поток байтов.
Теперь, если вы вводите $ user
от пользователя с терминала, пользователь будет вводить его, нажимая клавиши на своей клавиатуре. Терминал отправит соответствующие символы (как написано на этикетке ключа), закодированные в настроенном наборе символов. Обычно этот набор символов будет основан на наборе символов в текущей локали. Вы можете узнать, что это такое, с помощью карты символов локали
.
Например, с таким языковым стандартом, как fr_FR.iso885915@euro
, и xterm
, запущенным в этом языковом стандарте, charmap языкового стандарта
вернет ISO -8859-15
.Если пользователь вводит stéphane
в качестве имени пользователя, этот é
, вероятно, будет закодирован как байт 0xe9
, потому что так он определен в ISO-8859 -15
набор символов.
Если вы хотите, чтобы этот é
был закодирован как UTF-8 перед переходом в openssl
, вы должны использовать iconv
для преобразования этого ] 0xe9
байт в соответствующей кодировке в UTF-8 (два байта: 0xc3
0xa9
):
IFS= read -r user # read username from stdin as a sequence of bytes
# assumed to be encoded from characters as per the
# locale's encoding
printf %s "$user" |
iconv -t utf-8 | # convert from locale encoding to UTF-8
openssl dgst -sha256 –binary