gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:45:39 24 4
gpt4 key购买 nike

我正在使用一个小型 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 服务 pam_sss ; login例如。

  • /etc/pam.d/<service-name> 中为您的应用创建专用 PAM 服务

关于c - 如何在 C 程序中通过 PAM 查询 sssd?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34120339/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com