Подробный гайд по модулю PAM pam_cprocsp

PAM-модуль КриптоПро для аутентификации в Linux по ГОСТ-сертификатам и токенам. Поддержка SSH, sudo, двухфакторный вход.

2026.04.25                  


Подробный гайд по модулю PAM pam_cprocspПодробный гайд по модулю PAM pam_cprocsp

Важно:

  • В экосистеме КриптоПро для Linux модуль официально называется pam_cprocsp.so. В документации, скриптах и старых руководствах его часто называют pam_csp.so. Ниже используется актуальное имя pam_cprocsp, но все параметры и логика применимы к обоим вариантам.

1. Что такое pam_cprocsp?

Это PAM-модуль, входящий в состав КриптоПро CSP для Linux. Позволяет использовать сертификаты ГОСТ, выпущенные в инфраструктуре КриптоПро, для аутентификации пользователей ОС, входа в графические сессии, SSH, sudo, su, системных сервисов и т.д. Модуль работает с аппаратными носителями (Рутокен, JaCarta, eToken) и программными контейнерами.


2. Ключевые возможности

Возможность Описание
Аутентификация по ГОСТ-сертификату Поддержка ГОСТ Р 34.10-2001/2012, ГОСТ Р 34.11-2012
Работа с токенами Рутокен ЭЦП, JaCarta, SafeNet, eToken, Aladdin, программные контейнеры (HDImage, registry)
Проверка статуса сертификата Валидация срока действия, проверка по CRL/OCSP, контроль отзыва
Двухфакторная аутентификация «Знать» (ПИН/пароль) + «Иметь» (токен/контейнер)
Интеграция с AD/LDAP Сопоставление Subject/UPN сертификата с учётной записью ОС или домена
Fallback-режим Резервная аутентификация по паролю при недоступности токена
Управление сессиями Поддержка auth, account, session, password в стеке PAM
Кеширование ПИН Опциональное кеширование в памяти процесса для удобства (с ограничениями безопасности)
Логирование и аудит Подробные логи в journalctl, /var/log/auth.log, /var/log/cprocsp/

3. Системные требования

  • ОС: RHEL/CentOS/Alma/Rocky 8+, Ubuntu 20.04+/22.04+/24.04+, Astra Linux, ALTLinux, РЕД ОС, ALT Server и др.
  • КриптоПро CSP: версии 5.0 R2+ (рекомендуется 5.2 или новее)
  • Действующая лицензия КриптоПро CSP
  • Установленные пакеты: cprocsp-rdr, cprocsp-cpopenssl, lsb-cprocsp-pkcs11, lsb-cprocsp-pam
  • Для работы с токенами: драйверы ПКСС (pcscd, ifd-rutoken, ifd-jacarta и т.п.)

4. Установка

# Debian/Ubuntu
sudo apt install lsb-cprocsp-pam lsb-cprocsp-pkcs11

# RHEL/CentOS/Astra/ALT
sudo yum install lsb-cprocsp-pam lsb-cprocsp-pkcs11

После установки файл модуля появится в:

/usr/lib64/security/pam_cprocsp.so   (64-bit)
/usr/lib/security/pam_cprocsp.so     (32-bit)

5. Настройка PAM

Модуль подключается в конфигурационных файлах /etc/pam.d/.

Примеры:

Вход в систему (login/gdm/lightdm)

/etc/pam.d/common-auth (Debian) или /etc/pam.d/system-auth (RHEL):

auth    [success=1 default=ignore]  pam_cprocsp.so debug cert=auto pin_prompt=1
auth    requisite                   pam_deny.so
auth    required                    pam_permit.so

SSH

/etc/pam.d/sshd:

auth    sufficient    pam_cprocsp.so debug cert=auto token=pcsc
auth    required      pam_unix.so

sudo

/etc/pam.d/sudo:

