Какую ценность соли я должен дать crypt, чтобы создать нового пользователя в Linux?
Я пишу Perl-скрипт, который создаст нового пользователя (в Ubuntu).
Это будет необходимо сделать шаг по линии
$encrypted_password = crypt ($password, $salt);
system ("useradd -d $home -s /bin/bash -g $group -p $encrypted_password $name");
Какой должна быть стоимость $salt
быть? Примеры в Интернете, кажется, используют произвольные значения, но если зашифрованный пароль будет проверен на соответствие тому, что вводит пользователь, то ядро должно хешировать ввод с той же солью, чтобы пройти сравнение.
Этот сайт утверждает, что соль закодирована в выводе crypt
, но это, очевидно, не соответствует действительности.
В Perl вывод
print crypt("foo", "aa");
print crypt("foo", "aabbcc");
print crypt("foo", "aa1kjhg23gh43jhgk32kh325423g");
print crypt("foo", "abbbcc");
является
aaKNIEDOaueR6
aaKNIEDOaueR6
aaKNIEDOaueR6
abQ9KY.KfrYrc
Помимо одинаковых хэшей из разных солей, что является подозрительным, кажется, что используются только первые два символа соли. Это не имеет смысла с точки зрения безопасности. Кроме того, вывод не в формате, как заявлено в ссылке выше.
Так какое значение соли следует использовать при шифровании пароля для useradd
?
1 ответ
Вся информация о crypt
находится в perldoc -f склепе.
Вот часть, которая отвечает на ваш вопрос:
При выборе новой соли создайте случайную двухсимвольную строку, символы которой взяты из набора [./0-9A-Za-z] (например, join '', ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[ранд 64, ранд 64]). Этот набор символов является лишь рекомендацией; Символы, разрешенные в соли, зависят исключительно от библиотеки crypt вашей системы, и Perl не может ограничить то, что принимает соль crypt().
Надеюсь, это поможет.