2013-06-03 3 views
1

나는 우분투를위한 새로운 PAM 모듈을 만들었습니다.PAM 모듈 사이에 암호를 건네기

내 코드 : sudo는 명령의 실행

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 

결과 : : 나는 /etc/pam.d/commom-auth 구성

#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; 
} 

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

을 그리고 /tmp/pass.txt에 저장된 사용자 및 암호가 정확합니다.

pam_unix가 내 모듈에서 전달한 암호를 허용하지 않는 이유는 무엇입니까?

감사합니다. 인증이 성공하면 당신은 PAM_SUCCESS를 반환해야

답변

0

, PAM_AUTH_ERR 그렇지 않으면

+0

나는 다른 모든 모듈이 실행이 필요합니다

를 사용하여이 문제를 해결합니다. –

0

은 pam_unix 모듈에 의해 전달 된 암호를 허용하지만 문제는 당신이 사용하는 것입니다 :

auth required pam_unix.so 

이 모듈은 PAM을 successed 후 것 다음 줄에서 모듈을 호출하십시오. 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