Настройка двухфакторной аутентификации в
домене Windows AD
Служба обеспечения совместимости <gost@basealt.ru>, Константин Белаш
Version 1.3, 07.10.2022
Оглавление
1. Общая информация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê1
2. Базовая конфигурация стенда. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê2
2.1. Общие требования к стенду. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê2
2.2. Требования к токенам и смарт-картам . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê2
2.3. Требования к сертификату пользователя домена Windows AD . . . . . . . . . . . . . . . . . . . . . . . . Ê2
2.4. Информация о пользователях домена . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê3
2.5. Проверка работы ПК клиента в домене Windows AD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê3
3. Установка и настройка ПО для работы с токенами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê5
3.1. Настройка Polkit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê5
3.2. Проверка работы PC/SC интерфейса . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê6
3.3. Проверка работы библиотек вендоров PKCS#11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê7
3.3.1. ESMART Token. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê7
3.3.2. Rutoken ECP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê7
3.3.3. JaCarta-2 SE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê8
4. Настраиваем PKINIT на клиенте . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê9
4.1. Настройка и проверка Kerberos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê9
4.1.1. Рутокен ECP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê10
4.1.2. ESMART Token. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê10
4.1.3. JaCarta-2 SE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê10
4.1.4. Отладка Kerberos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê11
4.2. Настройка sssd. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê11
4.2.1. p11_child. Проверка работы sssd c токенами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê11
4.2.1.1. Рутокен ECP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê11
4.2.1.2. ESMART Token. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê12
4.2.1.3. JaCarta-2 SE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê12
4.2.2. sssd.conf. Настройка службы sssd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê12
5. Проверяем 2ФА в текстовой консоли . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê14
5.1. Рутокен ECP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê14
5.2. ESMART Token . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê14
5.3. JaCarta-2 SE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê14
6. Проверяем 2ФА в графическом сеансе. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê16
6.1. Рутокен ECP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê16
6.2. ESMART Token . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê19
6.3. JaCarta-2 SE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê23
7. Проверка отзыва сертификата . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê28
8. Отладка sssd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê29
9. Полезные ссылки. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê30
1. Общая информация
Настоящий документ можно считать практическим руководством для конечного
пользователя с методическими рекомендациями по контролю за успешностью выполнения
настройки.
Из этого документа станет понятно, как настроить двухфакторную аутентификацию (2ФА) в
домене Windows AD (Active Directory), где в качестве клиента выступает ОС «Альт Рабочая
станция (K) 10», а в качестве контроллера домена используется ОС Microsoft Windows Server
2012R или 2019.
В процессе настройки и тестирования мы убедимся, что токены, содержащие
криптографическую информацию, позволяют зарегистрироваться в домене при корректном
вводе PIN-кода, без дополнительных способов аутентификации (например, ввода пароля), а
также убедиться в обратном, что при вводе некорректного PIN-кода в аутентификации
будет отказано. Также в аутентификации будет отказано, если сертификат отозван
Удостоверяющим Центром (УЦ).
Под криптографической информацией на токене здесь явно подразумеваются: сертификат
пользователя, выданный УЦ, открытый и закрытый ключи пользователя.
С теоретической информацией по доменной двухфакторной аутентификации можно
ознакомиться в документе «Двухфакторная аутентификация в доменной инфраструктуре
ОС Альт. Общая информация.».
1
2. Базовая конфигурация стенда
2.1. Общие требования к стенду
Стенд будет состять из контроллера домена Windows AD и ПК клиента домена.
Стенд должен удовлетворять следующим условиям:
•ПК клиента должен быть ввёден в домен Windows AD
•На контроллере домена должны быть заведены учётные записи пользователей домена
•Для домена Windows AD настроен Удостоверяющий центр (УЦ)
•В УЦ для контроллера домена Windows AD выпущен сертификат KDC (key distribution
center)
•В УЦ для пользователей домена Windows AD выпущены сертификаты
•Сертификаты пользователей хранятся на токене или смарт-карте
•В домене Windows AD работает служба проверки сертификатов OCSP
•OCSP служба должна поддерживать «Nonce requests» (использование одноразового кода
в запросе, https://ru.wikipedia.org/wiki/OCSP)
2.2. Требования к токенам и смарт-картам
Используются токены и смарт-карты, имеющие следующие характеристики:
•токены (смарт-карты) аппаратно выполняют криптографические функции (без
использования программного криптопровайдера)
•закрытый ключ, сгенерированный на токене, не может быть экспортирован
•мультислотовые токены (например JaCarta-2 SE) имеют уникальные метки для каждого
слота
Токены, используемые в настоящем руководстве:ÊRutoken ECP, JaCarta-2 SE,ÊESMART Token.
2.3. Требования к сертификату пользователя
домена Windows AD
•закрытый ключ для сертификата должен быть сгенерирован на токене
•сертификат должен содержать ключ (EKU, Extended Key Usage), который позволяет
использовать сертификат для аутентификации клиента - clientAuth (TLS Web Client
Authentication, OID 1.3.6.1.5.5.7.3.2 )
•сертификат должен содержать альтернативное имя субъекта (SAN, Subject Alternative
Name), в котором указано имя субъекта-пользователя (UPN)
•сертификат должен иметь данные о ресурсе, где будет проверяться валидность
сертификата (OCSP служба)
2
•сертификат должен также находиться в профиле пользователя, в базе LDAP
2.4. Информация о пользователях домена
Для токенов Rutoken ECP,ÊJaCarta-2 SE,ÊESMART Token в домене были созданы
соответствующие пользователи:
•rt_win: Rutoken ECP
•jc_win: JaCarta-2 SE
•es_win: ESMART Token
2.5. Проверка работы ПК клиента в домене
Windows AD
Вводим ОС Альт Рабочая станция в домен:
•если используется ОС Альт Рабочая станция К — https://docs.altlinux.org/ru-RU/index.html#
alt-kworkstation, п. «Ввод рабочей станции в домен Active Directory»
•если используется ОС Альт Рабочая станция — https://docs.altlinux.org/ru-RU/index.html#
alt-workstation, п. «Ввод рабочей станции в домен Active Directory»
Заходим на ПК клиента с доменной учётной записью и проверяем получение билета
Kerberos:
rt_win@alt-p10 Рабочий стол $ klist
Ticket cache: KEYRING:persistent:53801602:krb_ccache_jYXlBzy
Default principal: rt_win@TEST5.ALT
Valid starting Expires Service principal
17.06.2022 15:16:55 18.06.2022 01:16:55 krbtgt/TEST5.ALT@TEST5.ALT
Ê renew until 24.06.2022 15:16:55
alt-p10 ~ # net ads testjoin
Join is OK
alt-p10 ~ # net ads info
LDAP server: 10.33.33.200
LDAP server name: w12r2-vm340.test5.alt
Realm: TEST5.ALT
Bind Path: dc=TEST,dc=ALT
LDAP port: 389
Server time: Пт, 17 июн 2022 15:20:25 MSK
KDC server: 10.33.33.200
Server time offset: 0
3
Last machine account password change: Пт, 17 июн 2022 15:15:42 MSK
alt-p10 ~ # getent passwd rt_win
rt_win:*:53801602:53800513:rt_win:/home/TEST5.ALT/rt_win:/bin/bash
4
3. Установка и настройка ПО для работы с
токенами
Настройка выполняется на обновлённой пакетной базе и последнем ядре из репозитория:
$ su-
# apt-get update
# apt-get dist-upgrade
# update-kernel
# reboot
Для работы с токенами необходимо установить следующие пакеты:
# apt-get install librtpkcs11ecp libjcpkcs11 isbc-pkcs11 \
Ê opensc pcsc-lite-ccid pcsc-lite pcsc-tools gnutls-utils \
Ê libp11 libp11-kit
•librtpkcs11ecp, libjcpksc11, isbc-pkcs11Ê— библиотеки PKCS#11 вендоров токенов: Актив,
Аладдин и ISBC, соответственно;
•opensc, pcsc-lite-ccid, pcsc-lite, pcsc-tools, gnutls-utilsÊ— утилиты и библиотеки,
необходимые для обеспечения работы интерфейсов PC/SC(+CCID) и PKCS#11;
•libp11Ê— библиотека для работы с токенами в openssl (openssl engine);
•libp11-kitÊ— прокси-библиотека для работы с библиотеками вендоров токенов по
протоколу PKCS#11.
Если каких-то пакетов в репозитории нет или с ними выявлены проблемы, необходимо
установить их с сайта производителя:
•Актив Рутокен (librtpkcs11ecp):Êhttps://www.rutoken.ru/support/download/pkcs/
•Аладдин JaСarta (libjcPKCS11-2): https://www.aladdin-rd.ru/support/downloads/jacarta_client
(а для x86_64 теперь ещё и в составе «Единого Клиента JaCarta»)
•ISBC ESMART (libisbc_pkcs11_main):Êhttps://esmart.ru/download/
3.1. Настройка Polkit
По умолчанию Policy Kit позволяет работать с токенами только в активном сеансе (после
входа в ОС) и только локальному пользователю. Чтобы можно было работать с токенами на
этапе логина доменных пользователей, необходимо поменять все запреты ">no<" на
разрешения ">yes<" в файле /usr/share/polkit-1/actions/org.debian.pcsc-lite.policy.
# sed -iE 's:>no<:>yes<:' /usr/share/polkit-1/actions/org.debian.pcsc-lite.policy
5
В итоге конфигурационный файл polkit примет следующий вид:
# cat /usr/share/polkit-1/actions/org.debian.pcsc-lite.policy
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
Ê"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
Ê"http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
<policyconfig>
Ê <vendor>The PCSC-lite Project</vendor>
Ê <vendor_url>https://pcsclite.apdu.fr/</vendor_url>
<!-- <icon_name>smart-card</icon_name> -->
Ê <action id="org.debian.pcsc-lite.access_pcsc">
Ê <description>Access to the PC/SC daemon</description>
Ê <message>Authentication is required to access the PC/SC daemon</message>
Ê <defaults>
Ê <allow_any>yes</allow_any>
Ê <allow_inactive>yes</allow_inactive>
Ê <allow_active>yes</allow_active>
Ê </defaults>
Ê </action>
Ê <action id="org.debian.pcsc-lite.access_card">
Ê <description>Access to the smart card</description>
Ê <message>Authentication is required to access the smart card</message>
Ê <defaults>
Ê <allow_any>yes</allow_any>
Ê <allow_inactive>yes</allow_inactive>
Ê <allow_active>yes</allow_active>
Ê </defaults>
Ê </action>
</policyconfig>
3.2. Проверка работы PC/SC интерфейса
Работу интерфейса PC/SC обеспечивает службаÊpcscd.service, которая запускается через
одноимённый сокет —Êpcscd.socket.
Включаем pcscd.socket:
# systemctl enable --now pcscd.socket
Created symlink /etc/systemd/system/sockets.target.wants/pcscd.socket →
/lib/systemd/system/pcscd.socket.
Убеждаемся, что токен виден в выводе утилитыÊpcsc_scan, запущенной с правами
пользователя, и однозначно определяется его модель:
$ pcsc_scan -r
Using reader plug'n play mechanism
6
Scanning present readers...
0: Aktiv Rutoken ECP 00 00
1: ESMART Token GOST [ESMART Token] 01 00
2: Aladdin R.D. JaCarta 02 00
Если в выводе командыÊpcsc_scan -rÊвы не видите токенов, то для решения этого вопроса
обратитесь к документу «Методика тестирования токенов» (доступна по запросу в службу
обеспечения совместимости).
3.3. Проверка работы библиотек вендоров PKCS#11
Библиотеки PKCS#11 являются основой для работы с токенами и будут использоваться
всеми компонентами, участвующими в 2ФА. В общем виде работа с библиотеками вендоров
токенов выглядит следующим образом:
$ pkcs11-tool --module путь_до_библиотеки_вендора --list-token-slots
Если в выводе командыÊpcsc_scan -rÊвы не видите токенов, то для решения этого вопроса
обратитесь к документу «Методика тестирования токенов» (доступна по запросу в службу
обеспечения совместимости).
3.3.1. ESMART Token
$ pkcs11-tool --module /usr/lib64/libisbc_pkcs11_main.so --list-token-slots
Available slots:
Slot 0 (0x1): ESMART Token GOST [ESMART Token] 00 00
Ê token label : esmart_64
Ê token manufacturer : ISBC
Ê token model : ESMART Token
Ê token flags : login required, rng, token initialized, PIN initialized
Ê hardware version : 0.0
Ê firmware version : 2.4
Ê serial num : 206F6060C102
Ê pin min/max : 4/8
3.3.2. Rutoken ECP
$ pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so --list-token-slots
Available slots:
Slot 0 (0x1): Aktiv Rutoken ECP 01 00
Ê token label : RuTokenECP
Ê token manufacturer : Aktiv Co.
Ê token model : Rutoken ECP
Ê token flags : login required, rng, SO PIN to be changed, token initialized,
PIN initialized, user PIN to be changed
Ê hardware version : 20.5
7
Ê firmware version : 23.2
Ê serial num : 3ce96775
Ê pin min/max : 6/32
3.3.3. JaCarta-2 SE
$ pkcs11-tool --module /usr/lib64/libjcPKCS11-2.so --list-token-slots
Available slots:
Slot 0 (0x1ffff): Aladdin R.D. JaCarta 02 00
Ê token label : STANDART.SE
Ê token manufacturer : Aladdin R.D.
Ê token model : JaCarta GOST 2.0
Ê token flags : login required, rng, token initialized, PIN initialized, other
flags=0x800
Ê hardware version : 1.0
Ê firmware version : 2.55
Ê serial num : 6082023848937678
Ê pin min/max : 6/32
Slot 1 (0x2ffff): Aladdin R.D. JaCarta 02 00
Ê token label : jacarta-slot-laser
Ê token manufacturer : Aladdin R.D.
Ê token model : JaCarta Laser
Ê token flags : login required, token initialized, PIN initialized
Ê hardware version : 1.0
Ê firmware version : 1.0
Ê serial num : 6082023848937678
Ê pin min/max : 4/10
8
4. Настраиваем PKINIT на клиенте
4.1. Настройка и проверка Kerberos
Копируем сертификат УЦ на ПК доменного пользователя, в каталог /etc/pki/tls/certs
(сертификат УЦ предварительно экспортирован в общий каталог //win19/sysvol/ на
контроллере домена как ca.cer).
alt-p10 ~ # smbclient //w12r2-vm340/sysvol/ -U Администратор
Enter TEST\Администратор's password:
Try "help" to get a list of possible commands.
smb: \> get ca.cer /etc/pki/tls/certs/cacert.pem
Добавляем в конфигурационный файл Kerberos (/etc/krb5.conf), в секцию [realms],
следующее содержимое:
[realms]
TEST5.ALT = {
Ê pkinit_anchors = FILE:/etc/pki/tls/certs/cacert.pem
Ê pkinit_kdc_hostname = w12r2-vm340.test5.alt
Ê pkinit_eku_checking = kpServerAuth
Ê pkinit_cert_match = <ISSUER>.*test-W12R2-VM340-CA
}
pkinit_anchors — путь к сертификату УЦ
pkinit_kdc_hostname — ДНС имя контролллера домена
pkinit_eku_checking — будет ли проверяться наличие расширенного использования ключа
(EKU, Extended key usage). В данном случае в сертификате контроллера домена проверятся
наличие EKU, которое предназначено для аутентификации на стороне сервера
pkinit_cert_match — фильтр выбора сертификата (если их на токене несколько). В данном
случае выбираем сертификат, строка издателя которого оканчивается именем контроллера
домена (test-W12R2-VM340-CA)
Итоговый конфигурационный файл Kerberos:
alt-p10 ~ # cat /etc/krb5.conf | grep -viE '(^#|^$)'
includedir /etc/krb5.conf.d/
[logging]
[libdefaults]
default_realm = TEST5.ALT
Êdns_lookup_kdc = true
Êdns_lookup_realm = false
Êticket_lifetime = 24h
9
Êrenew_lifetime = 7d
Êforwardable = true
Êrdns = false
Êdefault_ccache_name = KEYRING:persistent:%{uid}
[realms]
TEST5.ALT = {
Ê pkinit_anchors = FILE:/etc/pki/tls/certs/cacert.pem
Ê pkinit_kdc_hostname = w12r2-vm340.test5.alt
Ê pkinit_eku_checking = kpServerAuth
Ê pkinit_cert_match = <ISSUER>.*test-W12R2-VM340-CA
}
[domain_realm]
Далее проверяем получение билета Kerberos.
4.1.1. Рутокен ECP
user@alt-p10 ~ $ kinit -X X509_user_identity=PKCS11:librtpkcs11ecp.so rt_win
RuTokenECP PIN:
user@alt-p10 ~ $ klist
Ticket cache: KEYRING:persistent:500:500
Default principal: rt_win@TEST5.ALT
Valid starting Expires Service principal
20.06.2022 19:32:54 21.06.2022 05:32:54 krbtgt/TEST5.ALT@TEST5.ALT
Ê renew until 27.06.2022 19:32:46
4.1.2. ESMART Token
user@alt-p10 ~ $ kinit -X X509_user_identity=PKCS11:libisbc_pkcs11_main.so es_win
esmart_64 PIN:
user@alt-p10 ~ $ klist
Ticket cache: KEYRING:persistent:500:krb_ccache_iXXIg94
Default principal: es_win@TEST5.ALT
Valid starting Expires Service principal
20.06.2022 19:33:36 21.06.2022 05:33:36 krbtgt/TEST5.ALT@TEST5.ALT
Ê renew until 27.06.2022 19:33:26
4.1.3. JaCarta-2 SE
Здесь необходимо дополнительно указать метку слота, так как токен мультислотовый.
user@alt-p10 ~ $ kinit \
Ê -X X509_user_identity='PKCS11:libjcPKCS11-2.so:token=jacarta-slot-laser' jc_win
jacarta-slot-laser PIN:
user@alt-p10 ~ $ klist
10
Ticket cache: KEYRING:persistent:500:krb_ccache_ppoB6Qg
Default principal: jc_win@TEST5.ALT
Valid starting Expires Service principal
20.06.2022 19:34:46 21.06.2022 05:34:46 krbtgt/TEST5.ALT@TEST5.ALT
Ê renew until 27.06.2022 19:34:26
4.1.4. Отладка Kerberos
Если при проверке Kerberos возникают ошибки, то для более полной информации по
процессу PKINIT добавьте опцию вывода отладочной информации в консоль —
KRB5_TRACE=/dev/stdout. Команда получения билета Kerberos с отладкой:
user@alt-p10 ~ $ KRB5_TRACE=/dev/stdout \
Ê kinit \
Ê -X X509_user_identity='PKCS11:libjcPKCS11-2.so:token=jacarta-slot-laser' jc_win
4.2. Настройка sssd
После ввода ПК клиента в домен Windows AD за аутентификацию отвечает служба sssd.
УтилитаÊp11_child, входящая в состав пакета sssd, обеспечивает доступ к сертификату на
токене.
4.2.1. p11_child. Проверка работы sssd c токенами
Убедимся, что служба sssd видит сертификат на токене.
4.2.1.1. Рутокен ECP
user@alt-p10 ~ $ /usr/libexec/sssd/p11_child \
Ê --ca_db=/etc/pki/tls/certs/cacert.pem --pre
RuTokenECP
/usr/lib64/pkcs11/librtpkcs11ecp.so
6C652D52545F4A435F45535F323034382D63633831343231332D653232302D34362D30353632355F45
le-RT_JC_ES_2048-cc814213-e220-46-05625_E
MIIGozCCBYugAwIBAgITJwAAAA1nYbE+RFds5wAAAAAADTANBgkqhkiG9w0BAQsFADBJMRMwEQYKCZImiZP...
0y0AxXzGs4Ex/slygrEGCAO3MJuN3k=
•RuTokenECPÊ— метка (label) токена
•/usr/lib64/pkcs11/librtpkcs11ecp.soÊ— библиотека вендора, которая подходит для данного
токена
•6C652D52545F4A435F45535F323034382D63633831343231332D653232302D34362D30353632355F45 —
идентификатор (id) сертификата
•le-RT_JC_ES_2048-cc814213-e220-46-05625_EÊ— метка (label) сертификата
11
•MIIGozCCBY…AO3MJuN3k=Ê— сертификат (вывод сокращён)
4.2.1.2. ESMART Token
user@alt-p10 ~ $ /usr/libexec/sssd/p11_child \
Ê --ca_db=/etc/pki/tls/certs/cacert.pem --pre
esmart_64
/usr/lib64/pkcs11/libisbc_pkcs11_main.so
6C652D52545F4A435F45535F323034382D66316462616564382D313563642D34332D3038343637
le-RT_JC_ES_2048-f1dbaed8-15cd-43-08467
MIIGozCCBYugAwIBAgITJwAAAA+7dZWQmcp+kAAAAAAADzANBgkqhkiG9w0BAQsFADBJMRMwEQYKCZImiZP...
gqCa6bWGgNqxgCQQpv7ld0N3IzFmTI=
4.2.1.3. JaCarta-2 SE
Для проверки работы службы sssd c токеном JaCarta-2 SE необходимо дополнительно
указать слот. Сделать это можно при помощи схемы pkcs11:<URI>, которая поддерживается в
sssd. С полным перечнем параметровÊpkcs11:<URI>Êможно ознакомиться в RFC7512
(https://datatracker.ietf.org/doc/html/rfc7512#section-2.1).
Создадим символическую ссылку в каталогеÊ/usr/lib64/pkcs11/Êна библиотекуÊ
libjckt2.soÊ(чтобы не было ошибок с первым слотом JaCarta GOST 2.0; исправлено с версии
2.7.4-alt6 пакетаÊlibjcpkcs11):
alt-p10 ~ # cd /usr/lib64/pkcs11/
alt-p10 pkcs11 # ln -s ../libjckt2.so .
user@alt-p10 ~ $ /usr/libexec/sssd/p11_child \
Ê --ca_db=/etc/pki/tls/certs/cacert.pem --pre --uri=pkcs11:token=jacarta-slot-laser
jacarta-slot-laser
/usr/lib64/pkcs11/libjcPKCS11-2.so
6C652D52545F4A435F45535F323034382D39333561643039332D653866662D34632D3237373131
le-RT_JC_ES_2048-935ad093-e8ff-4c-27711
MIIGozCCBYugAwIBAgITJwAAAA4vyUvSfioOvAAAAAAADjANBgkqhkiG9w0BAQsFADBJMRMwEQYKCZImiZP...
P26XcAxrmGfjfT53PYqC30uk+W7S7Q=
4.2.2. sssd.conf. Настройка службы sssd
Добавим в секциюÊ[pam]Êследующие параметры для 2ФА по сертификатам:
[pam]
pam_cert_auth = True
pam_p11_allowed_services = +mate-screensaver, +lightdm, +kf5-screenlocker, +sddm
pam_cert_db_path = /etc/pki/tls/certs/cacert.pem
12
•pam_cert_authÊ— определяем, что следует проводить аутентификацию по сертификату
•pam_p11_allowed_servicesÊ— определяем, каким службам sssd предоставит доступ к
сертификату на токене
•pam_cert_db_pathÊ— указываем расположение сертификата УЦ
Так как аутентификация по токену занимает больше времени чем по паролю (поиск
сертификата на токене, проверка сертификата по протоколу OCSP и т.п.) необходимо
увеличить таймауты для Kerberos и для p11_child. Добавим следующие параметры:
[domain/test5.alt]
...
krb5_auth_timeout = 60
[pam]
...
p11_child_timeout = 60
В итоге конфигурационный файл sssd примет следующий вид:
alt-p10 ~ # cat /etc/sssd/sssd.conf | grep -viE '(^#|^$|^;)'
[sssd]
config_file_version = 2
services = nss, pam
user = _sssd
domains = TEST5.ALT
[nss]
[pam]
pam_cert_auth = True
pam_p11_allowed_services = +mate-screensaver, +lightdm, +kf5-screenlocker, +sddm
pam_cert_db_path = /etc/pki/tls/certs/cacert.pem
p11_child_timeout = 60
[domain/TEST5.ALT]
id_provider = ad
auth_provider = ad
chpass_provider = ad
access_provider = ad
default_shell = /bin/bash
fallback_homedir = /home/%d/%u
debug_level = 0
ad_gpo_ignore_unreadable = true
ad_gpo_access_control = permissive
krb5_auth_timeout = 60
После изменения конфигурации перезапустим службу, очистив при этом кеш sssd:
alt-p10 ~ # systemctl stop sssd && sss_cache -E && systemctl start sssd
13
5. Проверяем 2ФА в текстовой консоли
При аутентификации по сертификату на токене, до приглашения ввести пароль ожидается
приглашение ввода PIN-кода. Если PIN-код верный, аутентификация должна пройти
успешно, иначе — отказ. При успешной аутентификации выдаётся действующий билет
Kerberos.
5.1. Рутокен ECP
alt-p10 login: rt_win
PIN for RuTokenECP:
Last login: Mon Jun 20 17:17:59 MSK 2022 on ttyS0
rt_win@alt-p10 ~ $ klist
Ticket cache: KEYRING:persistent:53804102:krb_ccache_XCL4NK0
Default principal: rt_win@TEST5.ALT
Valid starting Expires Service principal
21.06.2022 18:42:57 22.06.2022 04:42:57 krbtgt/TEST5.ALT@TEST5.ALT
Ê renew until 28.06.2022 18:42:54
5.2. ESMART Token
alt-p10 login: es_win
PIN for esmart_64:
Last login: Mon Jun 20 17:26:23 MSK 2022 on ttyS0
es_win@alt-p10 ~ $ klist
Ticket cache: KEYRING:persistent:53804104:krb_ccache_LPmR1a1
Default principal: es_win@TEST5.ALT
Valid starting Expires Service principal
21.06.2022 18:44:02 22.06.2022 04:44:02 krbtgt/TEST5.ALT@TEST5.ALT
Ê renew until 28.06.2022 18:43:57
5.3. JaCarta-2 SE
Для проверки работы службы sssd c токеном JaCarta-2 SE необходимо дополнительно
указать слот. Добавьте параметр p11_uri=pkcs11:token=jacarta-slot-laserÊв секцию [pam] и
перезапустите службуÊsssd.
alt-p10 login: jc_win
PIN for jacarta-slot-laser:
jc_win@alt-p10 ~ $ klist
Ticket cache: KEYRING:persistent:53804103:krb_ccache_VrG194p
Default principal: jc_win@TEST5.ALT
14
Valid starting Expires Service principal
21.06.2022 19:38:42 22.06.2022 05:38:42 krbtgt/TEST5.ALT@TEST5.ALT
Ê renew until 28.06.2022 19:38:29
15
6. Проверяем 2ФА в графическом сеансе
6.1. Рутокен ECP
16
17
Разблокировка графического сеанса MATE по сертификату:
18
6.2. ESMART Token
19
20
21
Разблокировка графического сеанса MATE по сертификату:
22
6.3. JaCarta-2 SE
Для проверки работы sssd c токеном JaCarta-2 SE необходимо дополнительно указать слот.
Добавьте параметрÊp11_uri=pkcs11:token=jacarta-slot-laser в секциюÊ[pam] и перезапустите
службу sssd.
23
24
25
Разблокировка графического сеанса MATE по сертификату:
26
27
7. Проверка отзыва сертификата
Отзываем сертификат на контроллере домена Windows AD. Для примера отзываем
сертификат пользователя rt_win.
Проверяем 2ФА в консоли:
alt-p10 login: rt_win
Password:
Так как сертификат отозван, то запроса пин-кода нет.
Увидеть это можно в /var/log/sssd/p11_child.log:
...
Ê * (2022-06-22 19:47:15): [p11_child[3763>> [read_certs] (0x4000): found cert[le-
RT_JC_ES_2048-cc814213-e220-46-05625_E][/DC=alt/DC=test/CN=Users/CN=rt_win]
Ê * (2022-06-22 19:47:15): [p11_child[3763>> [do_ocsp] (0x4000): Using OCSP URL
[http://w12r2-vm340.test5.alt/ocsp].
Ê * (2022-06-22 19:47:15): [p11_child[3763>> [do_ocsp] (0x4000): Nonce in OCSP
response is the same as the one used in the request.
Ê * (2022-06-22 19:47:15): [p11_child[3763>> [do_ocsp] (0x0020): OCSP check failed
with [1][revoked].
...
(2022-06-22 19:47:15): [p11_child[3763>> [read_certs] (0x0040): Certificate [le-
RT_JC_ES_2048-cc814213-e220-46-05625_E][/DC=alt/DC=test/CN=Users/CN=rt_win] not valid,
skipping.
28
8. Отладка sssd
Если аутентификация по токену не работает как ожидается, то для более полной
информации по этому процессу добавьте опцию вывода отладочной информации в файлы
логов службы sssd. Логи службы sssd находятся в директории /var/log/sssd/*. Добавление
опции вывода отладочной информации необходимо добавить в те секции
конфигурационного файлаÊsssd.conf, которые необходимо исследовать. Выглядеть это
может, примерно, так:
[domain/test5.alt]
debug_level = 8
...
[sssd]
debug_level = 8
...
[nss]
[ssh]
[sudo]
[pam]
debug_level = 8
...
debug_level = 8Ê— уровень отладки при котором выводятся содержимое внутренних
переменных функций sssd.
Более подробно об уровнях отладки см.Êman sssd.conf.
29
9. Полезные ссылки
•https://sssd.io/design-pages/certmaps_for_LDAP_AD_file.html
•https://sssd.io/design-pages/smartcard_authentication_testing_with_ad.html
•https://sssd.io/design-pages/smartcards.html
•https://sssd.io/design-pages/smartcard_authentication_require.html
•https://k5wiki.kerberos.org/wiki/Pkinit_configuration
•https://web.mit.edu/kerberos/krb5-devel/doc/admin/pkinit.html
•https://dev.rutoken.ru/pages/viewpage.action?pageId=57149225&src=contextnavpagetreemode
•https://dev.rutoken.ru/pages/viewpage.action?pageId=57148831&src=contextnavpagetreemode
•https://www.sysadmins.lv/blog-ru/ocsp-chast-1.aspx
•https://www.sysadmins.lv/blog-ru/ocsp-chast-2.aspx
30