Аутентификация по лицу в стиле Windows Hello™ для Linux HowDy

Linux и распознавание по лицу, что может быть проще?
Проект HowDy даёт такую возможность нам.

GitHub - boltgolt/howdy: 🛡️ Windows Hello™ style facial authentication for Linux
🛡️ Windows Hello™ style facial authentication for Linux - GitHub - boltgolt/howdy: 🛡️ Windows Hello™ style facial authentication for Linux

Данный софт позволяет использовать реализацию схожую на Windows Hello™, но всё же менее безопасную, чем оригинальная, даже при использовании IR камеры. Прежде чем я расскажу, как использовать данных софт, напишу все мысли и что хотят сделать в будущих обновлениях программы и главное о текущих минусах.

⚠️
Безопасность хуже, чем в Windows Hello™
  1. Первый минус - система авторизует любой запрос без вашего согласия. Самая типичная проблема c распознаванием по лицу - вы всегда смотрите на монитор. А значит если вы запустите вирус требующий sudo - у вас будут просто доли секунды отвернуться от монитора иначе же любой sudo rm -rf / (ну только не надо выполнять, да? Переустанавливать всё придётся) запрашивает "пароль" распознаёт ваше лицо и исполняется. Это ОЧЕНЬ опасно.
  2. Систему можно обмануть фотографией подготовленной для IR камеры - то есть ч/б изначальное, чтобы камера увидела вас. Тем более не стоит использовать систему с обычной вебкамерой, для неё хватит даже телефона с себяшкой. Так как IR камеры не могут "видеть" обычные экраны устройств.
  3. Даже IR камеры для Windows Hello™ работают проверки реальности, по словам автора программы: В оригинале используется два ИК-излучателя для создания трехмерного изображения вашего лица, что является гораздо более безопасным. Для этого камера подсвечивает ваше лицо левым излучателем на четных кадрах и использует правый излучатель на нечетных кадрах. При этом лицо будет освещено под немного разными углами по разному, что невозможно подделать, просто распечатав 2D-фотографию. К сожалению HowDy не может контролировать IR для воссоздания даннрй проверки.
Цветное фото обычной камеры и IR камеры справа. Источник

Так что крайне не рекомендую использовать данную систему на рабочих компьютерах. И дома быть осторожным с ней из-за п.1

Из плюсов - система работает и работает на удивление быстро и хорошо. Может работать с обычной камерой тоже, но нужно помнить про п.2 и легкость подделки. С одной стороны всё не так плохо, как кажется. Текущей является вторая версия данной программы. В третью версию делают и добавили такие фичи, такие как - кивнуть для подтверждения или подтвердить намерение кнопкой на клавиатуре, что как раз должно решить п.1 безопасности, самый критичный, как по мне. Добавлен GUI интерфейс для удобства настройки лиц и выбора камеры, если у Вас их много, как у меня. Так же в третью версию добавили разные сценарии, а так же написать свои. Одна маленькая ложка дёгтя тут - её пишут уже 2 года и всё никак не допишут.

Установка

Для начала переходим на ссылку из начала статьи ищем свой дистр и как поставить. Устанавливаем согласно инструкциям. Я не буду описывать тут этот процесс у всех есть возможность нажать перевод, если не можете в английский. Главное это дополнительные ссылки для вашего дистрибутива, как добавить howdy в PAM (центральная система аутентификации). Я лишь покажу на примере fedora.
Переходим по ссылке сразу в COPR репозиторий

# Включаем COPR репозиторий 
dnf copr enable principis/howdy

# Устанавиливаем
dnf --refresh install howdy

Далее уже можете попробовать запустить

sudo howdy test

И проверить работу. Если всё хорошо, можно прыгнуть сразу на добавление пользователя.

У меня же технически так вышло 4 камеры подключено 2+2 в 2 устройствах. И HowDy не понимал, какую использовать, если у вас так же не распозналось ничего продолжаем.
Первое смотрим все видео устройства

