Как добавить логин на основе распознавания лиц в ubuntu / linux? - PullRequest
0 голосов
/ 16 сентября 2018

Я написал код (на python) для определения моего лица. Теперь я хочу добавить эту функцию для входа в мою систему Ubuntu. Я искал по интернету, но не могу найти подходящих ответов.

Я хочу отобразить опцию / значок, чтобы выбрать распознавание лиц, и при нажатии на него мой код распознавания лиц начинает работать в фоновом режиме. Как мне этого добиться? Пожалуйста, объясните, где именно мне нужно внести изменения в систему Ubuntu для включения и использования такой опции?

1 Ответ

0 голосов
/ 24 марта 2019

Вы захотите использовать Linux-PAM, чтобы позволить вам Su / Sudo, используя распознавание лиц.Я сделал это с помощью Python + скрипт bash здесь: https://github.com/lambrou/susentry Я принял участие в моем README и объясню его вам в контексте вашего вопроса.

Первое, что вам понадобитсясделать, это сделать скрипт bash, который вызывает ваш скрипт Python.

#!/bin/bash

# You must change the value /path/to/susentry.py to the path of your
# python file.
export DISPLAY=:0.0
xhost +local:
python3 /path/to/susentry.py -l # run the python script for facial recognition
exit_status=$? # This grabs the exit status of the python script we just ran
if [ "${exit_status}" -ne 0 ]; # checks to see if exit status is anything other than 0
then
    echo "exit ${exit_status}"
    exit 1 # exit status 1 on python script fail (exit 1)
fi
echo "EXIT 0"
exit 0 # exit 0 if we get to this line

То, что делает этот скрипт, устанавливает отображение на ваш дисплей, так как модуль PAM будет вызывать скрипт из другого пользовательского пространства, нам нужно будет сообщить ему, где находится ваш дисплей, и какой у вас xhostс помощью.Затем он захватывает состояние выхода вашего скрипта Python (убедитесь, что при распознавании лица происходит сбой, он выходит из 1, передайте его при выходе из 0) и передает его в PAM, чтобы он знал, прошел скрипт или нет.Найдите эту строку:

python3 /path/to/susentry.py -l

и измените /path/to/susentry.py на полный путь вашего скрипта python.Затем поместите этот файл в папку / usr / local / bin.

Далее мы изменим файл общего аутентификации PAM:

gksudo gedit /etc/pam.d/common-auth

Найдите эту строку в вашем файле обычного auth:

auth [success=1 default=ignore]     pam_unix.so nullok_secure

Эта строка вызывает модуль, запрашивающий у пользователя пароль.Если модуль возвращает успех (пароль правильный), он пропускает следующую строку (успех = 1 означает пропуск одной строки).Цель состоит в том, чтобы пропустить следующую строку, если аутентификация прошла успешно:

auth    requisite           pam_deny.so

Поскольку эта строка запрещает пользователю доступ к привилегиям.Итак, если вы хотите использовать su / sudo, но вместо ввода пароля вы используете сравнение лиц, поместите эту над строку выше:

auth [success=2 default=ignore]     pam_exec.so debug log=/path/to/pamlogs.txt /usr/local/bin/susentry

Убедитесь, что вы изменили / путь/to/pamlogs.txt куда вы хотите сохранить вывод PAM.(Этот вывод - вывод ошибок и вывод stdin из вашей PAM, вашего bash-скрипта и вашего python-скрипта) Давайте разберем это.

auth [success=2 default=ignore]

Средства "Если эта программа возвращает успех (выход 0), пропустите следующие 2 строки. (Строка запроса пароля, строка сбоя аутентификации)

pam_exec.so debug log=/path/to/pamlogs.txt

В этой части написано "используйте pam_exec для выполнения скрипта bash и отправьте все журналы ошибок / журналов stdin в /path/to/pamlogs.txt

/usr/local/bin/susentry

Эта часть является местоположением скрипта bash.Это то, для чего запускается PAM exec и ожидает код выхода.

Если скрипт распознавания лиц не работает, он должен обратиться к паролю.Обратите внимание, что вы должны быть осторожны при редактировании /etc/pam.d/common-auth, так как вы можете сломать sudo.Возможно, вы захотите открыть новый терминал с правами суперпользователя, пока возитесь с этим, чтобы вы могли отменить изменения.

...