Page tree

Введение

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

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

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

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

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

  1. Создание и заполнение конфигурационного файла pam_p11.
  2. Генерация на токене ключевой пары RSA.
  3. Генерация сертификата с помощью OpenSSL или другого ПО и запись сертификата на токен (при необходимости).
  4. Занесение открытого ключа или сертификата в список доверенных.

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

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

Перед началом конфигурации модуля PAM:

  1. Установите пакеты для работы с токенами и OpenSSL:

    sudo apt-get install pcscd opensc openssl libpam-p11 libengine-pkcs11-openssl
  2. Скачайте и установите библиотеку rtPKCS11ECP из Центра загрузки.

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

Настройка pam_p11

До начала работы с токеном нужно настроить модуль pam_p11. Для этого:

  1. Проверьте версию установленной библиотеки libpam-p11:

    dpkg -l | grep libpam-p11
  2. Откройте файл /usr/share/pam-configs/p11 в текстовом редакторе:

    sudo nano /usr/share/pam-configs/p11
  3. Укажите конфигурацию:

    • Для версий libpam-p11 выше или равных 0.2.0:

      Name: Pam_p11
      Default: yes
      Priority: 800
      Auth-Type: Primary
      Auth: sufficient pam_p11.so /usr/lib/librtpkcs11ecp.so
    • Для версий libpam-p11 ниже 0.2.0:

      Name: Pam_p11
      Default: yes
      Priority: 800
      Auth-Type: Primary
      Auth: sufficient pam_p11_opensc.so /usr/lib/librtpkcs11ecp.so
  4. Сохраните и закройте файл.
  5. Обновите конфигурацию PAM:

    sudo pam-auth-update

    В появившемся диалоге убедитесь, что выбран пункт "Pam_p11".
     

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

  1. Создайте ключевую пару RSA длины 2048 бит c ID "45" (запомните ID — он понадобится при создании сертификата):

    pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 -l --id 45

    Аутентификация на токене происходит под сущностью пользователя.

  2. Проверьте сгенерированный ключ:

    pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O

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

Процесс создания сертификата отличается в зависимости от версии OpenSSL.

  1. Запустите openssl

    openssl
  2. Сформируйте самоподписанный сертификат или заявку на сертификат:

    OpenSSL> engine dynamic -pre SO_PATH:/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:librtpkcs11ecp.so
    ...
    OpenSSL> req -engine pkcs11 -x509 -new -key 0:45 -keyform engine -out client.pem -subj "/C=RU/ST=Moscow/L=Moscow/O=Aktiv/OU=dev/CN=testuser/emailAddress=testuser@mail.com"

    Путь к файлу pkcs11.so в примере актуален для Ubuntu начиная с версии 18.04. В других ОС местонахождение файла может отличаться. Например, он может находиться в каталоге /usr/lib/openssl/engines/.

    Если файл найти не удалось, воспользуйтесь командой find.

    Если при создании сертификата в OpenSSL убрать ключ -x509, то на выходе будет сформирована заявка на сертификат.

  1. Настройте конфигурационный файл по инструкции.

  2. Сформируйте самоподписанный сертификат или заявку на сертификат:

    $ OPENSSL_CONF=/path/to/engine.conf openssl req -engine pkcs11 -x509 -new -key 0:45 -keyform engine -out client.pem -subj "/C=RU/ST=Moscow/L=Moscow/O=Aktiv/OU=dev/CN=testuser/emailAddress=testuser@mail.com"
  3. Сохраните сертификат на токен:

    $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -l -y cert -w ./client.pem --id 45

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

Чтобы занести сертификат в список доверенных, выполните следующие команды:

mkdir ~/.eid
chmod 0755 ~/.eid
cat client.pem >> ~/.eid/authorized_certificates
chmod 0644 ~/.eid/authorized_certificates

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

После выполнения всех действий в инструкции выйдите из активной пользовательской сессии и заново войдите. Экран входа в систему предложит использовать токен для аутентификации:

Введите PIN-код Пользователя Рутокена и нажмите Enter. В результате произойдет вход в учетную запись.

Если во время входа что-то пошло не так, обратитесь к разделу Решение проблем.

О настройке способов аутентификации

После выполнения действий в инструкции доступны два способа аутентификации: по паролю и по сертификату. После успешного входа в систему по сертификату можно отключить модуль pam-unix, чтобы отключить парольную аутентификацию и обязать пользователей использовать аутентификацию по сертификату.

Однако отключение модуля может привести к потере доступа к учетной записи. Перед тем, как отключить его:

  • проверьте работоспособность настроенной аутентификации по сертификату;
  • убедитесь, что отключение парольной аутентификации действительно необходимо;
  • оцените риск утери токена, на который записан сертификат для аутентификации.

Решение проблем

Отсутствует поле ввода PIN-кода

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

Ошибка входа в систему с OpenSSL 3.x

Если при входе в систему по сертификату возникла проблема и у вас установлен OpenSSL 3.х, обновите библиотеку libp11.

Для этого:

  1. Войдите в учетную запись по паролю.
  2. Откройте терминал.
  3. Выполните следующие команды:

    $ sudo apt-get install automake autoconf libssl-dev pkgconf gcc git libtool
    $ git clone https://github.com/OpenSC/libp11.git
    $ cd libp11
    $ autoreconf -i
    $ ./configure && make && sudo make install
    $ sudo mv /usr/lib/x86_64-linux-gnu/libp11.so.3 /usr/lib/x86_64-linux-gnu/libp11.so.3_orig
    $ sudo ln -s /usr/local/lib/libp11.so.3 /usr/lib/x86_64-linux-gnu/libp11.so.3
  • No labels