URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5309
[ Назад ]

Исходное сообщение
"Как проверить пароль по /etc/shadow?"

Отправлено chainik , 03-Апр-06 10:13 
Есть
char *login, *passwd;
, в которых забиты логин и пароль (все - нешифрованное). Как проверить правильность логина/пароля по файлу /etc/shadow?

Содержание

Сообщения в этом обсуждении
"Как проверить пароль по /etc/shadow?"
Отправлено BigShadow , 03-Апр-06 13:05 
>Есть
>char *login, *passwd;
>, в которых забиты логин и пароль (все - нешифрованное). Как проверить
>правильность логина/пароля по файлу /etc/shadow?


зашифровать passwd
вытащить по login из /etc/shadow зашифрованный пароль
сравнить

возьмите исходники /bin/login
там все это есть


"Как проверить пароль по /etc/shadow?"
Отправлено jd , 03-Апр-06 15:30 
>Есть
>char *login, *passwd;
>, в которых забиты логин и пароль (все - нешифрованное). Как проверить
>правильность логина/пароля по файлу /etc/shadow?

man shadow(3), crypt(3)
вместо shadow(3) возможно будет ман getspnam(3)...


"Как проверить пароль по /etc/shadow?"
Отправлено chainik , 03-Апр-06 17:38 
>>Есть
>>char *login, *passwd;
>>, в которых забиты логин и пароль (все - нешифрованное). Как проверить
>>правильность логина/пароля по файлу /etc/shadow?
>
>man shadow(3), crypt(3)
>вместо shadow(3) возможно будет ман getspnam(3)...

А как компилить?

Я пробовал
с флагами -lshadow и -L/usr/lib/libshadow.a, но при компиляции получается:

...
main.o(.text+0x59): In function `main':
: undefined reference to `getspnam(char const*)'

Где эта getspnam?


"Как проверить пароль по /etc/shadow?"
Отправлено jd , 03-Апр-06 21:30 
>main.o(.text+0x59): In function `main':
>: undefined reference to `getspnam(char const*)'
>
>Где эта getspnam?

У меня она в glibc (то есть никаких дополнительных ключей не требуется), а где у вас - не знаю. Что за система-то хоть?

В мане нет упоминаний о каких-либо стандартах, так что возможно она есть не во всех системах. Но в Linux и SunOS вроде есть. В SunOS, насколько я понял, тоже в libc.


"Как проверить пароль по /etc/shadow?"
Отправлено chainik , 03-Апр-06 21:49 
>>main.o(.text+0x59): In function `main':
>>: undefined reference to `getspnam(char const*)'
>>
>>Где эта getspnam?
>
>У меня она в glibc (то есть никаких дополнительных ключей не требуется),
>а где у вас - не знаю. Что за система-то хоть?

Да Slackware 10.2 обычная, ну и glibc вроде стоит последняя...

Я ее еще поищу. Чем можно посмотреть, какие функции в библиотеке наличисвуют?


"Как проверить пароль по /etc/shadow?"
Отправлено chainik , 03-Апр-06 23:39 
Видно, что-то мне на работе мешало ;) Все работает, а из дополнительных библиотек нужна только -lcrypt. По крайней мере, /etc/shadow проверяется такой вот програмкой:

-------------8<----------------------------------------------------------------
// Проверялось на Slackware 10.2, где, правда, ядро и многое другое обноовлено
#include <string.h>
#include <stdio.h>
#include <shadow.h>
#include <pwd.h>
int shadow_check(char *user, char *passwd)
{
  struct passwd *pw = getpwnam(user);
  if (pw == NULL || pw->pw_passwd == '\0') {
    return (0);
  }
  struct spwd *spwd;
  spwd = getspnam(user);
    char *epasswd = (char*)crypt(passwd, spwd->sp_pwdp);
  if (strcmp(epasswd, spwd->sp_pwdp) != 0) {
    return (0);
  }
  return (-1);
}