auth    sufficient    pam_cprocsp.so require_valid_cert allow_expired=0
auth    required      pam_unix.so

Позиция в стеке важна:

  • sufficient пропустит дальше при успехе, required потребует обязательного прохождения.

6. Параметры модуля

Полный список доступен через man pam_cprocsp.

Наиболее используемые:

Параметр Значение Описание
debug 0/1 Подробный вывод в логи
cert=auto\|path\|serial\|subject auto Автопоиск сертификата или явное указание
token=pcsc\|hsm\|none pcsc Тип носителя
pin_prompt=1 1/0 Запрашивать ПИН-код через PAM
require_valid_cert=1 1/0 Отклонять просроченные/отозванные сертификаты
allow_expired=0 1/0 Разрешать вход с истёкшим сертификатом
max_pin_tries=3 число Макс. попыток ввода ПИН до блокировки
fallback=1 1/0 При ошибке токена переходить к pam_unix
use_first_pass флаг Брать пароль из предыдущего модуля
try_first_pass флаг Попробовать взять, при неудаче запросить
map_subject=1 1/0 Сопоставлять CN/UPN сертификата с логином ОС

7. Типичные сценарии использования

Сценарий 1: Вход только по токену (без пароля ОС)

auth    required    pam_cprocsp.so cert=auto pin_prompt=1 require_valid_cert=1
auth    required    pam_deny.so

Сценарий 2: Токен ИЛИ пароль ОС

auth    sufficient  pam_cprocsp.so cert=auto fallback=1
auth    required    pam_unix.so

Сценарий 3: Сопоставление с доменной учёткой

auth    sufficient  pam_cprocsp.so cert=auto map_subject=1 use_first_pass
auth    required    pam_sss.so

8. Диагностика и логирование

# Включение отладки
# Добавьте параметр debug в PAM-файл и перезапустите службу

# Просмотр логов
journalctl -u sshd -f | grep pam_cprocsp
tail -f /var/log/auth.log
cat /var/log/cprocsp/cprocsp.log | grep -i pam

Полезные команды проверки:

# Список контейнеров
/opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -verify

# Проверка сертификатов
/opt/cprocsp/bin/amd64/certmgr -list

# Тест ПИН-кода
/opt/cprocsp/bin/amd64/csptest -passwd -checkpin -cont '\\.\HDIMAGE\MyCert'

9. Меры безопасности

Риск Рекомендация
Кеширование ПИН в памяти Отключите pin_cache в продакшене, используйте pin_prompt=1
Брутфорс ПИН Установите max_pin_tries=3, настройте faillock/pam_tally2
Использование отозванных сертификатов Всегда require_valid_cert=1, настройте CRL/OCSP в cprocsp
Физическая доступность токена Блокируйте терминалы, используйте автоблокировку сессии
Логи с чувствительными данными Отключите debug после отладки, настройте ротацию логов
SELinux/AppArmor Разрешите доступ pam_cprocsp к /dev/usb/*, /run/pcscd/, cprocsp сокетам

10. Ограничения и нюансы

  • Модуль не работает с сертификатами не-ГОСТ (RSA/ECDSA) без дополнительных настроек.
  • При использовании fallback=1 возможны race-condition в параллельных сессиях.
  • Графические менеджеры (GDM, SDDM) могут игнорировать PAM-запросы ПИН, если настроены на автологин.
  • В контейнерах/Docker требуется проброс pcscd сокетов и /dev/usb/.
  • Версии КриптоПро < 5.0 не поддерживают map_subject и OCSP.
  • Для Astra Linux Special Edition требуются дополнительные политики МСЭ.

Рекомендация перед продуктивом:

Всегда тестируйте в staging-среде, включайте debug, проверяйте откат к парольной аутентификации, настройте мониторинг блокировок ПИН и отзыв сертификатов. При интеграции с AD/LDAP убедитесь, что nsswitch и sssd корректно разрешают имена из сертификатов.