...
Для PAM существует проект pam_p11, развивающийся как часть OpenSC, позволяющий внедрить аутентификацию по токенам. Доступны два модуля аутентификации:
...
Инструкция есть здесь: http://www.gooze.eu/printpdf/book/export/html/221 При необходимости, pam_pkcs11 можно настроить руководствуясь инструкцией (на английском, источник).
...
В итоге выглядит это так:
Рабочее окружение
...
Предварительная подготовка
Демонстрация работы проводится на Ubuntu 15.04.
Для конфигурации модуля PAM необходимо установить пакеты:
- pcscd
- OpenSC
- OpenSSL
- libpam-p11
- libengine-pkcs11-openssl
Code Block | ||
---|---|---|
| ||
sudo apt-get install pcscd opensc openssl libpam-p11 libengine-pkcs11-openssl |
...
Общий порядок действий
Настройка 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/i386-linux-gnu/opensc-pkcs11.so
Tip Если вы используете старую версию OpenSC, вам будет необходимо проверить местонахождение opensc-pkcs11.so. Он может находится в
/usr/lib/opensc-pkcs11.so
Обновить конфигурацию 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/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:opensc-pkcs11.so (dynamic) Dynamic engine loading support [Success]: SO_PATH:/usr/lib/engines/engine_pkcs11.so [Success]: ID:pkcs11 [Success]: LIST_ADD:1 [Success]: LOAD Loaded: (pkcs11) pkcs11 engine
Создаем самоподписанный сертификат в PEM-формате:
Code Block language bash OpenSSL> req -engine pkcs11 -new -key 1:45 -keyform engine -x509 -out cert.pem -text
Где 1:45 - это пара slot:id . Если OpenSSL не видит токен, то стоит попробовать другой номер слота.
OpenSSL при этом (который мы указывали в п.5). OpenSSL предложит ввести PIN-код и заполнить информацию о сертификате. Теперь можно выйтиВыйдем из OpenSSL и проверить новый сертификат.
Code Block exit
Проверяем созданный сертификат. В текущем каталоге должен создаться файл самоподписанного сертификата с именем cert.pem.
Примечание: если при создании сертификата в OpenSSL убрать ключ-x509,
то на выходе получим заявку на сертификат.Code Block language bash $openssl verify -CAfile cert.pem cert.pem cert.pem: OK
Сохраняем сертификат на токен:
Code Block language bash $ pkcs15-init --store-certificate cert.pem --auth-id 02 --id 45 --format pem <Вводим PIN пользователя>
Занесение сертификата в список доверенных
Теперь нам необходимо прочитать с токена сертификат с нужным ID и записать его в файл доверенных сертификатов:
Code Block language bash mkdir ~/.eid chmod 0755 ~/.eid pkcs15-tool -r <certificate_id> > ~/.eid/authorized_certificates chmod 0644 ~/.eid/authorized_certificates
Заключение
Описанных выше действий достаточно
Теперь при загрузке Ubuntu мы можем использовать токен для аутентификации
...
.
Warning |
---|
Источники
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