2013-06-03 3 views
1

Я создал новый модуль PAM для Ubuntu.Передача пароля между модулями PAM

Мой код:

#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 не принимает пароль, переданный моим модулем?

Спасибо.

ответ

0

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

+0

Мне нужно все остальные модули выполнены. –

0

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

auth required pam_unix.so 

После этого модуля В случае успешного Пэм вызовите модуль на следующей строке. 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 
Смежные вопросы