Статья применима для:
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7), РУСБ.10015-10
- Astra Linux Special Edition РУСБ.10015-17
- Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
- Astra Linux Special Edition РУСБ.10015-03 (очередное обновление 7.6)
- Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
- Astra Linux Special Edition РУСБ.10015-16 исп. 1
- Astra Linux Special Edition РУСБ.10015-16 исп. 2
- Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
- Astra Linux Common Edition 2.12
1. Описание стенда
Стенд состоит из сервера и клиента, входящих в домен домен 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).
2. Терминология Kerberos
- Билет (ticket) – временные данные, выдаваемые клиенту для аутентификации на сервере, на котором располагается необходимая служба.
- Клиент (client) – некая сущность в сети (пользователь, хост или сервис), которая может получить билет от Kerberos.
- Центр выдачи ключей (key distribution center, KDC) – служба, выдающая билеты Kerberos.
- Область (realm) – сеть, используемая Kerberos, состоящая из серверов KDC и множества клиентов. Имя realm регистрозависимо, обычно совпадает с именем домена, записанным заглавными буквами.
- Принципал (principal) – уникальное имя для клиента, для которого разрешается аутентификация в Kerberos. Записывается в виде root[/instance]@REALM.
3. Установка пакетов на сервер и клиент
На клиенте и сервере должны быть установлены следующие пакеты из репозитория Astra Linux:
- Для обеспечения работы со смарт-картой Рутокен ЭЦП:
- libccid;
- pcscd;
- libpcsclite1;
- opensc;
- Для обеспечения работы Kerberos со смарт-картой:
- krb5-pkinit;
- libpam-krb5.
На сервере для обеспечения возможности выпуска ключей и сертификатов на Рутокен ЭЦП должен быть установлен пакет libengine-pkcs11-openssl1.1.
Команда для установки всех вышеперечисленных пакетов:
sudo apt install libccid pcscd libpcsclite1 pcsc-tools opensc krb5-pkinit libpam-krb5 libengine-pkcs11-openssl1.1
Установка загруженного файла может быть выполнена командой:
При таком способе установки может выдаваться предупреждение "Download is performed unsandboxed"/"Загрузка без ограничения песочницы", которое влияет на ход установки и может быть проигнорировано.
Установка и настройка удостоверяющего центра на сервере
Для создания закрытых ключей (далее - ключи) и сертификатов закрытых ключей (далее - сертификаты) клиента и сервера в качестве удостоверяющего центра (УЦ) используется OpenSSL. OpenSSL — криптографический пакет с открытым исходным кодом для работы с SSL/TLS. Позволяет создавать ключи RSA, DH, DSA, ГОСТ и сертификаты X.509, подписывать их, формировать CSR и CRT.
Для создания ключей и сертификатов выполнить следующие действия:
Создать каталог УЦ (имя каталога - CA). В этом каталоге будут размещаться созданные ключи и сертификаты. Команда:
sudo mkdir /etc/ssl/CAПерейти в созданный каталог:
cd /etc/ssl/CAСоздать ключ и сертификат CA, заполнив в диалоге необходимую информацию. В поле Common Name при этом следует указать имя домена. В настоящем примере: SMARTCARD.ALD:
sudo openssl genrsa -out cakey.pem 2048опция -days задает срок действия сертификата в днях (в примере выше - 3650 дней). Пример диалога:
sudo openssl req -key cakey.pem -new -x509 -days 3650 -out cacert.pemYou 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. Команда:
sudo openssl genrsa -out kdckey.pem 2048
sudo openssl req -new -out kdc.req -key kdckey.pemУстановите переменные окружения. Переменные окружения применяются в рамках текущей сессии, не устанавливаются для других сессий и не сохраняются после закрытия текущей сессии:
export REALM=SMARTCARD.ALDДля того, чтобы убедиться что переменные указаны верно, можно использовать команду:
export CLIENT=kdcenv | grep -E "REALM|CLIENT"Загрузить файл pkinit_extensions и сохранить его в текущем каталоге: pkinit_extensions. Содержимое файла:
Выпустить сертификат KDC:
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/:
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
Первая запись задает ключи и сертификат сервера, а вторая указывает на корневой сертификат центра сертификации.
Для принятия изменений выполнить команду:
sudo systemctl restart krb5-admin-server krb5-kdc
4. Подготовка смарт-карты. Выпуск ключей и сертификата пользователя
Подключите устройство, которое следует подготовить.
4.1. Проверка работы Рутокен в системе
Для проверки работы Рутокен:
Определить расположение библиотеки librtpkcs11ecp.so:
find /usr/*(lib|lib64) -name librtpkcs11ecp.soДалее используется путь /usr/lib/librtpkcs11ecp.so.Выполнить команду, указав актуальное расположение библиотеки:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
4.2. Инициализация устройства
Для инициализации используется инструмент pkcs11-tool:
--slot 0 — указывает, в какой виртуальный слот подключено устройство. Как правило, это слот 0, но могут быть и другие значения - 1,2 и т.д.;
--init-token - команда инициализации токена;
--so-pin 87654321 - PIN-код администратора Рутокен ЭЦП. По умолчанию имеет значение 87654321;
--label 'AstraLinux' - название устройства;
--module /usr/lib/librtpkcs11ecp.so — указывает путь до библиотеки librtpkcs11ecp.so.
4.3. Задание PIN-кода пользователя
Для задания PIN-кода пользователя использовать команду:
--init-pin - команда установки PIN-кода пользователя;
--login - команда входа в токен;
--pin 12345678 - задаваемый PIN-код пользователя;
4.4. Генерация пары ключей на Рутокен ЭЦП
Для генерации ключей на устройстве использовать команду:
-keypairgen --key-type rsa:2048 — указывает, что должны быть созданы RSA ключи длиной 2048 бит;
--id 33 — устанавливает атрибут CKA_ID ключа. CKA_ID может быть любым;
--label “test1 key” — устанавливает атрибут CKA_LABEL(имя) ключа. Атрибут может быть любым;
4.5. Генерация запроса на сертификат
Для генерации запроса на сертификат использовать команду:
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 следует указать имя пользователя.
4.6. Выпуск сертификата для пользователя
Далее предполагается, что действия выполняются в ранее созданном каталоге удостоверяющего центра (каталог /etc/ssl/CA).
Установить переменные окружения:
export CLIENT=test1
SMARTCARD.ALD - имя домена
test1 - имя доменного пользователя
Для того, чтобы убедиться что переменные указаны верно, использовать команду:
Выпустить сертификат пользователя:
--write-object ./client.cer— указывает, что необходимо записать объект и путь до него;
--type 'cert'— указывает, что тип записываемого объекта - сертификат;
'cert' --label 'test1'— устанавливает атрибут CKA_LABEL(имя) сертификата. Атрибут может быть любым;
5. Настройка клиента. Проверка работоспособности
- Создать на клиенте каталог /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
Выполнить проверку:
$ kinitКогда появится строка запроса PIN-кода к карте, ввести его. Для проверки того, что билет kerberos был успешно получен для пользователя, выполнить команду:klistДля удаления билета:kdestroyДля включения отладки команду kinit использовать в форме:
env KRB5_TRACE=/dev/stdout kinit <имя_пользователя>
Вход выполняется с подключенным токеном к компьютеру. При графическом входе в поле Login вводится имя пользователя, в поле Password вводится <PIN пользователя>. При консольном входе все аналогично, только в момент ввода пароля будет сообщено, что требуется <PIN пользователя>:
5.1. Настройка политики аутентификации
Существует возможность указания дополнительных параметров модуля аутентификации 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.
6. Полезные ссылки
- Описание протокола Kerberos
- Официальная документация Kerberos
- Kerberos V5 System Administrator's Guide
- Kerberos: настройка pkinit