如何在C程序中通过PAM查询sssd?

我正在使用一个小C程序进行PAM身份验证:

#包括<安全/pam_应用程序h>
#包括<安全/pam_杂项h>
#包括<stdlib.h>
int main()
{
pam_handle_t*pamh;
结构pam_conv pamc;
pamc.conv=&misc_conv;
pamc.appdata_ptr=NULL;
pam_start(“su”)、getenv(“用户”)、pamc和pamh);
if(pam_认证(pamh,0)!=pam_成功){
fprintf(标准,“身份验证失败!\n”);
}否则{
fprintf(标准,“身份验证成功!\n”);
}
pam_末端(pamh,0);
返回0;
}

有两种用户可以访问我的系统,一种是在本地shadow db中创建的用户,另一种是通过配置的sssd进程通过LDAP对远程active directory进行身份验证的用户

我已经将sssd配置为插入PAM,我可以通过系统上的大量日志和sssd的调试输出来确认PAM,但是上面的程序只适用于本地用户。需要针对sss进行身份验证的用户无论是否输入了正确的凭据,都会从PAM\u authenticate返回PAM\u authenticate\u ERROR

我肯定错过了一些显而易见的东西。如何在C程序中通过PAM访问sss

pam_start(“su”、getenv(“用户”)、pamc和pamh);
^^^^

您正在使用suPAM服务

在典型的默认配置中,suPAM堆栈可能未配置为使用PAM\u sss响应程序

可能的解决办法:

  • 如果使用su适合您的应用程序,请更新/etc/pam.d/su以使用pam\u sss

  • 使用已配置为使用PAM_sss的其他PAM服务登录

  • /etc/PAM.d/<中为您的应用程序创建专用的PAM服务;服务名称&gt

发表评论