Table of Contents | ||||
---|---|---|---|---|
|
Проверка модели устройства
- Подключите USB-токен к компьютеру.
- Для определения названия модели USB-токена откройте Терминал и введите команду:
$ lsusb
В результате в окне Терминала отобразится название модели USB-токена:
Убедитесь, что используете: Aktiv Rutoken ECP
Введение
Pluggable Authentication Modules (PAM, подключаемые модули аутентификации) — это набор разделяемых библиотек, которые позволяют интегрировать различные низкоуровневые методы аутентификации в виде единого высокоуровневого API. Это позволяет предоставить единые механизмы для управления, встраивания прикладных программ в процесс аутентификации.
Для PAM существует проект pam_p11, развивающийся как часть OpenSC, позволяющий внедрить аутентификацию по токенам. Доступны два модуля аутентификации:
pam_p11_openssh
: позволяет аутентифицировать пользователя по открытым ключам ssh в~/.ssh/authorized_keys
pam_p11_opensc
: аутентификация по сертификатам из файла~/.eid/authorized_certificates
Note |
---|
Проект OpenSC также предоставляет |
пакет pam_pkcs11, который представляет собой более гибкий набор модулей аутентификации. |
Мы рассмотрим конфигурацию pam_p11, |
как наиболее простого решения. Однако, pam_p11 не имеет понятия о цепочках сертификатов, списках отзыва и OCSP. |
Инструкция есть здесь: http://www.gooze.eu/printpdf/book/export/html/221
При необходимости, pam_pkcs11 можно настроить руководствуясь инструкцией (на английском, ее источник). Также имеется инструкция для Gentoo (источник). |
...
В итоге выглядит это так:
Аутентификация по сертификатам
В данном разделе подробно рассмотрим действия по настройке аутентификации по сертификату X.509.
Рабочее окружение
...
Предварительная подготовка
Демонстрация работы проводится на Ubuntu 18.04. Описанная последовательность действий актуальна также для других версий Ubuntu и систем, основанных на Debian.
Для конфигурации модуля PAM необходимо установить пакеты:
- pcscd
- OpenSC
- OpenSSL
- libpam-p11
- libengine-pkcs11-openssl
Code Block | ||
---|---|---|
| ||
sudo apt-get install pcscd opensc openssl libpam-p11 libengine-pkcs11-openssl |
Пользователям Рутокен S также необходимо установить драйвер с нашего сайта.
Общий порядок действий
...
Настройка pam_p11
До начала работы с токеном стоит настроить модуль pam_p11 следующим образом:
Создать файл
/usr/share/pam-configs/p11
со следующим содержанием:Code Block Name: Pam_p11 Default: yes Priority: 800 Auth-Type: Primary Auth: sufficient pam_p11_opensc.so /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so
Tip Если вы используете не Ubuntu 18.04, вам необходимо проверить местонахождение opensc-pkcs11.so. Он может находится, например, в
/usr/lib/opensc-pkcs11.so. Если его найти не удается воспользуйтесь командой find
Обновить конфигурацию PAM:
Code Block language bash sudo pam-auth-update
- В появившемся диалоге необходимо выбрать удостовериться, что выбран pam_p11. Если вы хотите отключить аутентификацию по паролям, то можно отключить Unix authentication.
Создание ключей на токене
Подготовим токен.
Code Block language bash $ pkcs15-init -E $ pkcs15-init --create-pkcs15 --so-pin "87654321" --so-puk "" $ pkcs15-init --store-pin --label "User PIN" --auth-id 02 --pin "12345678" --puk "" --so-pin "87654321" --finalize
В параметрах pin и so-pin можно указать желаемые пин-коды пользователя и администратора.
Создаем ключевую пару RSA длины 2048 бит c ID "45" (id стоит запомнить, он понадобится при создании сертификата). Аутентификация на токене происходит под сущностью пользователя.
Code Block language bash $ pkcs15-init --generate-key rsa/2048 --auth-id 02 --id 45 <вводим PIN пользователя>
Проверим сгенерированный ключ:
Code Block language bash $ pkcs15-tool --list-keys Using reader with a card: Aktiv Rutoken ECP 00 00 Private RSA Key [Private Key] Object Flags : [0x3], private, modifiable Usage : [0x4], sign Access Flags : [0x1D], sensitive, alwaysSensitive, neverExtract, local ModLength : 2048 Key ref : 1 (0x1) Native : yes Path : 3f001000100060020001 Auth ID : 02 ID : 45
Создание сертификата и импорт его на токен
Запускаем
openssl
Code Block language bash $ sudo openssl
Подгружаем модуль поддержки pkcs11:
Code Block language bash OpenSSL> engine dynamic -pre SO_PATH:/usr/lib/x86_64-linux-gnu/engines-1.1/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so (dynamic) Dynamic engine loading support [Success]: SO_PATH:/usr/lib/x86_64-linux-gnu/engines-1.1/engine_pkcs11.so [Success]: ID:pkcs11 [Success]: LIST_ADD:1 [Success]: LOAD [Success]: MODULE_PATH:/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so Loaded: (pkcs11) pkcs11 engine OpenSSL>
Tip Если вы используете не Ubuntu 18.04, вам необходимо проверить местонахождение pkcs11.so. Он может располагаться, например, в /usr/lib/openssl/engines/ . Если его найти не удается воспользуйтесь командой find
Создаем самоподписанный сертификат в PEM-формате:
Code Block language bash OpenSSL> req -engine pkcs11 -new -key 10:45 -keyform engine -x509 -out cert.pem -text
1Где 0:45 - это пара slot:id . Если OpenSSL не видит токен, то стоит попробовать другой номер слота.
OpenSSL при этом (который мы указывали в п.5). OpenSSL предложит ввести PIN-код и заполнить информацию о сертификате. Теперь можно выйти из OpenSSL и проверить новый сертификатЕсли у вас возникла ошибка, проверьте, не подключены ли другие USB-токены или считыватели смарт-карт к компьютеру.Проверяем созданный сертификат. В текущем каталоге должен создаться файл самоподписанного сертификата с именем cert.pem.
Примечание: если при создании сертификата в OpenSSL убрать ключ-x509,
то на выходе получим заявку на сертификат.Code Block language bash $openssl verify -CAfile cert.pem cert.pem cert.pem: OK
Выйдем из OpenSSL.
Code Block exit
Сохраняем сертификат на токен:
Code Block language bash $ pkcs15-init --store-certificate cert.pem --auth-id 02 --id 45 --format pem <Вводим PIN пользователя>
Занесение сертификата в список доверенных
Теперь нам необходимо прочитать с токена сертификат с нужным ID (в нашем случае - 45) и записать его в файл доверенных сертификатов:
Code Block language bash mkdir ~/.eid chmod 0755 ~/.eid pkcs15-tool -r <certificate_id> > ~/.eid/authorized_certificates chmod 0644 ~/.eid/authorized_certificates
Заключение
Описанных выше действий достаточно Теперь при загрузке Ubuntu мы можем использовать токен для аутентификации по токену.
Источники
http://download.gooze.eu/pki/doc/sso/linux-smartcard-logon-using-pam-p11.pdf
http://www.opensc-project.org/opensc/wiki/QuickStart
http://forum.rutoken.ru/post/4546/#p4546
http://www.opensc-project.org/pam_p11/wiki/QuickStart
Warning | ||||
---|---|---|---|---|
| ||||
На стадии выбора пользователя информация о подключенном токене может не обновляться динамически. Если вы подключили токен и не видите поля ввода пин-кода, вам может понадобиться перенести фокус на "гостевой сеанс" и обратно на вашего пользователя. |
...