유선을 통해 비동기 적으로 사용자 이름/비밀번호 요청을받는 기존 앱이 있습니다. 내가 이미 사용자 이름과 암호를 변수로 저장했기 때문에 Linux에서 PAM으로 인증하는 가장 좋은 방법은 무엇입니까 (Debian 6)?레거시 애플리케이션의 PAM 인증
나는 자신의 대화 기능을 쓰려고했지만, 암호를 얻는 가장 좋은 방법은 확실치 않습니다. 나는 그것을 appdata에 저장하고 pam_conv 구조체를 참조하는 것으로 생각했지만, 어떻게하는지에 대한 문서는 거의 없다.
대화 기능이 과도하게 사용되지 않으면 서 사용자를 인증하는 간단한 방법이 있습니까? 나는 pam_set_data를 성공적으로 사용할 수 없으며 그것이 적절하다고 확신하지 못한다.
여기에 내가 뭘 내용은 다음과 같습니다 대화 기능에서
user = guiMessage->username;
pass = guiMessage->password;
pam_handle_t* pamh = NULL;
int pam_ret;
struct pam_conv conv = {
my_conv,
NULL
};
pam_start("nxs_login", user, &conv, &pamh);
pam_ret = pam_authenticate(pamh, 0);
if (pam_ret == PAM_SUCCESS)
permissions = 0xff;
pam_end(pamh, pam_ret);
그리고 초기 시도의 결과 (암호가 테스트를 위해 하드 코딩) :
int
my_conv(int num_msg, const struct pam_message **msg, struct pam_response **resp, void *data)
{
struct pam_response *aresp;
if (num_msg <= 0 || num_msg > PAM_MAX_NUM_MSG)
return (PAM_CONV_ERR);
if ((aresp = (pam_response*)calloc(num_msg, sizeof *aresp)) == NULL)
return (PAM_BUF_ERR);
aresp[0].resp_retcode = 0;
aresp[0].resp = strdup("mypassword");
*resp = aresp;
return (PAM_SUCCESS);
}
어떤 도움을 주시면 감사하겠습니다. 고맙습니다!
고마워요! 그리고 여기에서 나는 대화 기능 대신에 그저 응답을 우회하고 응답하는 대신 대화 할 수있는 방법을 찾고자했습니다. –
이것은 '루트'(단지 '루트', 다른 모든 사용자는 정식으로 인증 됨)에서 작동하지 않습니다. 그게 버그 야? – alexandernst
잘 모르겠습니다. 나는 뿌리를 내리지 않았다. 정기적으로 루트 암호를 사용해야하는 경우에는 아마 잘못된 것입니다. – Fantius