Как я могу запросить sssd через PAM в программе на C?

Я играю с аутентификацией PAM, используя небольшую программу C:

#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 процесс на аутентифицироваться с помощью LDAP в удаленном активном каталоге.

Я настроил sssd для подключения к PAM, что я могу подтвердить с помощью ряда журналов в системе и отладочных данных sssd, но указанная выше программа работает только для локальных пользователей. Пользователи, которым потребуется аутентификация для sss, получат PAM_AUTH_ERROR обратно от pam_authenticate независимо от того, вводят ли они правильные учетные данные или нет.

Я определенно упускаю что-то очевидное. Как я могу получить доступ к sss через PAM в программе на языке C?


person Christopher    schedule 06.12.2015    source источник
comment
Используются с помощью службы su PAM. Вы настроили /etc/pam.d/su для использования pam_sss?   -  person frasertweedale    schedule 10.12.2015
comment
@frasertweedale - поехали. Я изменил его на службу входа в систему, и она сработала. Если вы опубликуете это как ответ, я с радостью проголосую за него, в противном случае я могу опубликовать ответ сам.   -  person Christopher    schedule 11.12.2015
comment
Спасибо, отправил ответ. Рад помочь :)   -  person frasertweedale    schedule 12.12.2015


Ответы (1)


В соответствии с

pam_start("su", getenv("USER"), &pamc, &pamh);
          ^^^^

вы пользуетесь службой su PAM.

В типичной конфигурации по умолчанию стек su PAM не может быть настроен для использования pam_sss респондента.

Возможные решения:

  • Если для вашего приложения подходит использование su, обновите /etc/pam.d/su, чтобы использовать pam_sss.

  • Используйте другую службу PAM, которая уже настроена для использования pam_sss; login например.

  • Создайте специальный сервис PAM для своего приложения в /etc/pam.d/<service-name>

person frasertweedale    schedule 12.12.2015