Блог "Дети ОИТа"
/поиск

fprint

Современные ноутбуки и даже некоторые настольные системы оснащаются встроенными сканерами отпечатков пальцев. В Linux для работы с такими устройствами используется стек fprint — набор библиотек и утил

Современные ноутбуки и даже некоторые настольные системы оснащаются встроенными сканерами отпечатков пальцев. В Linux для работы с такими устройствами используется стек fprint — набор библиотек и утилит, позволяющих регистрировать отпечатки и использовать их для аутентификации через PAM (Pluggable Authentication Modules) reference:0. Центральным компонентом этого стека является демон `fprintd` — сервис D-Bus, управляющий сканером и базой данных отпечатков reference.

В этой статье мы рассмотрим полный цикл настройки аутентификации по отпечатку пальца в Linux: от проверки совместимости оборудования до интеграции с системой входа, sudo, экранной блокировкой и графическими окружениями.

1.1. Английские сокращения

Сокращение Английское обозначение Русское обозначение
PAM Pluggable Authentication Modules Подключаемые модули аутентификации
D-Bus Desktop Bus Шина рабочего стола
fprintd Fingerprint daemon Демон отпечатков пальцев
libfprint Fingerprint library Библиотека для работы со сканерами
USB Universal Serial Bus Универсальная последовательная шина
SPI Serial Peripheral Interface Последовательный периферийный интерфейс
GDM GNOME Display Manager Дисплейный менеджер GNOME
SDDM Simple Desktop Display Manager Простой дисплейный менеджер
LightDM Light Display Manager Лёгкий дисплейный менеджер
Polkit PolicyKit Набор инструментов для управления правами
CVE Common Vulnerabilities and Exposures Общие уязвимости и экспозиции

1.2. Русские сокращения

Сокращение Обозначение
БА Биометрическая аутентификация
ДО Дисплейный менеджер (экранный менеджер входа)
СМ Сканер отпечатков пальцев
ПМ Подключаемые модули аутентификации
ЗГ Запись отпечатка (регистрация)
ПР Проверка отпечатка

2.1. Поддерживаемые устройства

Проект fprint поддерживает широкий спектр сканеров отпечатков пальцев — как встроенных в ноутбуки, так и внешних USB-устройств. Актуальный список поддерживаемых устройств можно найти на официальном сайте: https://fprint.freedesktop.org/supported-devices.html.

Важно: список поддерживаемых устройств обновляется нерегулярно и не является полным. Даже если ваше устройство отсутствует в списке, стоит попробовать настроить его — возможно, поддержка уже добавлена в более новой версии libfprint.

2.2. Определение модели сканера

Чтобы узнать, какой сканер установлен в вашей системе, используйте команду `lsusb`:

lsusb | grep -iE "fingerprint|biometric|goodix|synaptics|elan|validity"

Пример вывода для поддерживаемого устройства:

Bus 001 Device 004: ID 06cb:00bd Synaptics, Inc. Prometheus MIS Touch Fingerprint Reader
Bus 001 Device 003: ID 04f3:0c1a Elan Microelectronics Corp. ELAN:Fingerprint

Для получения более подробной информации об устройстве можно использовать:

lsusb -v -d [vendor:product]

2.3. Особые случаи: альтернативные версии libfprint

Некоторые сканеры требуют специальных версий библиотеки libfprint:

  • libfprint-tod — для сенсорных сканеров (touch-based sensors)
  • libfprint-elanmoc2 — для некоторых устройств ELAN, ожидающих слияния с основной веткой
  • python-validity — для сканеров Validity (например, 138a:009d)

Если ваш сканер не работает с основной версией libfprint, поищите соответствующий форк в репозиториях вашего дистрибутива или на AUR (для Arch Linux).

2.4. Диаграмма: архитектура стека fprint

@startuml
title Архитектура стека fprint
rectangle "Пользовательское пространство" as user {
  rectangle "Приложения\n(GNOME Settings, KDE System Settings)" as apps
  rectangle "Команды CLI\n(fprintd-enroll, fprintd-verify)" as cli
  rectangle "PAM-модуль\n(pam_fprintd.so)" as pam
}
rectangle "Системный уровень" as system {
  rectangle "Сервис D-Bus\n(fprintd.service)" as dbus
  rectangle "Библиотека libfprint" as lib
}
rectangle "Аппаратный уровень" as hw {
  rectangle "Сканер отпечатков\n(USB/SPI)" as scanner
}
apps -down-> dbus : "D-Bus"
cli -down-> dbus : "D-Bus"
pam -down-> dbus : "D-Bus"
dbus -down-> lib : "использует"
lib -down-> scanner : "управляет"
note right: Взаимодействие с аппаратурой\nосуществляется через libfprint,\nкоторая поддерживает различные\nдрайверы сканеров.
@enduml

