Я хочу разработать модуль аутентификации с использованием 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
, мне отказывают в доступе. Я пытался создать учетную запись пользователя, но мне все еще предлагается ввести пароль.
Когда я вхожу в систему с действительным пользователем, я вижу распечатку «Я здесь». Есть ли лучший способ отладить что-то подобное или это в основном метод проб и ошибок?
РЕДАКТИРОВАТЬ:
Я добавил это в свой /etc/pam.d/sshd
после @include common-auth:
auth sufficient mypam.so
Это происходит после двух других файлов .so, но я уверен, что он выполняется каждый раз.
Я не модифицировал pam.conf (там ничего нет). Я решил, что начать с SSH будет проще всего, потому что мне не нужно каждый раз выходить из системы.
РЕДАКТИРОВАТЬ:
Наконец-то я заработал. Вот результат:
https://github.com/beatgammit/simple-pam
Это с открытым исходным кодом, так что если вам интересно, взгляните!
pam.conf
илиpam.d/*
) вы это используете? Добавьте некоторые выходные данные трассировки непосредственно перед каждымreturn
, чтобы увидеть, что именно происходит. Может ли быть так, что ваш модуль возвращаетPAM_SUCCESS
, но какой-то другой требуемый модуль говорит «нет»? - person Gilles 'SO- stop being evil'   schedule 24.05.2011