Прочитайте мудрые слова из:
Цитирую:
Ничто из того, что вы можете сделать в bash, может не сработать. passwd (1) не читает со стандартного ввода. Это намеренно. Это для вашей защиты. Пароли никогда не предназначались для введения в программы или генерирования программами. Они должны были быть введены только пальцами реального человека с функциональным мозгом и никогда и нигде не записываться.
Тем не менее, мы получаем множество пользователей, спрашивающих, как они могут обойти 35-летнюю безопасность Unix.
Далее объясняется, как правильно установить пароль shadow(5)
, и показан GNU- I-only-care-about-security-if-it-not-make-me- Подумайте слишком много - способ злоупотребления passwd(1)
.
Наконец, если вы собираетесь использовать глупое расширение GNU passwd (1) --stdin
, , не передавайте пароль, помещая его в командную строку.
echo $mypassword | passwd --stdin # Eternal Sin.
echo "$mypassword" | passwd --stdin # Eternal Sin, but at least you remembered to quote your PE.
passwd --stdin <<< "$mypassword" # A little less insecure, still pretty insecure, though.
passwd --stdin < "passwordfile" # With a password file that was created with a secure `umask(1)`, a little bit secure.
Последнее лучшее, что вы можете сделать с GNU passwd
. Хотя я все еще не рекомендовал бы это.
Ввод пароля в командной строке означает, что любой, у кого есть даже самый отдаленный намек на доступ к ящику, может следить за ps
или таким и украсть пароль. Даже если вы думаете, что ваша коробка безопасна; это то, что вы должны действительно привыкнуть избегать любой ценой (да, даже затратами на то, чтобы выполнить работу немного сложнее).