尽管密码正确,PAM 身份验证仍失败

问题描述 投票:0回答:1

我正在尝试使用 PAM 进行身份验证:

// gcc [file] -lstdc++ -lpam -lpam_misc
#include <iostream>
#include <security/pam_appl.h> 
#include <security/pam_misc.h>

int main()
{
    const char * username = "********";
    const char * password = "********";
    const char * data[] = {username, password};

    struct pam_conv pconv = {misc_conv, data};
    struct pam_handle *phandle = NULL;
    int result;

    result = pam_start("display_manager", username, &pconv, &phandle);
    std::cout << "pam_start: " << pam_strerror(phandle, result) << "\n";

    result = pam_authenticate(phandle, 0);
    std::cout << "pam_authenticate: " << pam_strerror(phandle, result) << "\n";
}

尽管我提供了正确的密码,但它还是失败了,没有任何有用的错误消息(它只是说“身份验证失败”)。

这是我的journalctl(我用********替换了用户名和主机名):

Oct 08 19:50:26 ******** main[42928]: pam_warn(display_manager:auth): function=[pam_sm_authenticate] flags=0 service=[display_manager] terminal=[<unknown>] user=[********] ruser=[<unknown>] rhost=[<unknown>]
Oct 08 19:50:26 ******** main[42928]: PAM pam_close_session: NULL pam handle passed
Oct 08 19:50:26 ******** main[42928]: PAM pam_setcred: NULL pam handle passed
Oct 08 19:50:26 ******** main[42928]: PAM pam_end: NULL pam handle passed
c++ authentication pam
1个回答
0
投票

您没有正确编写授权模块!密码在 pam_sm_authenticate 函数中检查,您必须在其中实现密码验证。如果正确,则返回“PAM_SUCCESS”或“PAM_AUTH_ERR”。

你的程序中不能有“main”函数。这不是一个可执行文件,而是一个模块。我建议你看看我写的模块以及它是如何编译的。 https://github.com/oditynet/2fact-telegram

例如我的项目的逻辑:

pin= converse(pamh, PAM_PROMPT_ECHO_OFF, "Please enter the PIN: "); 
    if (atoi(pin) == 12345)
    {
        return PAM_SUCCESS;
    }
    return PAM_AUTH_ERR ;
© www.soinside.com 2019 - 2024. All rights reserved.