Немного вступления

Коллеги, рад снова приветствовать вас здесь. Снова разговоры об 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

Результат выполнения:

Available slots:

Slot 0 (0x0): Aktiv Rutoken SCR 3001 Reader 00 00
token label        : Rutoken
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   : 60.1
  firmware version   : 30.2
serial num         : 44dc613d
  pin min/max        : 6/32

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
 }

Общий итог данной статьи-инструкции

  1. Мы смогли настроить работу сертификатов в ALSE;

  2. Смогли отслеживать подключение смарт-карты к компьютеру, и автоматически запрашивать пин от хранилища с сертификатом;

  3. Смогли авторизовать пользователей по сертификатам из MS AD. Таким образом, на этапе импортозамещения, вы сможете продолжить пользоваться своими картами и сертификатами. но уже на хостах в домене ALD Pro

Обещанные примеры работы:

Видео не смог сократить до gif, поэтому прикладываю так. Тесты делал на 2.3.0 и 2.4.0.
Инструкция написана в начале года, и только сейчас дошли руки поделиться

Комментарии (0)