Подробный гайд по модулю 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 корректно разрешают имена из сертификатов.