如何在 C 程序中通过 PAM 查询 sssd?
How can I query sssd via PAM in a C program?
我正在使用一个小型 C 程序尝试 PAM 身份验证:
#include <security/pam_appl.h>
#include <security/pam_misc.h>
#include <stdlib.h>
int main()
{
pam_handle_t* pamh;
struct pam_conv pamc;
pamc.conv = &misc_conv;
pamc.appdata_ptr = NULL;
pam_start("su", getenv("USER"), &pamc, &pamh);
if (pam_authenticate(pamh, 0) != PAM_SUCCESS) {
fprintf(stderr, "Auth failed!\n");
} else {
fprintf(stderr, "Auth succeeded!\n");
}
pam_end(pamh, 0);
return 0;
}
两种用户可以访问我的系统,一种是在本地影子数据库中创建的,另一种是遍历配置的 sssd
进程到 authenticate with LDAP against a remote active directory.
我已经配置 sssd
以插入 PAM,我可以通过系统上的一些日志和 sssd
的调试输出来确认这一点,但上面的程序只能工作对于本地用户。需要根据 sss
进行身份验证的用户从 pam_authenticate
获得 PAM_AUTH_ERROR
返回,无论他们是否输入了正确的凭据。
我肯定遗漏了一些明显的东西。如何在 C 程序中通过 PAM 访问 sss
?
根据
pam_start("su", getenv("USER"), &pamc, &pamh);
^^^^
您正在使用 su
PAM 服务。
在典型的默认配置中,su
PAM 堆栈可能未配置为使用 pam_sss
响应程序。
可能的解决方案:
如果使用 su
适合您的应用程序,请更新 /etc/pam.d/su
以使用 pam_sss
。
使用已配置为使用 pam_sss
的不同 PAM 服务; login
例如。
在 /etc/pam.d/<service-name>
中为您的应用程序创建专用的 PAM 服务
我正在使用一个小型 C 程序尝试 PAM 身份验证:
#include <security/pam_appl.h>
#include <security/pam_misc.h>
#include <stdlib.h>
int main()
{
pam_handle_t* pamh;
struct pam_conv pamc;
pamc.conv = &misc_conv;
pamc.appdata_ptr = NULL;
pam_start("su", getenv("USER"), &pamc, &pamh);
if (pam_authenticate(pamh, 0) != PAM_SUCCESS) {
fprintf(stderr, "Auth failed!\n");
} else {
fprintf(stderr, "Auth succeeded!\n");
}
pam_end(pamh, 0);
return 0;
}
两种用户可以访问我的系统,一种是在本地影子数据库中创建的,另一种是遍历配置的 sssd
进程到 authenticate with LDAP against a remote active directory.
我已经配置 sssd
以插入 PAM,我可以通过系统上的一些日志和 sssd
的调试输出来确认这一点,但上面的程序只能工作对于本地用户。需要根据 sss
进行身份验证的用户从 pam_authenticate
获得 PAM_AUTH_ERROR
返回,无论他们是否输入了正确的凭据。
我肯定遗漏了一些明显的东西。如何在 C 程序中通过 PAM 访问 sss
?
根据
pam_start("su", getenv("USER"), &pamc, &pamh);
^^^^
您正在使用 su
PAM 服务。
在典型的默认配置中,su
PAM 堆栈可能未配置为使用 pam_sss
响应程序。
可能的解决方案:
如果使用
su
适合您的应用程序,请更新/etc/pam.d/su
以使用pam_sss
。使用已配置为使用
pam_sss
的不同 PAM 服务;login
例如。在
/etc/pam.d/<service-name>
中为您的应用程序创建专用的 PAM 服务