Авторское право (С) 2004 Дмитрий Стефанков Дата: Май 2004 Версия: 1.1 PAM_BFP PAM (Pluggable Authentication Module) модуль с применением биометрической аутентификации по отпечаткам пальцев для аутентификации пользователя 1. Общее описание PAM_BFP модуль - это реальный PAM модуль для применения на любой Linux/Unix платформе. Это новый модуль для аутентификации пользователя с использованием новейших биометрических технологий как распозвание персоны по отпечатку пальца. PAM_BFP разработан с использованием BFP SDK. Вы должны иметь установленный BFP SDK для работы с PAM_BFP. Сам PAM_BFP модуль распространяется свободно с BSD-style лицензией. Возможно рассматривать этот PAM модуль как "Unix biometric logon or login", однако в отличие от биометрической аутентификации для Microsoft Windows PAM_BFP очень просто установить, использовать и настраивать стандартными способами для Unix платформ. Примечания. Пакет тестировался для следующих платформ: FreeBSD 4.9 RedHat Linux 6.2 RedHat Linux 9.0 Suse Linux 6.3 Suse Linux 7.3 Mandrake Linux 9.1 Debian Linux 2.2 2. Список файлов в составе пакета remote_scanner.c -- удаленный сервер для получения биометрического темплейта с локального сканера. Основная идея - использовать один сканер вместо нескольких, например, в серверных помещениях. maketmpl.c -- простая программа для построения темплейта для данного пользователя с использованием локального сканера. Затем полученный темплайт добавляется в каталог темплейтов для дальнейшей аутентификации. cryptcode.c -- шифровать/расшировать темплейт пользователя (Blowfish/OpenSSL) cryptcode.h -- определения функций netcode.c -- функции для работы в сети netcode.h -- определения функций pam_bfp.c -- PAM_BFP модуль pam_demo.c -- простое демо приложение как используется PAM makefile.unx -- makefile для сборки PAM_BFP readme.eng -- документация на английском языке readme.rus -- документация на русском языке config -- каталог примеров конфигурации и OpenSSL сертификатов/ключей freebsd -- примеры PAM конфигурации для FreeBSD linux -- примеры PAM конфигурации для Linux lock_fp -- закрыть терминал с добавленной биометрической аутентификацией (FreeBSD) 3. Сборка Получить помощь: # make -f makefile.unx help Собрать все: # make -f makefile.unx Сгенерить ключ сервера, иначе используйте стандартные шаги в OpenSSL: # make -f makefile.unx certs Примечание. В процессе сборки можно запретить поддержку OpenSSL библиотеки в makefile.unx __CRYPT__=0 и __SSL__=0 и комментированием строки SSL_LIBS= . 4. Установка Установить общий PAM_BFP модуль для Linux (generic): # make -f makefile.unx install-lnx Установить общий PAM_BFP модуль для Linux (Debian): # make -f makefile.unx install-debian Установить общий PAM_BFP модуль для FreeBSD: # make -f makefile.unx install-bsd Создать каталог, например, /usr/local/etc/auth_pam_bfp (это каталог по умолчанию для PAM_BFP). Установите права только для владельца на этот каталог (обычно,root): # chown u=rwx,go=-rwx /usr/local/etc/auth_pam_bfp Постройте темплейт для пользователя: # ./maketmpl username.tmpl Обратите внимание, что все файлы темплейтов должны иметь расширение .tmpl . Скопируйте этот темплейт в конфигурационный каталог. Повторите создание и копирование темплейтов для остальных пользователей. Для шифрования темплейта на встроенном ключе наберите: # ./maketmpl -k username.tmpl Для шифрования темплейта по ключевой фразе наберите: # ./maketmpl -p username.tmpl Скопируйте пример конфигурации и отредактируйте. Синтаксис формата описан ниже и в самом файле конфигурации. Для аутентификации с использованием локального сканера можно набрать следующее: local=1 timeout=4 level=300 account=root users="name1 name2" local=1 timeout=4 level=300 account=admin users="name3" Комментарии: local=1 использовать локальный сканер timeout=4 4-х секундный таймаут для считывания изображения со сканера (0=считать сразу) level=300 пороговое значение меры. Это достаточно низкий порог. В многих случаях рекомендуется 600 и выше. account=root реальное имя Unix бюджета users="name1 name2" список имен пользовательских темплейтов (без расширения) Для аутентификации с использованием удаленного сканера можно набрать следующее: local=0 timeout=4 level=300 account=root users="name1 name2" device=192.168.0.5 dport=5775 clients="computer1 computer2" local=0 timeout=4 level=300 account=admin users="name3" device=testme ssl=1 decrypt=1 Комментарии: device=192.168.0.5 имя или IP адрес. К этой машине присоединен сканер и удаленные компьютеры могут получить темплейт при сканировании изображения на этом сканере. dport=5775 TCP порт для соединения на сервере clients="computer1 computer2" список удаленных клиентов для использования этого сервиса. Настоятельно рекомендуется. ssl=1 использовать SSL протокол, однако сервер должен иметь также поддержку SSL протокола. Настоятельно рекомедуется. (По умолчанию, сервер принимает незащищенные соединения на порт 5575, а SSL соединения на порт 5576) decrypt=1 дешифровать темплейт на встроенном ключе в сеансе аутентификации Теперь смотрим как подкючить наш модуль в PAM конфигурации. Это достаточно быстро и просто. Для FreeBSD нужно добавить следующую строку в /etc/pam.conf прежде других login строк: login auth sufficient pam_bfp.so debug fp_prompt=1 Для отключения нашей аутентификации достаточно закомментировать эту строку. Запускаем пример для проверки PAM и наше : #./pam_demo test-account-name Положите палец на сканер в ходе запуска приложения (вы должны увидеть приглашение, если добавили директиву fp_prompt=1). Если ваш темплейт в базе(каталоге) и содержит список с вашим темплейтом, тогда вы должны быть успешно аутентифицированы. Рекомедуется сделать этот шаг для проверки, что вы имеете хороший темплейт и успешно распознаетесь. Иначе рекомендуется построить новый темплейт и повторить проверку. Теперь в реальную жизнь. Переключаемся на другую консоль. Выходим, если надо. Вводим имя бюджета из нашего файла конфигурации. Палец на сканер. У нас только N секунд для сканирования изображения. Если все успешно, то входим в систему. Иначе, увидим запрос для пароля согласно логики работы PAM. В этом случае посмотрите журнал authlog (Директива debug для PAM заставляет писать детальную отладочную информацию). Проверьте ваш конфигурационный файл или просто повторите вход в систему еще раз. Обычно проблема в неудачном приложении пальца или плохом темплейте, полученном при обучении. Используйте директиву debug при первоначальном применении биометрического loginf. Затем ее можно отключить. Строгая 2-х факторная аутентфикация может быть сделана так: login auth required pam_bfp.so Будьте внимательны в таких случаях. Повреждение темплейтов будет блокировать доступ к компьютеру и это может быть исправлено только в административном режиме. Для Linux платформ смотри примеры в соответсвующем каталоге. Удаленный доступ к локальному сканеру. Сгенерируйте и добавьте (или используйте тестовые) сертификаты/ключи в конфигурационный каталог. Отредактируйте файл конфигурации для использвания удаленного сканера на компьютере с биометрической аутентификацией. Запустите remote_scanner на удаленном компьютере: # ./remote_scanner -d 1 -v (test console mode) # ./remote_scanner -Dv (standard daemon mode) Используйте -h для получения помощи по ключам для remote_scanner. Тестируйте ваши установки и успешной аутентификации. Ключевая идея удаленного сканера в том, что аутентифицироваться на компьютере A с компьютера Б, используя сканер на компьютере В. 5. Примечания Вы можете использовать PAM почти для всех стандартных приложений и даже иных (смотри, pam_demo или lock_fp). Например, SSH можно использовать теперь со строгой аутентификацией, применяя PAM_BFP модуль. Аналогично login добавьте нужную строку для ssh в PAM конфигурации системы. Теперь можно даже добавить биометрическую аутентификацию для PUTTY (популярный SSH Windows клиент), используя удаленный сканер. Выберите SSH2 протокол в установках PUTTY для этого сеанса. Модифицируйте строку с удаленным доступом и биометрической аутентификацией для Windows компьютера с PUTTY. Помните, что все аутентификация происходит локально (на Unix), и PAM_BFP модуль работает только локально. Удаленный доступ означает, что PAM_BFP модуль может использовать локальный сканер (через bfpsdk.so) и удаленный сканер на удаленном компьютере (через remote_scanner). Помните, что PAM не отменяет стандартной логики для многих приложений. Это означает, что если вы добавили биометрическую аутентификацию для FTP сервера, то вы будет проверяться PAM_BFP модулем, но в любом случае вы будет преодложено ввести пароль, т.к. это обычная стандартная реализация FTP протокола. Пожалуйста читайте PAM документацию для вашей системы, чтобы избежать обычных ошибок и непонимания. 6. Добавленные ключи для PAM_BFP модуля # Каталог темплейтов (default=/usr/local/etc/auth_pam_bfp) tmpldr=some-dir # Файл конфигурации (default=/usr/local/etc/auth_pam_bfp/auth_bfp.conf) cfgfile=some-file # Подсказка-напоминание ("приложи-то пальчик") fp_prompt=1 7. Формат файла конфигурации PAM_BFP (все директивы, ну или почти все) Взято из примерного файла конфигурации. # local=[1|0] локальный/удаленный scanner (1=по умолч.) # level=[1..1000] порог меры (600=по умолч.) # timeout=[0..60] таймаут для сканирования (5=по умолч.) # account=name бюджет для аутентификации (none=по умолч.) # users=[name1[[,| ]name2]] пользователи для этого бюджета (none=по умолч.) # device=[name|ip] удаленный сканер на этом компьютере (none=по умолч.) # dport=value tcp порт для сервера (5575=по умолч.,non-SSL) # (5576=по умолч.,SSL) # server=[name|ip] BFPSERVER адрес # ssport=value tcp порт для BFPSERVER (5400=по умолч.,non-SSL) # (5401=по умолч.,SSL) # clients=[name1[[,| ]name2]] только эти удаленные клиенты проверяются (none=по умолч.) # ssl=[1|0] разрешить/запретить SSL протокол (0=по умолч.) # verify=[1|0] проверять SSL сертификаты (0=по умолч.) # decrypt=[0-2] 0=не дешифровать,1=дешифровать на встроенном ключе # 2=дешифровать по фразе (0=по умолч.) # cafile=some-file Сертификат центра авторизации # (default=/usr/local/etc/auth_pam_bfp/cacert.pem) # certfile=some-file Сертификат клиента # (default=/usr/local/etc/auth_pam_bfp/client.pem) # keyfile=some-file Ключ клиента # (default=/usr/local/etc/auth_pam_bfp/client.pem) # keypass=some-words Секретная фраза для дешифровки ключа клиента 7. О криптографии Реализиция шифрования в PAM_BFP носит только демонстрационный характер и не может быть рекомендована для серьезного применения. Главной целью включение криптографической части являлась демонстрация такой возможности на базе библиотеки OpenSSL. 8. Будущее Зависите от активности и поддержки пользователей Unix/Linux.