Простой пример PAM - PullRequest
       14

Простой пример PAM

3 голосов
/ 24 мая 2011

Я хочу разработать модуль аутентификации с использованием PAM, но у меня возникают проблемы при работе простого примера.

Для начала я хотел бы создать простую систему входа в систему SSH, в которой, если пользователь вводит имя пользователя backdoor, тогда пользователь будет входить в систему без пароля (как в TRON Legacy).

Я пытался использовать это руководство в качестве шаблона, но не могу заставить его работать. Вот мой код:

PAM_EXTERN int pam_sm_setcred( pam_handle_t *pamh, int flags, int argc, const char **argv ) {
    return PAM_SUCCESS ;
}

PAM_EXTERN int pam_sm_authenticate( pam_handle_t *pamh, int flags,int argc, const char **argv ) {
    int retval;

    printf("I'm here");

    const char* pUsername;
    retval = pam_get_user(pamh, &pUsername, "Username: ");
    if (retval != PAM_SUCCESS) {
        return retval;
    }

    if (strcmp(pUsername, "backdoor") != 0) {
        return PAM_AUTH_ERR;
    }
    return PAM_SUCCESS;
}

Когда я вхожу с именем backdoor, я получаю отказ в разрешении. Я пытался создать учетную запись пользователя, но мне все равно предлагается пароль.

Когда я вхожу в систему с действительным пользователем, я вижу распечатку «Я здесь». Есть ли лучший способ отладить что-то подобное или это в основном методом проб и ошибок?

EDIT:

Я добавил это к своему /etc/pam.d/sshd после @include common-auth:

auth sufficient mypam.so

Это идет после 2 других .so файлов, но я почти уверен, что он выполняется каждый раз.

Я не модифицировал pam.conf (там ничего нет). Я подумал, что начать с SSH будет проще, потому что мне не нужно каждый раз выходить из системы.

EDIT:

Наконец-то все заработало. Вот результат:

https://github.com/beatgammit/simple-pam

Это с открытым исходным кодом, так что если вам интересно, посмотрите!

1 Ответ

3 голосов
/ 24 мая 2011

Во-первых, достаточно все равно будет отказывать, если предыдущий требуемый модуль вышел из строя.Поскольку вы говорите, что поместили достаточное количество строк в число включенных в Common-Auth, вы можете столкнуться с ошибкой, поскольку какой-то необходимый модуль в Common-Auth уже отказал в доступе.Кроме того, у вас есть sshd, мешающий вам.

Я бы убрал все эти вещи, чтобы вы знали, что ваш тест - это действительно проверка вашего модуля pam, а не какое-то дальнейшее взаимодействие с другими вещами.Я бы начал с простой тестовой программы, такой как здесь с /etc/pam.d/check_user с указанием вашего модуля вместо pam_unix.

...