Запуск модуля PAM не дожидаясь нажатия клавиши enter

Автор nextiter, 10 августа 2016, 10:19:36

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

nextiter

Добрый день!
Установлены debian 8, lightdm и xfce.
Есть задача - сделать аутентификацию на машине по смарт карте с RFID-меткой, сделав запрос на удаленную машину за разрешением.
Сделано:
модуль PAM, написанный на питоне использующий библиотеку python-pam. Логика модуля такова, что он ждет, когда будет приложена карта. Затем считывает с неё данные, отправляет по сети и получает ответ с разрешением на аутентификацию.
Отдельные части модуля работают, как и сам модуль совершает именно те действия, которые запланированы.

Но есть загвоздка:
Модуль начинает работать только после того, как я нажимаю enter. будь то lightdm или login.
Неважно какие данные я введу и введу ли вообще, нажав enter или "войти" - управление переходит моему модулю (он пока просто отправляет ID карты, не считывая её и получает разрешение на аутентификацию).
Я хочу избавиться от этих нажатий.
Можно ли сделать так, чтобы модуль начинал работать сразу после загрузки ОС?
Пытался настроить /etc/lightdm/lightdm.conf

autologin-guest = False
autologin-user =root
autologin-user-timeout = 0
pam-service=lightdm
pam-autologin-service=lightdm-autologin
pam-greeter-service=lightdm-greeter

Хотел сделать автологин, а в него прописать свою библиотеку аутентификации, но что-то автоматически не логинится.
файлы lightdm lightdm-autologin lightdm-greeter в /etc/pam.d/ выглядят одинаково:

auth       required  pam_python.so      custom_linux_auth.py

ради всего святого помогите разобраться :)


endru

Авторизация в домене чтоли? если да, то смотри в сторону kerberos.
права выставлены правильно на custom_linux_auth.py?
а по хорошему нужно показать все конфиги, вдруг опечатка какая, или символ лишний где стоит.
и под root лучше не входить в систему кстати.

alsoijw

Цитата: nextiter от 10 августа 2016, 10:19:36Сделано:
модуль PAM, написанный на питоне
Ищем где в коде находится ожидание нажатия клавиши и удаляем(коментируем эту строку)
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

nextiter

Цитата: endru от 10 августа 2016, 10:46:27Авторизация в домене чтоли? если да, то смотри в сторону kerberos.
права выставлены правильно на custom_linux_auth.py?
а по хорошему нужно показать все конфиги, вдруг опечатка какая, или символ лишний где стоит.
и под root лучше не входить в систему кстати.

Авторизация нет, не в домене. Либо будет самописная серверная часть, либо обращение к API СКУД.
Права стоят 777.
Какие конфиги нужны? Те которые я менял - их выложил.
Про root, оно всё верно, это тестовая машина, пока что так удобней.

endru

Цитата: alsoijw от 10 августа 2016, 10:52:15Ищем где в коде находится ожидание нажатия клавиши и удаляем(коментируем эту строку)
Нажатие клавиши или кнопки... Если искать, но наверное в исходниках lightdm) почему то мне так кажется. DE ждет нажатия кнопки перед авторизацией....

nextiter

#5
Цитата: alsoijw от 10 августа 2016, 10:52:15Ищем где в коде находится ожидание нажатия клавиши и удаляем(коментируем эту строку)
В коде нет ожидания нажатия клавиши.
Была отправка через сокеты ID карты и ожидание ответа, но это могло лишь вызвать небольшую задержку, но я всё же удалил весь код, оставил только минимум, и все равно появилось окно с вводом логина\пароля


#!/usr/bin/env python
# -*- coding: utf-8 -*-
def pam_sm_authenticate(pamh, flags, argv):
    pamh.user = 'root'
    return pamh.PAM_SUCCESS


def pam_sm_setcred(pamh, flags, argv):
    return pamh.PAM_SUCCESS


def pam_sm_acct_mgmt(pamh, flags, argv):
    return pamh.PAM_SUCCESS


def pam_sm_open_session(pamh, flags, argv):
    return pamh.PAM_SUCCESS


def pam_sm_close_session(pamh, flags, argv):
    return pamh.PAM_SUCCESS


def pam_sm_chauthtok(pamh, flags, argv):
    return pamh.PAM_SUCCESS



Cообщение объединено 10 августа 2016, 12:19:14

Цитата: endru от 10 августа 2016, 10:58:36Если искать, но наверное в исходниках lightdm) почему то мне так кажется
Именно! А исходники lightdm...
Мог бы я в исходники lightdm, не задавал бы я таких вопросов :)
Но и одна мысль мне не дает покоя: есть же автологин, но он у меня не работает. Пожалуй поставлю в виртуалку такой же дебиан и добьюсь того, чтобы работал автологин, а уже потом сделаю авторизацию чрез мой PAM модуль.
Но это не конец, если есть у кого-либо мысли, как сделать это красиво - прошу, поделитесь идеей!

endru

Цитата: nextiter от 10 августа 2016, 11:06:30Именно! А исходники lightdm...
а что исходники? исходники есть всегда доступны. другой вопрос: кто будет в них разбираться и править?  :) :)

nextiter

Так. lightdm настроить на автологин не получилось. Получилось в виртуалке настроить автологин для гномьего gdm и на тестовой машине автологин в SLIM. Но возник другой вопрос:
Человек по смарт-карте логинится (пока только надеемся, что логинится), но тут он уходит в туалет или на обед и блокирует машину. Приходит, а там снова запрос логина и пароля и всё то же нажатия Entera.
А вопрос в том - как передать управление автологину после снятия блокировки\выхода из сна\выхода из ждущего режима\после заставки ?

nextiter

lightdm получилось настроить на автологин. Теперь модуль работает как надо.
Появился еще ряд вопросов:
Автологин сразу передает управление моему PAM-модулю, тот постоянно ждет приложенной смарт-карты, и когда она приложена - отправляет данные с неё на сервер для проверки. Так он делает до тех пор, пока не будет приложена карта, по которой разрешен вход. Вместо экрана входа (поля для логина с паролем), нет вообще никакого экрана. Просто всё черным-черно (оно и понятно, это же автологин). И вот собственно вопрос - как поставить какую-нибудь картинку на автологин (типа: Приложите карточку).
Еще при блокировке ПК, а точнее при разблокировке запрашивается логин с паролем, а хотелось бы их убрать или заменить на что-то типа автологина. Программу, которая сразу пускает пользователя, но которой можно указать свой модуль аутентификации.
Буду рад любой помощи.