╰─ ls -ltrh /dev/video*
crw-rw----+ 1 root video 81, 1 Jul 25 11:15 /dev/video1
crw-rw----+ 1 root video 81, 0 Jul 25 11:15 /dev/video0
crw-rw----+ 1 root video 81, 2 Jul 25 11:15 /dev/video2
crw-rw----+ 1 root video 81, 5 Jul 25 11:15 /dev/video5
crw-rw----+ 1 root video 81, 4 Jul 25 11:15 /dev/video4
crw-rw----+ 1 root video 81, 3 Jul 25 11:15 /dev/video3
У меня в итоге аж 6 устройств виртуальных

Если мы хотим понять, что есть что. Можно установить

sudo dnf install v4l-utils

v4l-utils и сделать запрос уже по устройствам

╰─ v4l2-ctl --list-devices
3D Camera: eTronVideo (usb-0000:00:14.0-3.1):
	/dev/video0
	/dev/video1
	/dev/media0

Logitech BRIO (usb-0000:00:14.0-8.4):
	/dev/video2
	/dev/video3
	/dev/video4
	/dev/video5
	/dev/media1
У меня 2 устройства. В одном 2 вируальных устройства, в другом аж 4.

Теперь, в моём случае, нужно понять, какой именно нужен. Можно воспользоваться старым добрым перебором. Можно сделать запрос на понимание, что является чем.

media-ctl -d /dev/media1 --print-dot | dot -Tpng > media1.png
media-ctl -d /dev/media0 --print-dot | dot -Tpng > media0.png
Делаем запросы, на представление устройств
Это у меня 3D камера, video1 так сказать чистый поток, video0 обработанный.
А вот это Logitech BRIO. Тут видно что есть обширный процессинг и мне нужны потоки video2 или video4

Из диаграмм стало понятно, что есть только video2 и video4, которые мне нужны в реальности. Дальше уже старый добрый перебор помог понять, что камера с активацией IR это video4, проверял заменой device_path в блоке [video], который можно редактировать, введя команду sudo howdy config прописываем полный путь. У меня это /dev/video4

И так камера у нас заработала. Ура.

Добавляем пользователя

Добавление происходит простой командой

sudo howdy add

И далее просто смотреть в камеру.

Очистить все лица можно командой sudo howdy clear

Настройка системы для работы

Если вы хотите, чтобы можно было не вводить пароль для sudo
открываем /etc/pam.d/sudo и вписываем строчку перед всеми.

auth       sufficient   pam_python.so /lib64/security/howdy/pam.py

Для входа систему делаем так же, только вставим уже в файлы
Gnome - gdm - /etc/pam.d/gdm-password
sddm - /etc/pam.d/sddm
kde - /etc/pam.d/kde

пример для GDM, но суть, что вставить второй строкой

Немного исправлений если они потребуются для входа в систему именно.

chmod o+x /lib64/security/howdy/dlib-data
Это чтобы можно было запускать всем howdy, даже если не root

Второе это SELinux победить для Fedora

Создать где угодно howdy.te  файл с содержимым:

module howdy 1.0;

require {
    type lib_t;
    type xdm_t;
    type v4l_device_t;
    type sysctl_vm_t;
    class chr_file map;
    class file { create getattr open read write };
    class dir add_name;
}

#============= xdm_t ==============
allow xdm_t lib_t:dir add_name;
allow xdm_t lib_t:file { create write };
allow xdm_t sysctl_vm_t:file { getattr open read };
allow xdm_t v4l_device_t:chr_file map;

А дальше выполнить компиляцию и применение данного правила

checkmodule -M -m -o howdy.mod howdy.te
semodule_package -o howdy.pp -m howdy.mod
semodule -i howdy.pp

Итог

Система работает и работает не плохо, используйте её с умом.

Из интересного, howdy работает на базе библиотеки dlib, больше возможностей данной библиотеки можно увидеть тут

Facial Detection and Recognition With Dlib | Width.ai
Dlib is a versatile and well-diffused facial recognition library, with perhaps an ideal balance of resource usage, accuracy and latency, suited for real-time face recognition in mobile app development. It’s becoming a common and possibly even essential library in the facial recognition landscape, an…

Из интересных проектов которые могут вас заинтересовать

GitHub - anandpathak/AnimeAvataar: creating Anime Avataar from a facial image
creating Anime Avataar from a facial image. Contribute to anandpathak/AnimeAvataar development by creating an account on GitHub.