| Информация |
|---|
Начиная с очередного обновления 1.8 программное обеспечение Astra Linux Directory (ALD) исключено из состава Astra Linux Special Edition. Для организации доменов рекомендуется использовать программный комплекс ALD Pro. Также возможно использование доменов FreeIPA, Samba, Windows AD. Актуальную статьи по применению ключевых носителей в Astra Linux см. по ссылкам: |
| Оглавление |
|---|
| Информация | ||
|---|---|---|
| ||
|
Описание стенда
Стенд состоит из сервера и клиента, входящих в домен домен Astra Linux Directory (ALD):
- имя домена: SMARTCARD.ALD;
- сервер:
- под управлением Astra Linux Special Edition 1.6 с установленным обновлением БЮЛЛЕТЕНЬ № 20190222SE16 (оперативное обновление 2) или боле поздними обновлениями;
- на сервере развернут домен Astra Linux Directory (ALD) (см. Astra Linux Directory (ALD));
- имя сервера: kdc;
- клиент:
- под управлением Astra Linux Special Edition 1.6 с установленным обновлением БЮЛЛЕТЕНЬ № 20190222SE16 (оперативное обновление 2) или боле поздними обновлениями;
- имя клиента: client;
- для двухфакторной аутентификации используется токен Рутокен ЭЦП;
- существует минимум один доменный пользователь, который может пройти аутентификацию по паролю;
- показания часов клиента и сервера совпадают (см. Службы синхронизации времени в Astra Linux).
Терминология Kerberos
- Билет (ticket) – временные данные, выдаваемые клиенту для аутентификации на сервере, на котором располагается необходимая служба.
- Клиент (client) – некая сущность в сети (пользователь, хост или сервис), которая может получить билет от Kerberos.
- Центр выдачи ключей (key distribution center, KDC) – служба, выдающая билеты Kerberos.
- Область (realm) – сеть, используемая Kerberos, состоящая из серверов KDC и множества клиентов. Имя realm регистрозависимо, обычно совпадает с именем домена, записанным заглавными буквами.
- Принципал (principal) – уникальное имя для клиента, для которого разрешается аутентификация в Kerberos. Записывается в виде root[/instance]@REALM.
Установка пакетов на сервер и клиент
На клиенте и сервере должны быть установлены следующие пакеты из репозитория Astra Linux:
- Для обеспечения работы со смарт-картой Рутокен ЭЦП:
- libccid;
- pcscd;
- libpcsclite1;
- opensc;
- Для обеспечения работы Kerberos со смарт-картой:
- krb5-pkinit;
- libpam-krb5.
На сервере для обеспечения возможности выпуска ключей и сертификатов на Рутокен ЭЦП должен быть установлен пакет libenginelibengine-pkcs11-openssl1.1. openssl
Команда для установки всех вышеперечисленных пакетов:
| Command |
|---|
sudo apt install libccid pcscd libpcsclite1 pcsc-tools opensc krb5-pkinit libpam-krb5 libengine-pkcs11-openssl1.1 |
Для обеспечения возможности обращения к смарт-карте Рутокен ЭЦП, на клиенте и сервере следует установить стороннюю библиотеку librtpkcs11ecp.so, доступную на официальном сайте производителя токенов Рутокен — компании Актив https://www.rutoken.ru/support/download/pkcs/
| Информация |
|---|
| Версия библиотеки для платформы Эльбрус доступна по ссылке: librtpkcs11ecp_2.0.2.0-1astra_e2k-8c.deb |
Установка загруженного файла может быть выполнена командой:
| Command |
|---|
| sudo apt install ./librtpkcs11ecp_*.deb |
При таком способе установки может выдаваться предупреждение "Download is performed unsandboxed"/"Загрузка без ограничения песочницы", которое влияет на ход установки и может быть проигнорировано.
Установка и настройка удостоверяющего центра на сервере
Для создания закрытых ключей (далее - ключи) и сертификатов закрытых ключей (далее - сертификаты) клиента и сервера в качестве удостоверяющего центра (УЦ) используется OpenSSL. OpenSSL — OpenSSL — криптографический пакет с открытым исходным кодом для работы с SSL/TLS. Позволяет создавать ключи RSA, DH, DSA, ГОСТ и сертификаты X.509, подписывать их, формировать CSR и CRT.
Для создания ключей и сертификатов выполнить следующие действия:
Создать каталог УЦ (имя каталога - CA). В этом каталоге будут размещаться созданные ключи и сертификаты. Команда:
Command sudo mkdir /etc/ssl/CA Перейти в созданный каталог:
Command cd /etc/ssl/CA Создать ключ и сертификат CA, заполнив в диалоге необходимую информацию. В поле Common Name при этом следует указать имя домена. В настоящем примере: SMARTCARD.ALD:
Command sudo openssl genrsa -out cakey.pem 2048
sudo openssl req -key cakey.pem -new -x509 -days 3650 -out cacert.pemопция -days задает срок действия сертификата в днях (в примере выше - 3650 дней). Пример диалога:
Блок кода 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]:Moscow Locality Name (eg, city) []:Astra Linux Organization Name (eg, company) [Internet Widgits Pty Ltd]:Astra Linux Organizational Unit Name (eg, section) []:Wiki Common Name (e.g. server FQDN or YOUR name) []:SMARTCARD.ALD
Создать ключ и и запрос на сертификат KDC, в диалоге заполнив необходимую информацию. В данном случае в поле Common Name указать kdc. Команда:
Command sudo openssl genrsa -out kdckey.pem 2048
sudo openssl req -new -out kdc.req -key kdckey.pemУстановите переменные окружения. Переменные окружения применяются в рамках текущей сессии, не устанавливаются для других сессий и не сохраняются после закрытия текущей сессии:
Command export REALM=SMARTCARD.ALD
export CLIENT=kdcДля того, чтобы убедиться что переменные указаны верно, можно использовать команду:
Command env | grep -E "REALM|CLIENT" Загрузить файл pkinit_extensions и сохранить его в текущем каталоге: pkinit_extensions. Содержимое файла:
Раскрыть title содержимое файла pkinit_extensions: [ kdc_cert ]basicConstraints=CA:FALSE
# Here are some examples of the usage of nsCertType. If it is omittedkeyUsage = nonRepudiation, digitalSignature, keyEncipherment, keyAgreement
#Pkinit EKUextendedKeyUsage = 1.3.6.1.5.2.3.5
subjectKeyIdentifier=hashauthorityKeyIdentifier=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:1name_string = EXP:1, SEQUENCE:kdc_principals
[kdc_principals]princ1 = GeneralString:krbtgtprinc2 = 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.4subjectKeyIdentifier=hashauthorityKeyIdentifier=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:1name_string = EXP:1, SEQUENCE:principals
[principals]princ1 = GeneralString:${ENV::CLIENT}Выпустить сертификат KDC:
Command sudo -E openssl x509 -req -in kdc.req -CAkey cakey.pem -CA cacert.pem -out kdc.pem -extfile pkinit_extensions -extensions kdc_cert -CAcreateserial -days 365 Файлы kdc.pem, kdckey.pem, cacert.pem скопировать в каталог /var/lib/krb5kdc/:
Command sudo cp kdc.pem kdckey.pem cacert.pem /var/lib/krb5kdc/ Создать резервную копию файла /etc/krb5kdc/kdc.conf, после чего отредактировать /etc/krb5kdc/kdc.conf, дополнив секцию [kdcdefaults] следующими записями:
Блок кода pkinit_identity = FILE:/var/lib/krb5kdc/kdc.pem,/var/lib/krb5kdc/kdckey.pem pkinit_anchors = FILE:/var/lib/krb5kdc/cacert.pem
Первая запись задает ключи и сертификат сервера, а вторая указывает на корневой сертификат центра сертификации.
Для принятия изменений выполнить команду:
Command sudo systemctl restart krb5-admin-server krb5-kdc
Подготовка смарт-карты. Выпуск ключей и сертификата пользователя
Подключите устройство, которое следует подготовить.
Проверка работы Рутокен в системе
Для проверки работы Рутокен:
Определить расположение библиотеки librtpkcs11ecp.so:
Command find /usr/*(lib|lib64) -name librtpkcs11ecp.so Далее используется путь /usr/lib/librtpkcs11ecp.so.
Выполнить команду, указав актуальное расположение библиотеки:
Command pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Инициализация устройства
| Предупреждение |
|---|
| Инициализация устройства удалит все данные на Рутокен ЭЦП без возможности восстановления. Подробнее про работу с токенами Рутокен см. СКЗИ Актив РуТокен |
Для инициализации используется инструмент pkcs11-tool:
| Command |
|---|
pkcs11-tool --slot 0 --init-token --so-pin 87654321 --label 'AstraLinux' --module /usr/lib/librtpkcs11ecp.so |
| Примечание |
|---|
--slot 0 — указывает, в какой виртуальный слот подключено устройство. Как правило, это слот 0, но могут быть и другие значения - 1,2 и т.д.; |
Задание PIN-кода пользователя
Для задания PIN-кода пользователя использовать команду:
| Command |
|---|
pkcs11-tool --slot 0 --init-pin --so-pin '87654321' --login --pin '12345678' --module /usr/lib/librtpkcs11ecp.so |
| Примечание |
|---|
--init-pin - команда установки PIN-кода пользователя; |
Генерация пары ключей на Рутокен ЭЦП
Для генерации ключей на устройстве использовать команду:
| Command |
|---|
pkcs11-tool --slot 0 --login --pin 12345678 --keypairgen --key-type rsa:2048 --id 33 --label "2fa_test1_key" --module /usr/lib/librtpkcs11ecp.so |
| Примечание |
|---|
-keypairgen --key-type rsa:2048 — указывает, что должны быть созданы RSA ключи длиной 2048 бит; |
Генерация запроса на сертификат
Для генерации запроса на сертификат использовать команду:
| Command |
|---|
| 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 |
OpenSSL> req -engine pkcs11 -new -key 0:33 -keyform engine -out client.req
|
| Примечание |
|---|
-new -key 0:33, где 0— номер виртуального слота с устройством, 33 — атрибут CKA_ID раннее созданной ключевой пары. В поле Common Name следует указать имя пользователя. |
Выпуск сертификата для пользователя
Далее предполагается, что действия выполняются в ранее созданном каталоге удостоверяющего центра (каталог /etc/ssl/CA).
Установить переменные окружения:
| Command |
|---|
| export REALM=SMARTCARD.ALD export CLIENT=test1 |
| Примечание |
|---|
SMARTCARD.ALD - имя домена |
Для того, чтобы убедиться что переменные указаны верно, использовать команду:
| Command |
|---|
| env | grep -E "REALM|CLIENT" |
Выпустить сертификат пользователя:
| Command |
|---|
| sudo -E openssl x509 -CAkey cakey.pem -CA cacert.pem -req -in client.req -extensions client_cert -extfile pkinit_extensions -out client.pem -days 365 |
Перекодировать полученный сертификат из формата PEM в формат DER:
| Command |
|---|
| sudo openssl x509 -in client.pem -out client.cer -inform PEM -outform DER |
Записать полученный сертификат на токен:
| Command |
|---|
| pkcs11-tool --slot 0 --login --pin 12345678 --write-object client.cer --type 'cert' --label 'test1' --id 33 --module /usr/lib/librtpkcs11ecp.so |
| Примечание |
|---|
--write-object ./client.cer— указывает, что необходимо записать объект и путь до него; |
Настройка клиента. Проверка работоспособности
- Создать на клиенте каталог /etc/krb5/;
- Скопировать в созданный каталог /etc/krb5/ сертификат УЦ (cacert.pem) c сервера.
Настроить Kerberos, для чего в файле /etc/krb5.conf секцию [libdefaults] дополнить следующими строками:
Блок кода [libdefaults] default_realm = SMARTCARD.ALD pkinit_anchors = FILE:/etc/krb5/cacert.pem # для аутентификации по токену pkinit_identities = PKCS11:/usr/lib/librtpkcs11ecp.so
Выполнить проверку:
Command $ kinit Когда появится строка запроса PIN-кода к карте, ввести его. Для проверки того, что билет kerberos был успешно получен для пользователя, выполнить команду:
Command klist Для удаления билета:
Command kdestroy Примечание Для включения отладки команду kinit использовать в форме:
Command env KRB5_TRACE=/dev/stdout kinit <имя_пользователя>
Вход выполняется с подключенным токеном к компьютеру. При графическом входе в поле Login вводится имя пользователя, в поле Password вводится <PIN пользователя>. При консольном входе все аналогично, только в момент ввода пароля будет сообщено, что требуется <PIN пользователя>:
| Command |
|---|
| login test1 |
Настройка политики аутентификации
Существует возможность указания дополнительных параметров модуля аутентификации pam_krb5.so в файле /etc/pam.d/common-auth в строке относящейся к pam_krb5.so:
– try_pkinit — режим при котором осуществляется попытка аутентификации с помощью устройств PKCS-11, в случае провала попытки предоставляется возможность входа с помощью Kerberos пароля пользователя;
– use_pkinit — режим при котором требуется аутентификация с помощью устройств PKCS-11, в случае провала процесс входа прерывается;
– pkinit_prompt — вывод приглашения для подключения устройства PKCS-11 перед выполнением попытки входа.
| Примечание |
|---|
После обновления pam-auth-update, опции pkinit исчезнут. Для того, чтобы опция сохранялась принудительно, в конфигурационном файле /usr/share/pam-configs/krb5 в поле Auth-Initial следует дописать одну из опций. |
Более подробное описание см. в руководстве man.
Полезные ссылки
- Описание протокола Kerberos
- Официальная документация Kerberos
- Kerberos V5 System Administrator's Guide
- Kerberos: настройка pkinit





