Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Ubuntu 16.04 Способ реализации автоматического логина по RFID  (Прочитано 1352 раз)

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

Оффлайн Andrey_Ryzhov

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Здравствуйте!

Имею идею, защитить свою рабочую станцию модулем RFID и Arduino. С реализацией устройства проблем не возникнет, однако...

Я прошу совета в реализации т.н. "Автологина". Дело в том, что на раб. станции есть учетная запись с паролем (локальная, никаких там доменов и пр.) И я хочу, чтобы устройство (на микроконтроллере AVR - Arduino), при чтение RFID брелка проводило ассоциацию ID чипа и  - передавала (допустим через Bash посредствам COM порта) либо какой нибудь ключ либо логин и пароль. В любом случае - это сделать не проблема. Проблема в том, что надо как-то заставить Bash скрипт впоследствии взаимодействовать с системой Ubuntu. Проще говоря, он должен будет подкинуть ей логин и пароль и войти в систему с запуском GUI и вообще - как положено.
Проблема еще в том, что я хочу сохранить возможность обычного входа, т.е. входа по паролю, без RFID.

Посоветуйте, как лучше передать системе логин и пароль. Может как-то getty прикрутить? Или есть способ запустить Bash скрипт при запуске системы и как-нибудь подсунуть ей данные через сам скрипт?
Может сложится впечатление изобретения велосипеда, однако вводить пароль каждый раз лень (проще приложить брелок) да и процесс создания несет некую интересную составляющую.

Заранее спасибо!
« Последнее редактирование: 15 Мая 2018, 12:35:46 от Andrey_Ryzhov »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28365
    • Просмотр профиля
Посмотрите в сторону того, как реализованы системы авторизации по USB-ключу.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Andrey_Ryzhov

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Спасибо за ответ, однако по USB теме, используют pamusb, а он на питоне, в котором я не очень силен, по крайней мере пока.
Я просто хотел узнать, можно ли системе подсунуть логин и пароль с помощью Bash скрипта, чтобы она выполняла вход с этими данными. Я полагаю, так как это Linux, это не очень тривиально, и для людей с этого форума, которые, я полагаю, знают Ubuntu вдоль и поперек, не будет проблемой подсказать решение этого вопроса.

Оффлайн ecc83

  • Старожил
  • *
  • Сообщений: 2121
  • Ubuntu Mate 22.04 LTS
    • Просмотр профиля
"Подсунуть" логин и пароль врят ли получится, а вот разрешить/запретить безпарольный вход, пожалуй возможно.

Если используется менеджер дисплея lightdm, то можно поступить так:

Чтобы разрешить безпарольный вход, необходимо создать конфиг файл по пути /etc/lightdm/lightdm.conf с таким содержимым:

[Seat:*]
autologin-guest=false
autologin-user=имя_пользователя
autologin-user-timeout=0
allow-guest=false

Сам сервис запускается с помощью systemd юнита /lib/systemd/system/lightdm.service
Внутри этого файла есть строка:

ExecStart=/usr/sbin/lightdm
Нужно изменить эту строку например так:

ExecStart=/usr/sbin/lightdm_nopass
и по пути /usr/sbin нужно создать собственный скрипт с именем lightdm_nopass , у которого в последней строке будет запуск сервиса, а перед ней можно по какому либо условию создавать, удалять или модифицировать конфиг /etc/lightdm/lightdm.conf


Примерное содержимое /usr/sbin/lightdm_nopass

#!/bin/bash

# Тут что то меняем, копируем, анализируем или удаляем,
# в общем любые фантазии

if [ -f /etc/lightdm/lightdm.conf ]; then rm -f /etc/lightdm/lightdm.conf; fi

# Тут запуск графического интерфейса
/usr/sbin/lightdm

Не забыть сделать свой скрипт исполняемым:

sudo chmod +x /usr/sbin/lightdm_nopass
« Последнее редактирование: 16 Мая 2018, 17:24:19 от ecc83 »

Оффлайн hesoyamatogun

  • Активист
  • *
  • Сообщений: 347
    • Просмотр профиля
Подсунуть" логин и пароль врят ли получится,
Да ну?

