Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents
outlinetrue
stylenone

Проверка модели устройства

  1. Подключите USB-токен к компьютеру.
  2. Для определения названия модели USB-токена откройте Терминал и введите команду:
$ lsusb 

В результате в окне Терминала отобразится название модели USB-токена:

Image Added

Убедитесь, что используете: Aktiv Rutoken ECP

Введение

Pluggable Authentication Modules (PAM, подключаемые модули аутентификации) — это набор разделяемых библиотек, которые позволяют интегрировать различные низкоуровневые методы аутентификации в виде единого высокоуровневого API. Это позволяет предоставить единые механизмы для управления, встраивания прикладных программ в процесс аутентификации.

Для PAM существует проект pam_p11, развивающийся как часть OpenSC, позволяющий внедрить аутентификацию по токенам. Доступны два модуля аутентификации:

  1. pam_p11_openssh: позволяет аутентифицировать пользователя по открытым ключам ssh в ~/.ssh/authorized_keys
  2. pam_p11_opensc: аутентификация по сертификатам из файла ~/.eid/authorized_certificates


Note
Проект OpenSC также предоставляет
пакет
пакет pam_pkcs11, который представляет собой более гибкий набор модулей аутентификации.
Разработчики OpenSC советуют использовать его вместо
Мы рассмотрим конфигурацию pam_p11,
поскольку последний представляет собой очень простое решение (проверка наличия токена и подпись случайных данных).
как наиболее простого решения. Однако, pam_p11 не имеет понятия о цепочках сертификатов, списках отзыва и OCSP.

Инструкция есть здесь: http://www.gooze.eu/printpdf/book/export/html/221 
При необходимости, pam_pkcs11 можно настроить руководствуясь инструкцией (на английском, ее источник). Также имеется инструкция для Gentoo (источник).


Общий порядок действий для настройки PAM следующий:

...

В итоге выглядит это так:

Image Removed

Аутентификация по сертификатам

 В данном разделе подробно рассмотрим действия по настройке аутентификации по сертификату X.509.

Рабочее окружение

...

Image Added

Предварительная подготовка

Демонстрация работы проводится на Ubuntu 18.04. Описанная последовательность действий актуальна также для других версий Ubuntu и систем, основанных на Debian.

Для конфигурации модуля PAM необходимо установить пакеты:

  • pcscd
  • OpenSC
  • OpenSSL
  • libpam-p11
  • libengine-pkcs11-openssl
Code Block
languagebash
sudo apt-get install pcscd opensc openssl libpam-p11 libengine-pkcs11-openssl

Пользователям Рутокен S также необходимо установить драйвер с нашего сайта.

Общий порядок действий

...

Настройка pam_p11

До начала работы с токеном стоит настроить модуль pam_p11 следующим образом:

  1. Создать файл   /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


  2. Обновить конфигурацию PAM:

    Code Block
    languagebash
    sudo pam-auth-update

     

  3.  В появившемся диалоге необходимо выбрать удостовериться, что выбран pam_p11. Если вы хотите отключить аутентификацию по паролям, то можно отключить Unix authentication. 

    Создание ключей на токене

  4. Подготовим токен. 

    Code Block
    languagebash
    $ 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 можно указать желаемые пин-коды пользователя и администратора.

  5. Создаем ключевую пару RSA длины 2048 бит c ID "45" (id стоит запомнить, он понадобится при создании сертификата). Аутентификация на токене происходит под сущностью пользователя.

    Code Block
    languagebash
    $ pkcs15-init --generate-key rsa/2048 --auth-id 02 --id 45
    <вводим PIN пользователя>

     

  6. Проверим сгенерированный ключ:

    Code Block
    languagebash
    $ 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

    Создание сертификата и импорт его на токен


  7. Запускаем openssl

    Code Block
    languagebash
    $ sudo openssl


  8. Подгружаем модуль поддержки pkcs11:

    Code Block
    languagebash
    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


  9. Создаем самоподписанный сертификат в PEM-формате:

    Code Block
    languagebash
    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-токены или считыватели смарт-карт к компьютеру.

  10. Проверяем созданный сертификат. В текущем каталоге должен создаться файл самоподписанного сертификата с именем cert.pem.
    Примечание: если при создании сертификата в OpenSSL убрать ключ -x509, то на выходе получим заявку на сертификат.

    Code Block
    languagebash
    $openssl verify -CAfile cert.pem cert.pem
    cert.pem: OK

    Выйдем из OpenSSL.

    Code Block
    exit


  11. Сохраняем сертификат на токен:

    Code Block
    languagebash
    $ pkcs15-init --store-certificate cert.pem --auth-id 02 --id 45 --format pem
    <Вводим PIN пользователя>

    Занесение сертификата в список доверенных

  12. Теперь нам необходимо прочитать с токена сертификат с нужным ID (в нашем случае - 45) и записать его в файл доверенных сертификатов:

    Code Block
    languagebash
    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
iconfalse
titleПримечание

На стадии выбора пользователя информация о подключенном токене может не обновляться динамически. Если вы подключили токен и не видите поля ввода пин-кода, вам может понадобиться перенести фокус на "гостевой сеанс" и обратно на вашего пользователя.

...