Я хочу разработать модуль аутентификации с использованием 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
Это с открытым исходным кодом, так что если вам интересно, посмотрите!