3.4. ALT Linux

apt-get install libfprint2 fprintd pam_fprintd

3.6. Проверка работоспособности fprintd

После установки убедитесь, что сервис fprintd доступен. В современных системах он запускается по требованию через D-Bus, поэтому команда `systemctl status` может показывать неактивный статус — это нормально reference:9.

systemctl status fprintd

Если требуется запустить сервис вручную:

sudo systemctl start fprintd
sudo systemctl enable fprintd  # для автозапуска при загрузке

4.1. Основы fprintd-enroll

Для регистрации отпечатка используется команда `fprintd-enroll` reference:10. По умолчанию она запрашивает пароль текущего пользователя, а затем начинает запись правого указательного пальца reference:11.

fprintd-enroll

Процесс регистрации требует несколько касаний сканера (обычно 5–6) под разными углами. Успешное касание подтверждается сообщением `Enroll result: enroll-stage-passed`; завершение — `Enroll result: enroll-completed` reference:12.

4.2. Выбор конкретного пальца

Для регистрации другого пальца используйте опцию `-f`:

fprintd-enroll -f left-index-finger

Доступные названия пальцев:

  • `left-thumb`, `left-index-finger`, `left-middle-finger`, `left-ring-finger`, `left-little-finger`
  • `right-thumb`, `right-index-finger`, `right-middle-finger`, `right-ring-finger`, `right-little-finger`

4.3. Регистрация для другого пользователя

Для регистрации отпечатка для другого пользователя укажите его имя:

sudo fprintd-enroll username

4.4. Просмотр зарегистрированных отпечатков

fprintd-list

Для просмотра отпечатков другого пользователя:

sudo fprintd-list username

4.5. Удаление отпечатков

Удаление всех отпечатков текущего пользователя:

fprintd-delete $(whoami)

Удаление отпечатков root (если случайно зарегистрировали):

sudo fprintd-delete root

Удаление конкретного пальца:

fprintd-delete --finger right-index-finger $(whoami)

4.6. Проверка отпечатка

Для проверки корректности регистрации используйте `fprintd-verify`:

fprintd-verify

Если отпечаток распознаётся, команда завершится успешно.

5.1. Общие принципы PAM

PAM (Pluggable Authentication Modules) — это система, управляющая аутентификацией в Linux. Для включения аутентификации по отпечатку необходимо добавить модуль `pam<sub>fprintd</sub>.so` в соответствующие файлы конфигурации PAM reference:14.

5.2. Автоматическая настройка через pam-auth-update (Debian/Ubuntu)

В Debian и Ubuntu проще всего использовать утилиту `pam-auth-update`:

sudo pam-auth-update

В появившемся диалоге отметьте «Fingerprint authentication» и нажмите OK reference:15.

Или через командную строку:

sudo pam-auth-update --enable fprintd

5.3. Ручная настройка PAM

Для ручной настройки добавьте строку `auth sufficient pam<sub>fprintd</sub>.so` в начало секции `auth` нужного PAM-файла reference:16.

Пример для `/etc/pam.d/system-local-login`:


auth        sufficient  pam_fprintd.so
auth        include     system-login
...

Этот подход работает для любых PAM-сервисов: `login`, `gdm`, `lightdm`, `sddm`, `sudo`, `su`, `polkit` и других.

5.4. Настройка для SDDM

Для SDDM следуйте инструкциям в статье https://wiki.archlinux.org/title/SDDM#Using_a_fingerprint_reader.

5.5. Настройка для GDM

GDM обычно уже поддерживает аутентификацию по отпечатку. Если опция не появилась, проверьте, что ваш пользователь добавлен в группу `input` :

sudo usermod -aG input $USER

5.6. Настройка для sudo

Для использования отпечатка при выполнении команд с sudo добавьте в начало `/etc/pam.d/sudo`:

auth        sufficient  pam_fprintd.so

Теперь при выполнении `sudo` сначала будет запрошен отпечаток, а если он не распознан или не зарегистрирован — пароль.

5.7. Настройка для Polkit

Polkit требует отдельной настройки. Скопируйте файл правил:

sudo cp /usr/share/polkit-1/rules.d/50-default.rules /etc/polkit-1/rules.d/50-fingerprint.rules

Отредактируйте его, заменив группу `wheel` на вашу основную группу (обычно `wheel` или `sudo`).

5.8. Настройка для экранной блокировки (swaylock)

