2015-12-06 2 views
2

Я играл с аутентификацией РАМА с помощью небольшой программы C:Как я могу запросить sssd через 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 процесса authenticate with LDAP against a remote active directory.

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

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

+0

Использование используют 'su' службы PAM. Вы настроили '/ etc/pam.d/su' использование' pam_sss'? – frasertweedale

+0

@frasertweedale - туда мы идем. Я изменил его на сервис «login», и он сработал. Если вы опубликуете это в качестве ответа, я с радостью продолжу его, иначе я смогу опубликовать ответ самостоятельно. – Christopher

+0

Спасибо, я отправил ответ. Рад быть полезным :) – frasertweedale

ответ

1

Согласно

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

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

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

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

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

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

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