int main(int argc, char **argv)
{
  printf("%d\n", shadow_check("snm", "mnyammhrumm"));
  return 0;
}
-------------8<----------------------------------------------------------------
Спасибо за помощь.


"Как проверить пароль по /etc/shadow?"
Отправлено имя , 03-Апр-06 23:47 
>Видно, что-то мне на работе мешало ;) Все работает, а из дополнительных
>библиотек нужна только -lcrypt. По крайней мере, /etc/shadow проверяется такой вот
>програмкой:
>
>-------------8<----------------------------------------------------------------
>// Проверялось на Slackware 10.2, где, правда, ядро и многое другое обноовлено
>
>#include <string.h>
>#include <stdio.h>
>#include <shadow.h>
>#include <pwd.h>
>int shadow_check(char *user, char *passwd)
>{
>  struct passwd *pw = getpwnam(user);
>  if (pw == NULL || pw->pw_passwd == '\0') {
>    return (0);
>  }
>  struct spwd *spwd;
>  spwd = getspnam(user);
>    char *epasswd = (char*)crypt(passwd, spwd->sp_pwdp);
>  if (strcmp(epasswd, spwd->sp_pwdp) != 0) {
>    return (0);
>  }
>  return (-1);
>}
>
>int main(int argc, char **argv)
>{
>  printf("%d\n", shadow_check("snm", "mnyammhrumm"));
>  return 0;
>}
>-------------8<----------------------------------------------------------------
>Спасибо за помощь.


а может в даном случе стоит использовать PAM?


"Как проверить пароль по /etc/shadow?"
Отправлено chainik , 03-Апр-06 23:56 
>а может в даном случе стоит использовать PAM?

А чем он лучше?

Честно говоря, я не великий специалист, поэтому пока не осознаю его преимущества. В моем случае решение принимает cgi-программа (apache, ssl-соединение) на основе файла /etc/shadow и данных, которые пользователь ввел в форму.

Я бы и pam попробовал. Если у вас есть коротенький примерчик, с удовольствием его применю...


"Как проверить пароль по /etc/shadow?"
Отправлено chip , 04-Апр-06 11:54 
>>а может в даном случе стоит использовать PAM?
>
>А чем он лучше?

Pluggable Authentication Module Library

Своей модульностью. Например, если в дальнейшем понадобится еще авторизовывать клиентов по mysql, ldap будет достаточно добавить модуль к pam. Сам же код приложение не изменится. В остальном (для примеров) достаточно обратить внимание на любой мало-мальски популярный сетевой продукт.


"Как проверить пароль по /etc/shadow?"
Отправлено chainik , 04-Апр-06 12:01 
>ldap будет достаточно добавить модуль к pam. Сам же код приложение
>не изменится. В остальном (для примеров) достаточно обратить внимание на любой
>мало-мальски популярный сетевой продукт.

А можете посоветовать какой-нибудь продукт с минимальным, но достаточным количеством кода? - в длинных программах трудно выискивать.


"Как проверить пароль по /etc/shadow?"
Отправлено имя , 04-Апр-06 15:32 
>>ldap будет достаточно добавить модуль к pam. Сам же код приложение
>>не изменится. В остальном (для примеров) достаточно обратить внимание на любой
>>мало-мальски популярный сетевой продукт.
>
>А можете посоветовать какой-нибудь продукт с минимальным, но достаточным количеством кода? -
>в длинных программах трудно выискивать.

да тот же passwd,login, кажись.., вся система аутентификации unixов держится на этом
просто смотрите в исходниках где числится #include <pam.h>, или кеак там у вас.
тот фалй и розбирайте, но правильней все таки к документации


"Как проверить пароль по /etc/shadow?"
Отправлено missKler , 20-Фев-09 13:57 
Как можно проверить пароль и ник?я создала себе почтовый ящик,захожу в чаты и т д пароль и ник не верные!Что посоветуете?