Сделайте решение в лоб.
Вешайте консоль на уарт. Та выдаёт Ligin: или нечто подобное. Микроконтроллер это дело слушает, приходит к выводу что компьютер работает и МК ждет от RFID-сканера ключа. Если ключ RFID принят то МК шлет необходимую для логана символьную последовательность в уарт.
Ну а дальше утилита логин запускает не баш а к примеру тот самый автологан на клаво-мониторную консоль, что расписал предыдущий комрад.
Однако перехватить можно логическим анализатором. Но если под пломбы то не очень страшно. Но направления понятно. Вариаций миллион.
« Последнее редактирование: 16 Мая 2018, 17:04:21 от hesoyamatogun »

Оффлайн Andrey_Ryzhov

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Благодарю за идеи!

Тов. ecc83, судя по контексту, Вы предлагаете следующий алгоритм:
1. При старте, через  /lib/systemd/system/lightdm.service, запускаем кастомный скрипт lightdm_nopass.sh
2.1. Если от МК пришел сигнал разрешения авторизации (мы его ждем), то мы подменяем оригинальный lightdm.conf, нашим lightdm.conf, где включен автологин.
2.2. В случае ошибки авторизации, оставляем lightdm.conf в покое и далее пользователь вынужден входить по паролю.
3. В скрипте поднимаем /usr/sbin/lightdm и он, подтягивая модифицированный lightdm.conf, входит без пароля как и задумано ну или использует оригинальный conf если была ошибка авторизации.
4. PROFIT

Честно сказать, я читал про автологин без пароля, но ума не хватило подумать и прикрутить такой способ реализации с подменой конфига. Мне эта идея нравится, спасибо Вам!

Тов. hesoyamatogun, Ваша-же идея тоже интересна, но:
1. Как повесить консоль на COM?
2. Я так понял, после приема ключа, утилита Login, все равно запустит lightdm с подмененным lightdm.conf?
Если так, то в принципе, реализации похожи, только там промежуточно работает bash скрипт, который делает подмену файлов. Опять-же, надо давать утилите Login, понять какой conf грузить. Да и кто, как не скрипт, будет заниматся анализом ключа и подменой conf файла?

В общем, пища для размышления есть, буду потихонечку курить этот материал, постепенно отрабатывая на практике. Сначала можно вовсе без RFID (чтобы МК по событию слал какой нибудь ключ в COM) а там и RFID прикрутить не долго.

Спасибо за подсказки!

Оффлайн hesoyamatogun

  • Активист
  • *
  • Сообщений: 347
    • Просмотр профиля
>>1. Как повесить консоль на COM?
Попробуйте дать ядру команду console=ttyS0. На этом должно быть всё. Но я делал по другому.
Вообе посмотрите каталог /etc/systemd/system/getty.target.wants/ и некоторые моменты станут яснее.
Обратите внимание на строку ExecStart=, файла serial-getty@ttyS*в вышеупомянутом каталоге. Это и есть команда запуска "консоли на КОМ" здесь и сейчас. Только вместо переменной %I поставить файл порта.
Можно заюзать еще minicom, но я его уже не застал.
Да просто выполните:
systemctl start serial-getty@ttyS0.serviceЕсли сейчас же с КОМ-порта не вывалится Login as:, всех их расстрелять!
>>Я так понял, после приема ключа, утилита Login...
Утилита Login примет, или не примет собственно логин, символ возврата каретки, пароль, и опять интер. Ключ, я так понимаю на карте, его примет картридер и по смоему каналу связи, 1-w,i2c,uart, передаст его вашей борде. А та в свою очередь сравнит его с базой, и ежели все ок, отправит по уарт в КОМ порт компа(через преобразователь ttl-rs232) ликвидный для данной машины логин-интер-пауза-пароль-интер. Другими словами телеграфом настучит уже зашитый в МК логин-пароль в комп.
Ну а дальше, когда произойдет логин(не важно через ком-порт или консоль), надобно как-то запустить графику на клаво-мониторную консоль. Через порт просто startx тут не проканает. Ей нужны или ключи или править этот скрипт.

