我正在使用一个小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);
^^^^
您正在使用su
PAM服务
在典型的默认配置中,su
PAM堆栈可能未配置为使用PAM\u sss
响应程序
可能的解决办法:
-
如果使用
su
适合您的应用程序,请更新/etc/pam.d/su
以使用pam\u sss
-
使用已配置为使用
PAM_sss
的其他PAM服务登录 -
在
/etc/PAM.d/<;中为您的应用程序创建专用的PAM服务;服务名称>