pam pam_sm_authenticate попытаться получить пользователя и пароль для других пользователей

Если у вас есть GNU date, он может преобразовывать даты, считанные из входного файла. Вам просто нужно немного изменить временные метки, чтобы он смог их распознать. Входной синтаксис для временной метки, основанной на эпохе Unix, - @, за которым следует число секунд, которое может содержать десятичную точку.

find ./ -type d ! -name '*[!0-9]*' |
sed -e 's~.*/~@~' -e 's~[0-9][0-9][0-9]$~.&~' |
date -f - +'%s  %c'
1
06.03.2018, 10:53
1 ответ

нашел проблему в:https://www.linuxquestions.org/questions/programming-9/can%27t-get-auth-token-for-non-local-users-with-pam-module-945164/в основном проблема в том, что невозможно получить пароль от неизвестного пользователя, Linux PAM заменит пароль на "\b\n\r\177INCORRECT", если не сможет получить информацию о пользователе из системных баз данных (Переключатель службы имен, см. man nsswitch.conf ). возможный обходной путь проверки с помощью getpawn, что пользователь действительно существует. пример:

/* The actual pam functions are merely wrappers around succeed_if */
PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv) {
    const char * password=NULL;
    struct passwd *pwd;
    const char *user;
    int pam_err=0;
    /* identify user */
    pam_err = pam_get_user(pamh, &user, NULL);
    if (pam_err != PAM_SUCCESS)
    {
        return (pam_err);
    }
    if ((pwd = getpwnam(user)) == NULL)
    {
        return (PAM_USER_UNKNOWN);
    }
    /*note : if user is not deefined pawsword return will be "^H$^M^?INCORRECT^@" */
    pam_err  = pam_get_authtok(pamh, PAM_AUTHTOK, &password, NULL);
    if (pam_err!=PAM_SUCCESS)
    {
        return (pam_err);
    }

    /*here add personal auhtentication */
    pam_err = isAuthenticate((char *)user,(char *)password);
    if (pam_err != PAM_OK)
    {
        return (PAM_AUTH_ERR);
    }

    return (PAM_SUCCESS);
}
1
28.01.2020, 00:38

Теги

Похожие вопросы