Какую ценность соли я должен дать 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().

Надеюсь, это поможет.

Другие вопросы по тегам