PAM: pam_get_authtok이 PAM_BAD_ITEM을 반환합니다.

PAM: pam_get_authtok이 PAM_BAD_ITEM을 반환합니다.

나만의 PAM 모듈을 작성하려고 합니다.

int pam_sm_setcred(pam_handle_t* handle, int flags, int argc, const char** argv)
{
     return PAM_SUCCESS;
}

int pam_sm_acct_mgmt(pam_handle_t* handle, int flags, int argc, const char** argv)
{
     return PAM_SUCCESS;
}

int pam_sm_authenticate(pam_handle_t* handle, int flags, int argc, const char** argv)
{
     ...

     retval = pam_get_user(handle, &username, "Username: ");
     if (retval != PAM_SUCCESS)
     {
          return retval;
     }

     passwd = getpwnam(username);
     if (!passwd)
     {
          return PAM_USER_UNKNOWN;
     }

     retval = pam_get_authtok(handle, PAM_AUTHTOK, &password, "Password: ");
     if (retval != PAM_SUCCESS)
     {
          return retval;
     }

     printf("Welcome to Hell, %s : %s\n", username, password);
     return PAM_SUCCESS;
}

.so 라이브러리를 /lib/security에 넣고 pam 파일(/etc/pam.d/common-auth) 상단에 다음 줄을 추가하면 작동합니다.

auth sufficient mypam.so
account sufficient mypam.so

예: sudo에서 일부 파일을 열려고 하면 정상적으로 작동합니다.

하지만 나는 또한 작은 실행 가능한 테스트를 작성하려고 노력합니다.

int main(...)
{
     pam_conv conv = {misc_conv, NULL};
     pam_start("test", NULL, &conv, &handle);
     pam_sm_authenticate(handle, 0, 0, NULL);
     ...
}

이 경우 실행 시 pam_get_authtok(...)오류 코드 29(PAM_BAD_ITEM)를 반환합니다.

내가 뭘 잘못했나요?

관련 정보