Для swaylock можно использовать следующую конфигурацию `/etc/pam.d/swaylock`:


auth sufficient pam_unix.so nullok

auth sufficient pam_fprintd.so ignore-empty-password
auth required pam_deny.so

Это позволяет разблокировать экран как по паролю, так и по отпечатку.

5.9. Диаграмма: процесс аутентификации через PAM

@startuml
title Процесс аутентификации через PAM с fprintd
participant "Приложение" as App
participant "PAM" as PAM
participant "pam_fprintd.so" as Module
participant "fprintd (D-Bus)" as Daemon
participant "Сканер" as Scanner

App -> PAM : запрос аутентификации
PAM -> Module : вызов модуля
Module -> Daemon : запрос сканирования через D-Bus
Daemon -> Scanner : сканирование отпечатка
Scanner --> Daemon : результат
Daemon --> Module : успех/неудача
alt Отпечаток распознан
    Module --> PAM : success
    PAM --> App : аутентификация пройдена
else Отпечаток не распознан
    Module --> PAM : ignore (fallback)
    PAM -> PAM : следующий модуль (пароль)
    PAM --> App : результат
end
@enduml

6.1. GNOME

В GNOME настройка отпечатков доступна через «Настройки» → «Пользователи» → «Аутентификация по отпечатку».

6.2. KDE Plasma

В KDE Plasma настройка доступна через «Системные настройки» → «Пользователи» → «Настроить аутентификацию по отпечатку».

6.3. Работа с экранной блокировкой

После настройки PAM для соответствующего сервиса (например, `lightdm`, `gdm`, `kscreenlocker`) отпечаток будет работать и для разблокировки экрана.

7.1. Ошибка при регистрации: «unknown error»

При длительной неудачной регистрации может возникнуть ошибка «unknown error». Решение: перезагрузите компьютер.

7.2. fprintd мешает регистрации от имени обычного пользователя

Иногда фоновый процесс `fprintd` от root мешает регистрации. Временно остановите его:

sudo pkill fprintd

Затем повторите попытку регистрации.

7.3. Сканер не определяется

Проверьте, что устройство видно в системе:

lsusb

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

7.4. Отпечаток не работает после выхода из режима сна

После выхода из сна может потребоваться перезапуск fprintd:

sudo systemctl restart fprintd

В некоторых случаях также помогает перезапуск PAM-сессии (например, перелогин).

7.5. Отпечаток работает в sudo, но не в Polkit

Проверьте настройку Polkit (см. раздел 5.7).

7.6. Проблемы с Validity VFS7500

Для некоторых сканеров Validity может потребоваться использование `python-validity` или других форков.

7.7. Анализ логов fprintd

Для диагностики проблем используйте журнал fprintd:

journalctl -u fprintd.service -p7

8.1. Предупреждение безопасности

Использование только аутентификации по отпечатку для `su`, `polkit` или `sudo` представляет угрозу безопасности, так как фоновые процессы могут получить разрешения без явного запроса отпечатка (CVE-2024-37408). Рекомендуется всегда оставлять возможность ввода пароля как запасной вариант.

8.2. Хранение данных

Отпечатки хранятся в `/var/lib/fprint/` и доступны только root. Для каждого пользователя создаётся отдельная директория с шаблонами.

8.3. Связка ключей (Gnome Keyring, KDE Wallet)

Если вы используете отпечаток для входа, вам всё равно потребуется ввести пароль для разблокировки связки ключей, если она зашифрована паролем.

8.4. Надёжность

Качество регистрации зависит от состояния кожи и сканера. Сухая или повреждённая кожа может ухудшить качество шаблона.

  1. Определите модель вашего сканера с помощью `lsusb`. Проверьте, поддерживается ли он в списке libfprint.
  2. Установите fprintd и зарегистрируйте два пальца.
  3. Настройте PAM для использования отпечатка при входе в систему (через GDM или LightDM).
  4. Настройте `sudo` для использования отпечатка.
  5. Проверьте работу отпечатка после перезагрузки и после выхода из сна.

fprintd предоставляет удобный и безопасный способ использования биометрической аутентификации в Linux. Правильная настройка включает проверку совместимости оборудования, регистрацию отпечатков, настройку PAM и интеграцию с графическими окружениями. Несмотря на некоторые ограничения (необходимость пароля для связки ключей, возможные проблемы после сна), современный стек fprintd работает стабильно на большинстве поддерживаемых устройств.

Все команды выполняются в терминале. Для регистрации и управления отпечатками не требуются права root (если не указано иное). Некоторые команды могут потребовать перезагрузки или перелогина для применения изменений в группах (например, `input`).