Как проверить хэш, когда тень не читается в pam_unix? - PullRequest
0 голосов
/ 21 декабря 2018

Я играю с модулем 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.Но как проверить пароль без доступа к теневому файлу?

Большое спасибо

1 Ответ

0 голосов
/ 21 декабря 2018

Я играю с модулем Linux PAM, и меня смущает, как можно успешно аутентифицировать исполняющего пользователя, когда у пользователя нет доступа к теневому файлу.

Как я видел с другимиприложения, доступ к теневому файлу предоставляется через SETUID для root, но это не входит в сферу моего вопроса:)

Нет, это определенно входит в сферу вашего вопроса.

Когда PAM требуется аутентифицировать пару имя пользователя-пароль, он разветвляет дочерний процесс, который выполняет помощника setuid-root (/sbin/unix_chkpwd для pam_unix), чтобы выполнить проверку.Имя пользователя и пароль передаются процессу доверенного помощника.Помощник имеет достаточные привилегии для выполнения проверки и просто отвечает, была ли проверка успешной.

В частности, данные теневой записи, соответствующие пользователю, никогда не передаются приложению;эта информация остается в привилегированном вспомогательном процессе.

...