
Немного вступления
Коллеги, рад снова приветствовать вас здесь. Снова разговоры об ALD Pro и наболевшем 2FA, который кто-то уже использует, кто-то хочет, но не знает как и с чего начать.
Данная статья будет формата HowTo и в конце продемонстрирую, что все о чем я говорил работает на практике, как без этого?
О чем данная инструкция?
В инструкции мы настроем компьютеры/ВМ под управлением ALSE ( Astra Linux Special Edition ) для работы со считывателями и далее авторизуемся по сертификатам либо выпущенным с помощью коневого сертификата ALD Pro, который генерируется при установке продукта, или выпущенных вашим УЦ MS AD и которые также будут работать на хосте ALSE в домене ALD Pro для авторизации пользователей.
Покажу что мы получим в конце инструкции, чтобы было интересно)

Сторонние, но не бесполезные инструкции, которые смогут помочь решить возникающие у вас проблемы.
1. Подготовка
На клиенте и сервере должны быть установлены необходимые пакеты и библиотеки из репозиториев ALSE.
Для установки выполнить команду в терминале:
sudo apt install libccid pcscd libpcsclite1 pcsc-tools opensc krb5-pkinit libpam-krb5 libengine-pkcs11-openssl1.1 csp-monitor
Для обеспечения возможности обращения к смарт-карте Рутокен ЭЦП, на клиенте и сервере следует установить стороннюю библиотеку librtpkcs11ecp.so, доступную на официальном сайте производителя токенов Рутокен — компании Актив - Скачать можно тут.
Далее устанавливаем:
dpkg -i librtpkcs11ecp_2.17.1.0-1_amd64.deb
2. Проверка работы РуТокена:
Выполнить команду, указав актуальное расположение библиотеки:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Результат выполнения:
|
3. Для инициализации rutoken используем инструмент pkcs11-tool:
pkcs11-tool --slot 0 --init-token --so-pin 87654321 --label 'AstraLinux' --module /usr/lib/librtpkcs11ecp.so
--slot 0 — указывает, в какой виртуальный слот подключено устройство. Как правило, это слот 0, но могут быть и другие значения - 1,2 и т.д.;
--init-token - команда инициализации токена;
--so-pin 87654321 - PIN-код администратора Рутокен ЭЦП. По умолчанию имеет значение 87654321;
--label 'AstraLinux' - название устройства;
--module /usr/lib/librtpkcs11ecp.so — указывает путь до библиотеки librtpkcs11ecp.so.
4. Для задания PIN-кода пользователя используем команду:
pkcs11-tool --slot 0 --init-pin --so-pin '87654321' --login --pin '12345678' --module /usr/lib/librtpkcs11ecp.so
--init-pin - команда установки PIN-кода пользователя;
--login - команда входа в токен;
--pin 12345678 - задаваемый PIN-код пользователя;
5. Для генерации ключей на устройстве используем команду:
pkcs11-tool --slot 0 --login --pin 12345678 --keypairgen --key-type rsa:2048 --id 33 --label "2fa_user_key" --module /usr/lib/librtpkcs11ecp.so
-keypairgen --key-type rsa:2048 — указывает, что должны быть созданы RSA ключи длиной 2048 бит;
--id 33 — устанавливает атрибут CKA_ID ключа. CKA_ID может быть любым;
--label “2fa_user_key” — устанавливает атрибут CKA_LABEL(имя) ключа. Атрибут может быть любым;
6. Для генерации запроса на сертификат используем команду:
Для ALSE 1.7.х ( openssl 1.1):
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:/usr/lib/librtpkcs11ecp.so
req -engine pkcs11 -new -key 0:33 -keyform engine -out user.req
Пример генерации запроса в интерактивном режиме на ALSE 1.7.6:
root@client:/home/astra# openssl
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:/usr/lib/librtpkcs11ecp.so
(dynamic) Dynamic engine loading support
[Success]: SO_PATH:/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Success]: LOAD
[Success]: MODULE_PATH:/usr/lib/librtpkcs11ecp.so
Loaded: (pkcs11) pkcs11 engine
OpenSSL> req -engine pkcs11 -new -key 0:33 -keyform engine -out user.req
engine "pkcs11" set.
Enter PKCS#11 token PIN for Rutoken:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Samara
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:user (!Здесь указать логин пользователя из домена ALD Pro)
Email Address []:user@ald.pro (!Здесь указать почту пользователя из домена ALD Pro)
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
OpenSSL> exit
root@client:/home/astra#
Для ALSE 1.8 ( openssl >= 3.0 )
В OpenSSL 3.0 убрали интерактивный режим. Для работы с pkcs11 engine теперь необходимо создать файл конфигурации engine.conf со следующим содержимым:
openssl_conf = openssl_init
[openssl_init]
engines = engine_section
[engine_section]
pkcs11 = pkcs11_section
[pkcs11_section]
engine_id = pkcs11
dynamic_path = /usr/lib/x86_64-linux-gnu/engines-3/pkcs11.so
MODULE_PATH = /usr/lib/librtpkcs11ecp.so
default_algorithms = ALL
#При необходимости использовать pkcs11 engine указывать путь к файлу конфигурации engine.conf, например:
OPENSSL_CONF=/path/to/engine.conf openssl req -engine pkcs11 -new -key 0:33 -keyform engine -out user1.req -subj "/C=RU/ST=Moscow/L=Moscow/O=astra/OU=linux/CN=testuser/emailAddress=testuser@mail.com"
7. Копируем запрос на сертификат
Необходимо скопировать созданный файл на шаге 6 — user.req на контроллер домена, где существуют сертификаты /etc/ssl/freeipa/ca.crt и ключ /etc/ssl/freeipa/ca.key
8. Подписываем запроса на выдачу сертификата из шага 7 на контроллере домена
а) Установить переменные окружения:
export REALM=ALD.PRO - имя домена заглавными буквами
export CLIENT=user - имя УЗ из домена
б) Для того, чтобы убедиться что переменные указаны верно, использовать команду:
env | grep -E "REALM|CLIENT"
в) Скачать файл pkinit_extensions на контроллер домена
Содержимое файла:
[ kdc_cert ]
basicConstraints=CA:FALSE
# Here are some examples of the usage of nsCertType. If it is omitted
keyUsage = nonRepudiation, digitalSignature, keyEncipherment, keyAgreement
#Pkinit EKU
extendedKeyUsage = 1.3.6.1.5.2.3.5
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
# Copy subject details
issuerAltName=issuer:copy
# Add id-pkinit-san (pkinit subjectAlternativeName)
subjectAltName=otherName:1.3.6.1.5.2.2;SEQUENCE:kdc_princ_name
[kdc_princ_name]
realm = EXP:0, GeneralString:${ENV::REALM}
principal_name = EXP:1, SEQUENCE:kdc_principal_seq
[kdc_principal_seq]
name_type = EXP:0, INTEGER:1
name_string = EXP:1, SEQUENCE:kdc_principals
[kdc_principals]
princ1 = GeneralString:krbtgt
princ2 = GeneralString:${ENV::REALM}
[ client_cert ]
# These extensions are added when 'ca' signs a request.
basicConstraints=CA:FALSE
keyUsage = digitalSignature, keyEncipherment, keyAgreement
extendedKeyUsage = 1.3.6.1.5.2.3.4
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
subjectAltName=otherName:1.3.6.1.5.2.2;SEQUENCE:princ_name
# Copy subject details
issuerAltName=issuer:copy
[princ_name]
realm = EXP:0, GeneralString:${ENV::REALM}
principal_name = EXP:1, SEQUENCE:principal_seq
[principal_seq]
name_type = EXP:0, INTEGER:1
name_string = EXP:1, SEQUENCE:principals
[principals]
princ1 = GeneralString:${ENV::CLIENT}
г) Выпустить сертификат пользователя:
sudo -E openssl x509 -CAkey /etc/ssl/freeipa/ca.key -CA /etc/ssl/freeipa/ca.crt -req -in user.req -extensions client_cert -extfile pkinit_extensions -out user.pem -days 365
д) Проверка валидности сертификата
openssl verify -verbose -CAfile /etc/ssl/freeipa/ca.crt user.pem
Вывод:
user.pem: OK
е) Перекодировать полученный сертификат из формата PEM в формат DER:
sudo openssl x509 -in user.pem -out user.cer -inform PEM -outform DER
9. Добавление сертификата для пользователя домена
У вас в папке откуда вы запускали команды из шага 8, появилось два файла user.pem и user.cer. Необходимо выполнить команду cat user.pem
, результатом будет вывод содержимого сертификата в консоль
-----BEGIN CERTIFICATE-----
MIIDzzCCAregAwIBAgIUF/S6tA5cfZy73Gk1oyOYlwLkPh0wDQYJKoZIhvcNAQEL
BQAwITEfMB0GA1UEAwwWQ0EgU2lnbmluZyBDZXJ0aWZpY2F0ZTAeFw0yNDExMDcx
MzUxMDBaFw0yNTExMDcxMzUxMDBaMG4xCzAJBgNVBAYTAlJVMQ8wDQYDVQQIDAZT
YW1hcmExEDAOBgNVBAoMB0FMRC5QUk8xEDAOBgNVBAsMB2FsZC5wcm8xDTALBgNV
BAMMBHRlc3QxGzAZBgkqhkiG9w0BCQEWDHRlc3RAYWxkLnBybzCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBAKAnuVaOInBKutTCRVTxMsCf/D3isBo3+++n
qIvgoKDCmp+LkFp1LJQQQOYH27pD86rdh7ZfCTupAnKAXKPyuG2/XnC8dZMyfJw+
wTxPFRopr35ufwP4Kwhj2tNaO1YNfgRVm9gGIEo84NGDzjVFu1mEikIRG9vhh/1A
g4yDCzvWaIxtIDdK4JzEcbHWoHc6/YGREhsVXVqoVi9FXzaUX+MJHNFMY7VvMtuf
DrQkp1nhpACMlidbKvGI0hELZm8FNdlT/BW3ZfU1CN48TTxF8UUNSAMz9F8eqCSN
njbpdI4lLoQKrWzpQcl9tC+g9eZQHSrZGTnT9iFjwZa575LxlNUCAwEAAaOBsTCB
rjAJBgNVHRMEAjAAMAsGA1UdDwQEAwIDqDASBgNVHSUECzAJBgcrBgEFAgMEMB0G
A1UdDgQWBBRBUCUcme5twNyOM7EOGL7NXZwfeDAfBgNVHSMEGDAWgBTJhQuGnyO4
Q/QwuR7hkT98t/hbvzA1BgNVHREELjAsoCoGBisGAQUCAqAgMB6gCRsHQUxELlBS
T6ERMA+gAwIBAaEIMAYbBHRlc3QwCQYDVR0SBAIwADANBgkqhkiG9w0BAQsFAAOC
AQEAaDFK5gfpNP/q+XQig5TZf4QzpaVvlFE7xPLyeKcaopLU7lJObCeODjt9OgwP
LeixwbpaqHC9I/GLaug7ODRgb8u8cV9F4qlxXseAP5odemhjHFTX8bSJmNblVYAd
pj4OWNikA6HZCrHSi56HntaZP99T0QlY8d0dGABkmg+f9pgdERSIJIwW6wfxY0ej
tiNbXbXR1TeDKgkpra70CrmQrbkYGwBcQc/0K8t0N0SEiEpG42tAyWQ+54x+UlQq
0mv9SmzoUzvidi8DUqsp5+8oYOkLpzKu6wnefcSrz0U9hRyXwYXxI/GJ+fpjbBMd
NbEzfTVrIJ1xtKHA3Hvtiq/XnA==
-----END CERTIFICATE-----
10. Добавить сертификат в web-панель Freeipa
Скопировать полностью весь ввод ( со строчками -----BEGIN CERTIFICATE----- и -----END CERTIFICATE-----), открыть панель управления Freeipa → Пользователи → Выбрать нужного пользователя → справа в колонке будет кнопка сертификаты → нажимаем добавить и вставляем скопированное содержимое сертификата user.pem

