【问题标题】:How can I query sssd via PAM in a C program?如何在 C 程序中通过 PAM 查询 sssd?
【发布时间】:2015-12-06 17:22:17
【问题描述】:

我正在使用一个小型 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

【问题讨论】:

  • 使用正在使用su PAM 服务。您是否将/etc/pam.d/su 配置为使用pam_sss
  • @frasertweedale -- 我们开始了。我将其更改为“登录”服务并且它有效。如果您将其发布为答案,我会很乐意投票,否则我可以自己发布答案。
  • 谢谢,我发布了答案。很高兴能提供帮助:)

标签: c pam


【解决方案1】:

根据

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/&lt;service-name&gt;中为您的应用创建专用的 PAM 服务

【讨论】:

    猜你喜欢
    • 2022-08-11
    • 2019-07-14
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    • 2023-02-18
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多