-p, --password PASSWORD Используйте зашифрованный пароль для новог пользователя.А как создать этот зашифрованный пароль?
>-p, --password PASSWORD Используйте зашифрованный пароль для новог пользователя.
>
>А как создать этот зашифрованный пароль?htpasswd
>>-p, --password PASSWORD Используйте зашифрованный пароль для новог пользователя.
>>
>>А как создать этот зашифрованный пароль?
>
>htpasswdНужно обойтись без htpasswd, в shadow имеется такой зашифрованный пароль:
$1$L7jh6fLj$Cqo.MzETAQNrR5VaJYQef.
В man'е crypt(3) написано:Если salt является строкой символов, начинающейся с "$1$", за которой идет максимум восемь символов, и, возможно оканчивающейся "$", то, вместо использования алгоритма шифрования DES, функцией crypt библиотеки glibc будет использован алгоритм, основанный на MD5. Результатом работы этого алгоритма будет до 34 байтов, а именно "$1$<строка>$", где <строка> означает до 8 символов, взятых из salt после "$1$", за которыми следует 22 байта, выбранных из набора [a-zA-Z0-9./]. В этом случае значение имеет весь ключ (вместо первых 8 байтов).
В моем случае
<строка> - L7jh6fLj
<?> - Cqo.MzETAQNrR5VaJYQef.Каким образом генерируюся эти строки? И что они означают? Из man'а не понятно.
>>>-p, --password PASSWORD Используйте зашифрованный пароль для новог пользователя.
>>>
>>>А как создать этот зашифрованный пароль?
>
>Каким образом генерируюся эти строки? И что они означают? Из man'а не
>понятно.
Вот кусок на перле
$cryptpwd = crypt($upass, &salt);а вот сама salt
# see /usr/src/usr.bin/passwd/local_passwd.c or librcypt, crypt(3)
sub salt {
local($salt); # initialization
local($i, $rand);
local(@itoa64) = ( 0 .. 9, a .. z, A .. Z ); # 0 .. 63warn "calculate salt\n" if $verbose > 1;
# to64
for ($i = 0; $i < 8; $i++) {
srand(time + $rand + $$);
$rand = rand(25*29*17 + $rand);
$salt .= $itoa64[$rand & $#itoa64];
}
warn "Salt is: $salt\n" if $verbose > 1;return $salt;
}
>>Каким образом генерируюся эти строки? И что они означают? Из man'а не
>>понятно.
>
>
> Вот кусок на перле
>$cryptpwd = crypt($upass, &salt);
>
>а вот сама salt
># see /usr/src/usr.bin/passwd/local_passwd.c or librcypt, crypt(3)Спасибо, как получить salt и шифрованный пароль я понял.
Но я не пойму как соотнести те строки, получаемые, например ваши примером, с записью в shadow (той, что я привел выше).
>>>Каким образом генерируюся эти строки? И что они означают? Из man'а не
>>>понятно.
>
>Спасибо, как получить salt и шифрованный пароль я понял.
>Но я не пойму как соотнести те строки, получаемые, например ваши примером,
>с записью в shadow (той, что я привел выше).
Ну нету у меня shadow, зато есть pwd_mkdb , строящая БД. Т.е. во freebsd можно с некоей осторожностью манипулировать непосредственно с master.passwd, а затем ее перестраивать
>Ну нету у меня shadow, зато есть pwd_mkdb , строящая БД. Т.е.Тот шифрованный пароль из shadow, что я привел, в полное мере соответствует и master.passwd (на FreeBSD 6.2).
>во freebsd можно с некоей осторожностью манипулировать непосредственно с master.passwd, а
>затем ее перестраиватьВот в том то и дело, что мне тоже нужно это делать.
Но только как получить именно такой формат запис пароля:
$1$WzG79XX8$KwMbxqhnml22JSxtqY4LE0С учетом всего вышесказанного, как я могу сгенерировать salt (в принципе любой длины) и хэш возвращаемый crypt'ом будет длиной 13 символов?
Или в shadow/master.passwd достаточно поместить результат crypt('user_pass', salt)?
Посмотри здесь
http://www.linux.org.ru/view-message.jsp?msgid=468913
http://www.opennet.me/openforum/vsluhforumID1/43347.html#3
http://www.linux.org.ru/view-message.jsp?msgid=1204898
>Посмотри здесьСпасибо, но все равно остается открытым вопрос, как заставить функцию crypt() использовать алгоритм MD5, чтобы получился шифрованный пароль длиной 34 символа,
$1$x32TbuHx$Wh.f/Pu23E8IVlaIBzLow/
а не 13, в случае использования DES.
>>Посмотри здесь
>
>Спасибо, но все равно остается открытым вопрос, как заставить функцию crypt() использовать
>алгоритм MD5, чтобы получился шифрованный пароль длиной 34 символа,
>$1$x32TbuHx$Wh.f/Pu23E8IVlaIBzLow/
>а не 13, в случае использования DES.брр, явное непонимание: читать man crypt до посинениния, ради интереса посмотреть
master.passwd на предмет длины encrypted_password (она у всех одинакова?) :)ps. в /usr/ports/security - разобрать несколько генераторов паролей, может это даст толчок...
>>>Посмотри здесь
>>
>>Спасибо, но все равно остается открытым вопрос, как заставить функцию crypt() использовать
>>алгоритм MD5, чтобы получился шифрованный пароль длиной 34 символа,
>>$1$x32TbuHx$Wh.f/Pu23E8IVlaIBzLow/
>>а не 13, в случае использования DES.
>
>брр, явное непонимание: читать man crypt до посинениния, ради интереса посмотретьУже третий день читаю.
>master.passwd на предмет длины encrypted_password (она у всех одинакова?) :)
Все одинаковые, 34 символа, включая префикс $1$, указывающий, что используется MD5.
>ps. в /usr/ports/security - разобрать несколько генераторов паролей, может это даст толчок...
Display all 724 possibilities?
>>Посмотри здесь
>
>Спасибо, но все равно остается открытым вопрос, как заставить функцию crypt() использовать
>алгоритм MD5, чтобы получился шифрованный пароль длиной 34 символа,
>$1$x32TbuHx$Wh.f/Pu23E8IVlaIBzLow/
>а не 13, в случае использования DES.man 3 crypt - увидите массу интересного, особенно про зависимоть типа шифрования от salt
или установкой типа шифрования по умолчанию
The algorithm used will depend upon whether crypt_set_format() has been
called and whether a global default format has been specified.
>-p, --password PASSWORD Используйте зашифрованный пароль для новог пользователя.
>
>А как создать этот зашифрованный пароль?Еще можно grub-md5-crypt воспользоваться, если grub стоит
>>-p, --password PASSWORD Используйте зашифрованный пароль для новог пользователя.
>>
>>А как создать этот зашифрованный пароль?
>
>Еще можно grub-md5-crypt воспользоваться, если grub стоитАга, или просто chpasswd -m.
[ezh@oktyab ~]$ cat ./passwd_hash.c
#include <unistd.h>
#include <stdio.h>
#include <string.h>int main(int argc, char* argv[]) {
char tmp[80];
char* pass;tmp[0] = 0;
if (argc != 3) {
printf("Usage: %s <plain_text> <salt>\n", argv[0]);
exit(0);
}pass = crypt(argv[1], strcat(strcat(tmp, "$1$"), argv[2]));
printf("Encrypted: %s\n", pass);
return 0;
}
[ezh@oktyab ~]$ cc passwd_hash.c -o passwd_hash -lcrypt
[ezh@oktyab ~]$ ./passwd_hash test mysalt
Encrypted: $1$mysalt$YJKHoHfKOk1X.fBpS10TE0
[ezh@oktyab ~]$