Можно выполнить команду
kinit admin
ipa user-add-cert user --certificate="$(grep -v ^---- user.pem)"
11. Записать полученный сертификат на токен:
Копируем файл user.cer на машину, где подключен рутокен и выполняем команду:
pkcs11-tool --slot 0 --login --pin 12345678 --write-object user.cer --type 'cert' --label '2fa_user_key' --id 33 --module /usr/lib/librtpkcs11ecp.so
--write-object user.cer — указывает, что необходимо записать объект и путь до него;
--type 'cert'— указывает, что тип записываемого объекта - сертификат;
'cert' --label '2fa_user_key' — устанавливает атрибут CKA_LABEL(имя) сертификата. Атрибут может быть любым;
12. Изменить файл /etc/krb5.conf
[libdefaults]
# для аутентификации по токену для всех доменов. Если необходимо только для одного, указать эту строчку в разделе realm
pkinit_identities = PKCS11:/usr/lib/librtpkcs11ecp.so
13. Выполнить проверку:
env KRB5_TRACE=/dev/stdout kinit <имя_пользователя>
<имя_пользователя> - user в нашем случае
Вывод команды:
root@client:/home/astra# env KRB5_TRACE=/dev/stdout kinit user
[6579] 1730988020.977752: Getting initial credentials for user@ALD.PRO
[6579] 1730988020.977754: Sending unauthenticated request
[6579] 1730988020.977755: Sending request (172 bytes) to ALD.PRO
[6579] 1730988020.977756: Sending DNS URI query for _kerberos.ALD.PRO.
[6579] 1730988020.977757: No URI records found
[6579] 1730988020.977758: Sending DNS SRV query for _kerberos._udp.ALD.PRO.
[6579] 1730988020.977759: SRV answer: 0 100 88 "dc.ald.pro."
[6579] 1730988020.977760: Sending DNS SRV query for _kerberos._tcp.ALD.PRO.
[6579] 1730988020.977761: SRV answer: 0 100 88 "dc.ald.pro."
[6579] 1730988020.977762: Resolving hostname dc.ald.pro.
[6579] 1730988020.977763: Resolving hostname dc.ald.pro.
[6579] 1730988020.977764: Initiating TCP connection to stream 192.168.0.249:88
[6579] 1730988020.977765: Sending TCP request to stream 192.168.0.249:88
[6579] 1730988020.977766: Received answer (280 bytes) from stream 192.168.0.249:88
[6579] 1730988020.977767: Terminating TCP connection to stream 192.168.0.249:88
[6579] 1730988020.977768: Sending DNS URI query for _kerberos.ALD.PRO.
[6579] 1730988020.977769: No URI records found
[6579] 1730988020.977770: Sending DNS SRV query for _kerberos-master._tcp.ALD.PRO.
[6579] 1730988020.977771: SRV answer: 0 100 88 "dc.ald.pro."
[6579] 1730988020.977772: Response was from master KDC
[6579] 1730988020.977773: Received error from KDC: -1765328359/Additional pre-authentication required
[6579] 1730988020.977776: Preauthenticating using KDC method data
[6579] 1730988020.977777: Processing preauth types: PA-PK-AS-REQ (16), PA-FX-FAST (136), PA-ETYPE-INFO2 (19), PA-PKINIT-KX (147), PA-ENC-TIMESTAMP (2), PA_AS_FRESHNESS (150), PA-FX-COOKIE (133)
[6579] 1730988020.977778: Selected etype info: etype aes256-cts, salt "!bL$/\N)sks*EUQK", params ""
[6579] 1730988020.977779: Received cookie: MIT
[6579] 1730988021.308008: Preauth module pkinit (147) (info) returned: 0/Success
[6579] 1730988021.308009: PKINIT client received freshness token from KDC
[6579] 1730988021.308010: Preauth module pkinit (150) (info) returned: 0/Success
Rutoken PIN:
[6579] 1730988025.569198: PKINIT loading CA certs and CRLs from FILE
[6579] 1730988025.569199: PKINIT loading CA certs and CRLs from FILE
[6579] 1730988025.569200: PKINIT client computed kdc-req-body checksum 9/DAF762A26915FD405BFD4EF69C40EFDA0BF07062
[6579] 1730988025.569202: PKINIT client making DH request
[6579] 1730988026.152018: Preauth module pkinit (16) (real) returned: 0/Success
[6579] 1730988026.152019: Produced preauth for next request: PA-FX-COOKIE (133), PA-PK-AS-REQ (16)
[6579] 1730988026.152020: Sending request (2756 bytes) to ALD.PRO
[6579] 1730988026.152021: Sending DNS URI query for _kerberos.ALD.PRO.
[6579] 1730988026.152022: No URI records found
[6579] 1730988026.152023: Sending DNS SRV query for _kerberos._udp.ALD.PRO.
[6579] 1730988026.152024: SRV answer: 0 100 88 "dc.ald.pro."
[6579] 1730988026.152025: Sending DNS SRV query for _kerberos._tcp.ALD.PRO.
[6579] 1730988026.152026: SRV answer: 0 100 88 "dc.ald.pro."
[6579] 1730988026.152027: Resolving hostname dc.ald.pro.
[6579] 1730988026.152028: Resolving hostname dc.ald.pro.
[6579] 1730988026.152029: Initiating TCP connection to stream 192.168.0.249:88
[6579] 1730988026.152030: Sending TCP request to stream 192.168.0.249:88
[6579] 1730988026.152031: Received answer (3212 bytes) from stream 192.168.0.249:88
[6579] 1730988026.152032: Terminating TCP connection to stream 192.168.0.249:88
[6579] 1730988026.152033: Sending DNS URI query for _kerberos.ALD.PRO.
[6579] 1730988026.152034: No URI records found
[6579] 1730988026.152035: Sending DNS SRV query for _kerberos-master._tcp.ALD.PRO.
[6579] 1730988026.152036: SRV answer: 0 100 88 "dc.ald.pro."
[6579] 1730988026.152037: Response was from master KDC
[6579] 1730988026.152038: Processing preauth types: PA-PK-AS-REP (17)
[6579] 1730988026.152039: PKINIT client verified DH reply
[6579] 1730988026.152040: PKINIT client found id-pkinit-san in KDC cert: krbtgt/ALD.PRO@ALD.PRO
[6579] 1730988026.152041: PKINIT client matched KDC principal krbtgt/ALD.PRO@ALD.PRO against id-pkinit-san; no EKU check required
[6579] 1730988026.152042: PKINIT client used KDF 2B06010502030602 to compute reply key aes256-cts/F33D
[6579] 1730988026.152043: Preauth module pkinit (17) (real) returned: 0/Success
[6579] 1730988026.152044: Produced preauth for next request: (empty)
[6579] 1730988026.152045: AS key determined by preauth: aes256-cts/F33D
[6579] 1730988026.152046: Decrypted AS reply; session key is: aes256-cts/1581
[6579] 1730988026.152047: FAST negotiation: available
[6579] 1730988026.152048: Initializing KEYRING:persistent:0:0 with default princ user@ALD.PRO
[6579] 1730988026.152049: Storing user@ALD.PRO -> krbtgt/ALD.PRO@ALD.PRO in KEYRING:persistent:0:0
[6579] 1730988026.152050: Storing config in KEYRING:persistent:0:0 for krbtgt/ALD.PRO@ALD.PRO: fast_avail: yes
[6579] 1730988026.152051: Storing user@ALD.PRO -> krb5_ccache_conf_data/fast_avail/krbtgt\/ALD.PRO\@ALD.PRO@X-CACHECONF: in KEYRING:persistent:0:0
[6579] 1730988026.152052: Storing config in KEYRING:persistent:0:0 for krbtgt/ALD.PRO@ALD.PRO: pa_type: 16
[6579] 1730988026.152053: Storing user@ALD.PRO -> krb5_ccache_conf_data/pa_type/krbtgt\/ALD.PRO\@ALD.PRO@X-CACHECONF: in KEYRING:persistent:0:0
[6579] 1730988026.152054: Storing config in KEYRING:persistent:0:0 for krbtgt/ALD.PRO@ALD.PRO: pa_config_data: {"X509_user_identity":"PKCS11:module_name=/usr/lib/librtpkcs11ecp.so"}
[6579] 1730988026.152055: Storing user@ALD.PRO -> krb5_ccache_conf_data/pa_config_data/krbtgt\/ALD.PRO\@ALD.PRO@X-CACHECONF: in KEYRING:persistent:0:0
14. Настройка ALSE для работы с пин от токена
Выполняем команды на клиенте домена, где будет происходить авторизация
mkdir -p /etc/pkcs11/modules
echo -e "module: /usr/lib/librtpkcs11ecp.so" | tee /etc/pkcs11/modules/a-rutoken.module
echo -e "[global]\npkcs11_module = librtpkcs11ecp.so" | tee /etc/security/pam_csp.conf
systemctl restart csp-monitor
Изменяем стандартную тему, чтобы корректно работал monitor-csp и ввод пин-кода от сертификата:
sed -i.bak -e "s/^PluginsLogin=modern/PluginsLogin=auto/" -e "s/^Theme=\/usr\/share\/fly-dm\/themes\/fly-modern/Theme=\/usr\/share\/fly-dm\/themes\/fly-flat/" /etc/X11/fly-dm/fly-dmrc
Добавив use_pkinit в строчку auth [success=6 default=ignore] pam_krb5.so. Привести файл /etc/pam.d/common-auth к виду:
# here are the per-package modules (the "Primary" block)
auth [success=6 default=ignore] pam_krb5.so minimum_uid=2500 use_pkinit
auth [success=ignore default=2] pam_localuser.so
auth [success=1 default=ignore] pam_succeed_if.so quiet user ingroup astra-admin
auth [success=ignore default=die] pam_tally.so per_user deny=8
auth [success=2 default=ignore] pam_unix.so nullok_secure try_first_pass
auth [success=1 default=ignore] pam_sss.so use_first_pass
# here's the fallback if no module succeeds
auth requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth required pam_permit.so
# and here are more per-package modules (the "Additional" block)
# end of pam-auth-update config
Закомментировать строчку -auth optional pam_kwallet5.so
,в файле /etc/pam.d/fly-dm, чтобы не появлялось повторное окно запроса пин, для разблокировки не используемых кошельков хранения паролей.
#%PAM-1.0
auth required pam_parsec_mac.so
auth requisite pam_nologin.so
auth required pam_env.so readenv=1
auth required pam_env.so readenv=1 envfile=/etc/default/locale
@include common-auth
-auth optional pam_gnome_keyring.so
#-auth optional pam_kwallet5.so
session required pam_parsec_mac.so unshare_root_only
session required pam_limits.so
session required pam_loginuid.so
@include common-account
account required pam_parsec_mac.so labelselect=appset
@include common-session
session required pam_parsec_cap.so
session required pam_parsec_aud.so
session required pam_parsec_mac.so
-session optional pam_gnome_keyring.so auto_start
-session optional pam_kwallet5.so auto_start
@include common-password
Результат:
На данном этапе у нас уже работает вход по смарт-карте для домена ALD Pro, пользователем из домена ALD Pro, по самоподписанному сертификату.
16. Настройка входа по токену пользователя из MSAD на клиент в домене ALD Pro ( в 2.3.0 и в 2.4.0 )
16.1 Установить доверительные отношение с доменом MS AD ( в примере msad.test)
16.2 Настройка файл /etc/krb5.conf на КД ALD Pro
а) Добавить раздел в realms информацию о домене MS AD и настройки для домена ( !ВАЖНО маленькими буквами);
б) domain_realm добавлена информация о домене MS AD;
в) pkinit_anchors = FILE:/etc/krb5/DOMAIN_CERT.pem — сертификат ПК ms ad с установленным CA на нем же.( если ca установлен отдельно, то необходимо будет добавить путь и до него)
includedir /etc/krb5.conf.d/
includedir /var/lib/sss/pubconf/krb5.include.d/
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = ALD2.PRO
dns_lookup_realm = false
dns_lookup_kdc = true
rdns = false
ticket_lifetime = 24h
forwardable = true
udp_preference_limit = 0
default_ccache_name = KEYRING:persistent:%{uid}
[realms]
ALD2.PRO = {
kdc = dc2.ald2.pro:88
master_kdc = dc2.ald2.pro:88
admin_server = dc2.ald2.pro:749
default_domain = ald2.pro
pkinit_anchors = FILE:/var/lib/ipa-client/pki/kdc-ca-bundle.pem
pkinit_pool = FILE:/var/lib/ipa-client/pki/ca-bundle.pem
}
#важно указать именно маленькими буквами
#начало добавления
msad.test = {
default_realm = MSAD.TEST
pkinit_identities = PKCS11:/usr/lib/librtpkcs11ecp.so
kdc = MSAD.TEST
pkinit_eku_checking = kpServerAuth
pkinit_kdc_hostname = dc1.MSAD.TEST
pkinit_anchors = FILE:/etc/krb5/DOMAIN_CERT.pem
}
#конец добавления
[domain_realm]
.ald2.pro = ALD2.PRO
ald2.pro = ALD2.PRO
.msad.test = MSAD.TEST #добавлено
msad.test = MSAD.TEST #добавлено
dc2.ald2.pro = ALD2.PRO
[dbmodules]
ALD2.PRO = {
db_library = ipadb.so
}
[plugins]
certauth = {
module = ipakdb:kdb/ipadb.so
enable_only = ipakdb
}
Общий итог данной статьи-инструкции
Мы смогли настроить работу сертификатов в ALSE;
Смогли отслеживать подключение смарт-карты к компьютеру, и автоматически запрашивать пин от хранилища с сертификатом;
Смогли авторизовать пользователей по сертификатам из MS AD. Таким образом, на этапе импортозамещения, вы сможете продолжить пользоваться своими картами и сертификатами. но уже на хостах в домене ALD Pro
Обещанные примеры работы:
Видео не смог сократить до gif, поэтому прикладываю так. Тесты делал на 2.3.0 и 2.4.0.
Инструкция написана в начале года, и только сейчас дошли руки поделиться