Введение
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 следующий:
- Создание и заполнение конфигурационного файла pam_p11.
- Генерация на токене ключевой пары RSA.
- Генерация сертификата с помощью OpenSSL или другого ПО и запись сертификата на токен (при необходимости).
- Занесение открытого ключа или сертификата в список доверенных.
Предварительная подготовка
Демонстрация работы проводится в терминале на Ubuntu 22.04. Описанная последовательность действий актуальна также для других версий Ubuntu и систем, основанных на Debian.
Перед началом конфигурации модуля PAM:
Установите пакеты для работы с токенами и OpenSSL:
sudo apt-get install pcscd opensc openssl libpam-p11 libengine-pkcs11-openssl
Скачайте и установите библиотеку rtPKCS11ECP из Центра загрузки.
Общий порядок действий
Настройка pam_p11
До начала работы с токеном нужно настроить модуль pam_p11. Для этого:
Проверьте версию установленной библиотеки libpam-p11:
dpkg -l | grep libpam-p11
Откройте файл /usr/share/pam-configs/p11 в текстовом редакторе:
sudo nano /usr/share/pam-configs/p11
Укажите конфигурацию:
Для версий 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
- Сохраните и закройте файл.
Обновите конфигурацию PAM:
sudo pam-auth-update
В появившемся диалоге убедитесь, что выбран пункт "Pam_p11".
Создание ключей на токене
Создайте ключевую пару RSA длины 2048 бит c ID "45" (запомните ID — он понадобится при создании сертификата):
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 -l --id 45
Аутентификация на токене происходит под сущностью пользователя.
Проверьте сгенерированный ключ:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Создание сертификата и импорт его на токен через OpenSSL
Процесс создания сертификата отличается в зависимости от версии OpenSSL.
Занесение сертификата в список доверенных
Чтобы занести сертификат в список доверенных, выполните следующие команды:
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.
Для этого:
- Войдите в учетную запись по паролю.
- Откройте терминал.
Выполните следующие команды:
$ 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

