Я играю с модулем Linux PAM и меня смущает, как можно успешно аутентифицировать исполняющего пользователя, когда у пользователя нет доступа к теневому файлу.
Как я видел в других приложениях, доступтеневой файл предоставляется через SETUID для root, но это не входит в сферу моего вопроса:)
мое приложение проверки пользователя:
int main()
{
struct pam_conv conv = {
misc_conv,
NULL
};
pam_handle_t *pamh=NULL;
int retval;
const char *user=NULL;
user = argv[1];
retval = pam_start("check_user", user, &conv, &pamh);
if (retval == PAM_SUCCESS)
retval = pam_authenticate(pamh, 0);
if (retval == PAM_SUCCESS)
fprintf(stdout, "Authenticated\n");
else
fprintf(stdout, "NOT\n");
pam_end(pamh,retval);
}
My /etc/pam.d/check_user:
auth required pam_unix.so
Когда я запускаю программу от имени пользователя testi с правильным паролем: ./check_user testi Пароль: я получаю успешный «Аутентифицированный».Всякий раз, когда я ввожу неправильный пароль или пытаюсь использовать другого пользователя, я получаю ошибку аутентификации.Последнее мне ясно, но я не понимаю, как для пользователя testi я получаю разные результаты, в зависимости от правильности пароля.
В порядке я вижу, что доступ к теневому файлу запрещени что процессный файл состояния процесса является проверкой UID.Но как проверить пароль без доступа к теневому файлу?
Большое спасибо