Пользователям Astra Linux
Настройка двухфакторной аутентификации в домене Astra Linux Directory
Введение
Related links
- https://help.ubuntu.com/community/Kerberos
- По аутентификации с использованием сертификатов здесь: http://k5wiki.kerberos.org/wiki/Pkinit_configuration
Основные понятия
- Key Distribution Center (KDC) - хранилище информации о паролях пользователей
- Admin server - основной сервер kerberos. У нас KDC и admin server находятся на одной машине
- Realm - "среда", в которой производится аутентификация
- Principal - пользователь или сервис, участвующий в механизме аутентификации. Мы пока рассматриваем только пользователей
Проверка модели устройства
- Подключите USB-токен к компьютеру.
- Для определения названия модели USB-токена откройте Терминал и введите команду:
$ lsusb
В результате в окне Терминала отобразится название модели USB-токена:
Убедитесь, что используете: Aktiv Rutoken ECP
Стенд
- две виртуальные машины с Ubuntu x86
Важно: время на клиенте и сервере должно быть синхронизировано. Невыполнение этого требования может привести к возникновению проблем.
<username> = testuser
<realm> = AKTIV-TEST
<server> = aktiv-test.ru
Сервер
- Установлены
krb5-kdc, krb5-admin-server, krb5-pkinit
- Kerberos realm:
AKTIV-TEST
, доменное имяaktiv-test.ru
(прописано в /etc/hosts на клиенте)
Примечание: доменное имя стоит делать минимум второго уровня для избежания ошибок - Пользователи:
testuser@AKTIV-TEST
Клиент
- Установлены
krb5-user, krb5-config, krb5-pkinit
- default realm:
AKTIV-TEST
- сервера (kdc, admin) указаны по IP-адресу (лучше указать их в /etc/hosts)
Общий порядок действий
1. Установить пакеты и создать новый realm
1.1 Сервер
$ sudo apt-get install krb5-kdc krb5-admin-server krb5-pkinit # В диалогах указать: # realm = AKTIV-TEST # домен = aktiv-test.ru $ sudo krb5_newrealm # ввести пароль
1.2 Клиент
$ sudo apt-get install krb5-user libpam-krb5 libpam-ccreds auth-client-config krb5-pkinit # В диалогах указать: # realm = AKTIV-TEST # домен = aktiv-test.ru $ sudo dpkg-reconfigure krb5-config
1.3 Добавить секцию[domain_realm]
в /etc/krb5.conf
на клиенте и сервере
[domain_realm] .aktiv-test.ru = AKTIV-TEST aktiv-test.ru = AKTIV-TEST
2. Завести на сервере нового пользователя с помощью kadmin.local
$ sudo kadmin.local # username = testuser # password = test kadmin.local:$ addprinc <username> # ... kadmin.local:$ quit
3. На сервере проверить, что для этого пользователя можно получить тикет
$ kinit <username> ... $ klist ... $ kdestroy
4. Проверить, что с клиента можно получить тикет, используя аутентификацию по паролю
$ kinit <username>@<realm> ... $ klist ... $ kdestroy
5. Настроить работу с сертификатами и токеном
5.1 Сервер
5.1.1 Создать ключ и сертификат CA:
$ openssl genrsa -out cakey.pem 2048 $ openssl req -key cakey.pem -new -x509 -out cacert.pem
5.1.2 Создать ключ и сертификат KDC:
$ openssl genrsa -out kdckey.pem 2048 # создание запроса $ openssl req -new -out kdc.req -key kdckey.pem # подпись запроса $ REALM=<realm>; export REALM $ CLIENT=<server>; export CLIENT # содержимое файла pkinit_extensions см ниже $ openssl x509 -req -in kdc.req -CAkey cakey.pem -CA cacert.pem -out kdc.pem -extfile pkinit_extensions -extensions kdc_cert -CAcreateserial
5.1.3 Перенести следующие файлы в /var/lib/krb5kdc/:
kdc.pem
kdckey.pem
cacert.pem
5.1.4 Включить preauth на сервере.
5.1.5 Включить preauth для пользователя
$ kadmin.local kadmin.local$: modprinc +requires_preauth <username>
5.2 Клиент
5.2.1 Скопировать сертификат CA (cacert.pem) c сервера в /etc/krb5/ на клиенте
5.2.2 Отформатировать токен
$ pkcs15-init --erase-card -p rutoken_ecp $ pkcs15-init --create-pkcs15 --so-pin "87654321" --so-puk "" $ pkcs15-init --store-pin --label "User PIN" --auth-id 02 --pin "12345678" --puk "" --so-pin "87654321" --finalize
5.2.3 Сгенерировать ключевую пару и заявку на сертификат на токене
# не забываем про ID! $ pkcs15-init -G rsa/2048 --auth-id 02 --id 42 --label "testuser's key" --public-key-label "testuser's public key" # ... $ openssl # NB: пути! на multiarch-системах opensc-pkcs11.so и engine_pkcs11.so могут лежать в других местах OpenSSL> engine dynamic -pre SO_PATH:/usr/lib/openssl/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:opensc-pkcs11.so (dynamic) Dynamic engine loading support [Success]: SO_PATH:/usr/lib/openssl/engines/engine_pkcs11.so [Success]: ID:pkcs11 [Success]: LIST_ADD:1 [Success]: LOAD [Success]: MODULE_PATH:opensc-pkcs11.so Loaded: (pkcs11) pkcs11 engine OpenSSL> req -engine pkcs11 -new -key 1:42 -keyform engine -out client.req -subj "/C=RU/ST=Moscow/L=Moscow/O=Aktiv/OU=dev/CN=testuser/emailAddress=testuser@mail.com" engine "pkcs11" set. PKCS#11 token PIN: OpenSSL> quit
5.3 Снова сервер
5.3.1 Скопировать с клиента заявку (client.req) и подписать ее ключом CA:
$ REALM=<realm>; export REALM $ CLIENT=<username>; export CLIENT $ openssl x509 -CAkey cakey.pem -CA cacert.pem -req -in client.req -extensions client_cert -extfile pkinit_extensions -out client.pem
5.3.2 Перезапустить сервер и kdc:
$ /etc/init.d/krb5-admin-server restart $ /etc/init.d/krb5-kdc restart
5.4 Обратно клиент
5.4.1 Вернуть сертификат клиента (client.pem) и положить его в /etc/krb5/
5.4.2 Также записать его на токен
$ pkcs15-init --store-certificate client.pem --auth-id 02 --id 42 --format pem
5.4.3 Настроить kerberos
[libdefaults] default_realm = <realm> pkinit_anchors = FILE:/etc/krb5/cacert.pem # для аутентификации по локальному ключу # pkinit_identities = FILE:/etc/krb5/client.pem,/etc/krb5/clientkey.pem # для аутентификации по токену pkinit_identities = PKCS11:/usr/lib/opensc-pkcs11.so
5.4.4 Проверить как оно все работает
$ kinit <username>