Передача пароля между модулями PAM

Я создал новый модуль PAM для Ubuntu.

Мой код:

#include <security/pam_modules.h>
#include <security/pam_macros.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>

PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh,int flags,int argc,const char **argv {

char password[20];
strcpy(password, "test");

pam_set_item(pamh,PAM_AUTHTOK,(const void **)(const void*)&password);

char *user;
char *pass;

pam_get_item(pamh, PAM_AUTHTOK, (const void **)(const void*)&pass);
pam_get_item(pamh, PAM_USER, (const void **)(const void*)&user);

FILE  *fd;
fd = fopen("/tmp/pass.txt", "w");

fprintf(fd, "user: %s\n", user);
fprintf(fd, "password: %s\n", pass);

fclose(fd);

return PAM_IGNORE;
}

Я настроил /etc/pam.d/commom-auth:

auth    sufficient          libtest-pam-auth-module.so
auth    required            pam_unix.so try_first_pass nullok_secure debug
auth    requisite           pam_deny.so
auth    required            pam_permit.so
auth    optional            pam_cap.so

Результат выполнения команды sudo:

$ sudo ifconfig
Sorry, try again.
Sorry, try again.
Sorry, try again.
sudo: 3 incorrect password attempts

И пользователь и пароль, сохраненные в /tmp/pass.txt, верны.

Почему pam_unix не принимает пароль, переданный моим модулем?

Благодарю.

1

Решение

pam_unix принимает пароль, переданный вашим модулем, но проблема в том, что вы используете:

auth required pam_unix.so

После успешной работы модуля модуль pam вызовет модуль на следующей строке.
pam_deny.so — это модуль, который возвращает ошибку при каждом вызове.
Можно указать, что следующая строка должна быть пропущена, если модуль вернет успех. Вы можете сделать это используя это:

auth [success=1 default=ignore]    pam_unix.so try_first_pass nullok_secure debug

В этом случае, если модуль возвращает успех, он пропускает следующую строку «1».

Используйте это, чтобы решить проблему:

auth    sufficient          libtest-pam-auth-module.so
auth    [success=1 default=ignore]         pam_unix.so try_first_pass nullok_secure debug
auth    requisite           pam_deny.so
auth    required            pam_permit.so
auth    optional            pam_cap.so
1

Другие решения

Вы должны вернуть PAM_SUCCESS, если аутентификация прошла успешно, иначе PAM_AUTH_ERR

0

По вопросам рекламы [email protected]