Программный способ проверки логина/пароля в Linux

Вопрос или проблема

Мне нужно проверить, соответствуют ли имя пользователя и пароль действительной учетной записи Unix.

Текущая решение, которое я использую, использует expect для ожидания запроса пароля, а затем предоставляет пароль и проверяет, успешен ли вход.

Существует ли API ядра или функция пользовательского пространства, которая может проверить логин/пароль?

Я думаю, что часть моего непонимания заключается в том, что я не уверен, является ли это услугой пространства ядра?

Вам следует использовать pam. В Debian/Ubuntu вы можете:

apt-get install python-pam

Простой код на python pamtest.py:

Смотрите файл /usr/share/doc/python-pam/examples/pamtest.py. Он действительно короткий и делает то, что вам нужно.

Чтобы протестировать это, выполните:

python /usr/share/doc/python-pam/examples/pamtest.py

Также есть пример на C pamexample.c.

Чтобы протестировать это:

gcc /usr/share/doc/python-pam/examples/pamexample.c -lpam -l pam_misc
./pam_misc theuser

Это строгое пространство пользователя.

Чтобы проверить, хороши ли учетные данные пользователя, вы можете попробовать войти как он:

su - username

Но изучение PAM может быть лучшим вариантом в долгосрочной перспективе.

Ответ или решение

Вопрос о валидации учетных данных, таких как имя пользователя и пароль, в Linux требует внимательного подхода, особенно если речь идет о программной реализации. Существующих решений достаточно, и наиболее распространенным способом верификации является использование механизма PAM (Pluggable Authentication Modules).

Что такое PAM?

PAM — это система, предоставляющая гибкие средства управления аутентификацией пользователей в Linux и UNIX-подобных системах. Это строгое решение для пользовательского пространства, которое позволяет вам проверять учетные данные без необходимости взаимодействия с ядром системы.

Установка необходимых пакетов

Для начала вам потребуется установить библиотеку Python PAM, если вы планируете использовать Python для проверки аутентификации. Это можно сделать следующей командой:

apt-get install python-pam

Пример использования PAM в Python

Вам может помочь пример использования PAM на Python. Ниже представлен простой скрипт, который демонстрирует процесс аутентификации:

import pam

def validate_user(username, password):
    p = pam.pam()
    if p.authenticate(username, password):
        return True
    return False

# Пример использования
username = input("Введите имя пользователя: ")
password = input("Введите пароль: ")

if validate_user(username, password):
    print("Аутентификация успешна!")
else:
    print("Неверное имя пользователя или пароль.")

Альтернативы: Использование C

Если вам нужен более низкоуровневый доступ, можно использовать C с библиотеками PAM. Вот пример кода на C:

#include <stdio.h>
#include <security/pam_appl.h>

int main(int argc, char **argv) {
    const char *username = argv[1];
    const char *password = argv[2];
    struct pam_conv conv = { NULL, NULL };
    pam_handle_t *pamh = NULL;

    if (pam_start("login", username, &conv, &pamh) != PAM_SUCCESS)
        return -1;

    return pam_authenticate(pamh, 0);
}

Для компиляции используйте команду:

gcc -o pam_check pam_check.c -lpam -lpam_misc

Вызов проверки

После написания и компиляции вашей программы вызовите её в терминале:

./pam_check имя_пользователя пароль

Заключение

Использование системы PAM — это легитимный и безопасный способ проверки аутентификации пользователей в Linux. Это решение находится в пользовательском пространстве и не требует модификации ядра. Программирование с использованием PAM дает вам доступ к богатым возможностям аутентификации и может быть интегрировано в различные приложения, сохраняя безопасность и удобство.

Надеюсь, это поможет вам успешно внедрить валидацию учетных данных в вашем проекте! Если у вас есть дополнительные вопросы или нужно больше информации, не стесняйтесь обращаться.

Оцените материал
Добавить комментарий

Капча загружается...