Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

Введение

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

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

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

Проект OpenSC также предоставляет пакет pam_pkcs11, который представляет собой более гибкий набор модулей аутентификации. Разработчики OpenSC советуют использовать его вместо pam_p11, поскольку последний представляет собой очень простое решение (проверка наличия токена и подпись случайных данных). pam_p11 не имеет понятия о цепочках сертификатов, списках отзыва и OCSP.
Инструкция есть здесь: http://www.gooze.eu/printpdf/book/export/html/221 

Общий порядок действий для настройки PAM следующий:
  1. Сгенерировать на токене ключевую пару RSA (проверено, что работает для длины ключа 2048 бит, с 1024 были проблемы)
  2. Если требуется сертификат, то с помощью OpenSSL или другого ПО сгенерировать сертификат и записать его на токен
  3. Записать открытый ключ или сертификат в необходимый каталог

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


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

  • Ubuntu Linux 11.10 i386
  • pcscd 1.7.2-2ubuntu2 из репозиториев
  • OpenSC 0.12.2 собранная из исходников с поддержкой pcscd
  • OpenSSL 1.0.0e 6 Sep 2011 из репозиториев
  • libpam-p11 0.1.5-1build2 из репозиториев

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

Настройка pam_p11

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

  1. Создать файл   /usr/share/pam-configs/p11 со следующим содержанием:

    Name: Pam_p11
    Default: yes
    Priority: 800
    Auth-Type: Primary
    Auth: sufficient pam_p11_opensc.so /usr/lib/opensc-pkcs11.so 
  2. Обновить конфигурацию PAM:

    sudo pam-auth-update

     

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

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

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

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

     

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

    $ 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

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

     

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

    $ openssl


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

    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
  8. Создаем самоподписанный сертификат в PEM-формате:

    OpenSSL> req -engine pkcs11 -new -key 1:45 -keyform engine -x509 -out cert.pem -text

    1:45 - это пара slot:id. Если OpenSSL не видит токен, то стоит попробовать другой номер слота.
    OpenSSL при этом предложит ввести PIN-код и заполнить информацию о сертификате. Теперь можно выйти из OpenSSL и проверить новый сертификат.

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

    $openssl verify -CAfile cert.pem cert.pem
    cert.pem: OK
  10. Сохраняем сертификат на токен:

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

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

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

    mkdir ~/.eid
    chmod 0755 ~/.eid
    pkcs15-tool -r <certificate_id> > ~/.eid/authorized_certificates
    chmod 0644 ~/.eid/authorized_certificates

    Заключение

    Описанных выше действий достаточно для аутентификации по токену.

Источники

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

 

  • No labels