Если вы хотите чтоб с карт-ридера шел ключ напрямую в комп(Зачем тогда борда, разве что преобразователь интерфейсов?), то надо смотреть может ли утилита ligin работать в таком режиме. Скорее всего она это умеет, как и с биометрией и другими интересными вещами, например голос или покривляться на камеру. Но мы с вами пока до этого еще не доросли. Ну а раз пишете под ардуину, напишите свой вариант логана под RFID. Они зараза все что мне попадались 1-wire'ные. Но это мелочи жизни.
« Последнее редактирование: 17 Мая 2018, 19:19:40 от hesoyamatogun »

Оффлайн Andrey_Ryzhov

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Тов. hesoyamatogun, я понял о чем Вы, однако очень много действий придется провернуть да и не очень хочется мне дергать tty0. Поэтому, я все таки придержусь первого варианта. Тем более, в вакууме (просто в системе, без связи с МК), я терпел успех. Остается только допилить скрипт на связь с контроллером и дело в шляпе.
Так-же играясь с Login и ttyS0, придется как-то реализовывать автологаут при блокировке, а так, через скрипт это реализовать не сложно. Он будет висеть в процессах и ждать от МК сигнала "Логаут" если пользователь на считывателе нажал кнопку "Логаут". Произойдет выход из системы и все пойдет сначала.

Оффлайн hesoyamatogun

  • Активист
  • *
  • Сообщений: 347
    • Просмотр профиля
Если ваш считыватель имеет USB c дровами или rs-232 то ясно дело в шляпе.
У вас ардуина упомяналась для чего то.

Оффлайн ecc83

  • Старожил
  • *
  • Сообщений: 2121
  • Ubuntu Mate 22.04 LTS
    • Просмотр профиля
Тов. ecc83, судя по контексту, Вы предлагаете следующий алгоритм:
1. При старте, через  /lib/systemd/system/lightdm.service, запускаем кастомный скрипт lightdm_nopass.sh
2.1. Если от МК пришел сигнал разрешения авторизации (мы его ждем), то мы подменяем оригинальный lightdm.conf, нашим lightdm.conf, где включен автологин.
2.2. В случае ошибки авторизации, оставляем lightdm.conf в покое и далее пользователь вынужден входить по паролю.
3. В скрипте поднимаем /usr/sbin/lightdm и он, подтягивая модифицированный lightdm.conf, входит без пароля как и задумано ну или использует оригинальный conf если была ошибка авторизации.
4. PROFIT

Совершенно верно. Разумеется возможны и другие способы, но по мне, чем проще, тем надёжнее.

Оффлайн Andrey_Ryzhov

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
 hesoyamatogun, ардуина - и есть мой "считыватель с USB" :) Я не имею фабричных кард-ридеров и это будет просто - самопал. Который будет использоваться в качестве кард-ридера. Ибо RFID модулей для ардуины - навалом. Просто - Дешево - Сердито

Оффлайн hesoyamatogun

  • Активист
  • *
  • Сообщений: 347
    • Просмотр профиля
У меня тоже похожий проектик так что с вашего позволения воткнусь со своим вопросом.
ecc83 ты знаешь.
Залогиневшись через ssh или через ком-порт, как запустить startx (от залогиневшегося юзера) Чтоб startx запустился на мониторе как будто его ввели с консоли а не с терминала.
Всего то.

Оффлайн Andrey_Ryzhov

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
hesoyamatogun, хороший вопрос... я, пожалуй, послушаю. Иксы конечно поднимать не хочу, но вот узнать, будет полезно.

В свою очередь.. я тут подумал. А вот скрипт стартует через /lib/systemd/system/lightdm.service. А если я выйду из системы (без перезагрузки), через какую ноду мне надо дергать этот скрипт, чтобы опять войти автоматически? /lib/systemd/system/lightdm.service, я так понимаю, уже не стартанет ибо уже запущена?

Оффлайн ecc83

  • Старожил
  • *
  • Сообщений: 2121
  • Ubuntu Mate 22.04 LTS
    • Просмотр профиля
через какую ноду мне надо дергать этот скрипт, чтобы опять войти автоматически?

Если сервис lightdm остаётся запущеным, то ничего не измениться, конфиг тоже остается прежний.

 

Страница сгенерирована за 0.057 секунд. Запросов: 25.