Назад | Перейти на главную страницу

Пользователь не может войти в систему после того, как я вручную установил хеш MD5

Я использую Puppet для управления паролями пользователей. (Да, я знаю, что LDAP лучше, но мне было сказано выше использовать Puppet.) У меня есть этот класс, который при запуске от имени root меняет пароль bob на «bobs_new_password». В идеале он должен запрашивать новый пароль, когда Боб запускает его, но я смогу добавить эту функцию позже. Когда я запускаю его как root с puppet agent --test, он говорит, что все идет хорошо, и уведомляет меня о новом хэше, поэтому я знаю, что он был правильно установлен в /etc/shadow файл. Прямо сейчас я работаю только с тестовыми пользователями на виртуальных машинах, поэтому меня не беспокоит угроза безопасности, связанная с уведомлением о хэше; эта строка, очевидно, будет удалена для рабочей версии кода. На данный момент у меня есть следующее:

class pwdchange ($newpwd = 'bobs_new_password', $targetuser = "bob") {
  $temp = inline_template("<%= Digest::MD5.digest(scope.lookupvar('newpwd'))%>")
   $hashtypeidentifier = '$1$' #'$1' for MD5, '$6' for sha512.
   user {"$targetuser":
     ensure   => present,
     password => "${hashtypeidentifier}${temp}",
  }
   notify {"${temp}":}
}

Однако, когда я перехожу на ssh в виртуальную машину как bob, ни старый пароль, ни новый пароль не принимаются. Что я делаю не так? Почему он не принимает ни один из паролей и что я могу сделать, чтобы это исправить?

Пароли MD5 в теневом файле имеют формат $1$salt$hash, Я не вижу соли в вашем коде.

Смотрите также Как сгенерировать пароль, совместимый с / etc / shadow для Ubuntu 10.04?

Также Ruby's crypt() функция, которая сгенерирует для вас полную строку теневого файла.