Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

...

  • Key Distribution Center (KDC) - хранилище информации о паролях пользователей.
  • Admin server - основной сервер kerberos. У нас KDC и admin server находятся на одной машине.
  • Realm - "среда", в которой производится аутентификация.
  • Principal - пользователь или сервис, участвующий в механизме аутентификации. Мы пока рассматриваем только пользователей.

Перед настройкой

Центральной частью схемы аутентификации Kerberos является третья доверенная сторона - Key Distribution Center (KDC), которая является централизованным хранилище хранилищем информации о пользователях. Перед разворачиванием Kerberos, должен быть выбран сервер, который будет выполнять роль KDC. Физическая и сетевая безопасность критичны для этого сервера, так как его компрометация ведет к компрометации всего realm.   

...

Kerberos так же ожидает, что FQDN сервера является reverse-resolvable. Если выяснение доменного имени по IP недоступно, то установите значение переменной rdns в значение false на клиентах в файле krb5.conf.

Note

Active Directory сильно зависит от DNS, поэтому весьма вероятно что ваш Active Directory Domain Controller уже имеет роль DNS. В этом случае убедитесь в том, что каждый сервер имеет свое FQDN перед выполнением тестов, описанных ниже в этом разделе.

...

Для проверки соединения между хостами и , выполните ping для каждого хоста по его FQDN: 

Code Block
languagebash
$ ping server.aktiv-test.ru
PING server.aktiv-test.ru (10.0.0.1) 56(84) bytes of data.
64 bytes from server.aktiv-test.ru (10.0.0.1): icmp_seq=1 ttl=128 time=0.176ms 

Вывод комнады команды ping показывает успешное определение IP адреса по FQDN, и простой ответ от сервера. Ответ от сервера является подтверждением того, что между хостом и сервером есть соединение.   

...

Протокол Kerberos требует синхронизации времени сервера и клиента: если системные часы клиентов и сревера сервера расходятся, то аутентификация не будет выполнена. Простейший способ синхронизировать системные часы - использование Network Time Protocol (NTP) сервера. Некоторый линуксы, например, Astra Linux по-умолчанию синхронизирует время с российскими NTP-серверами. Для настройки собственного NTP-сервера смотрите документацию на ваш дистрибутив (например, UbuntuTime для Ubuntu).   

...

  • Установлены krb5-user, libpam-krb5, libpam-ccreds, auth-client-config, krb5-pkinit, opensc, libengine-pkcs11-openssl
  • default realm: AKTIV-TEST
  • сервера серверы (kdc, admin) указаны по IP-адресу (лучше указать их в /etc/hosts)

...

Code Block
languagebash
title/etc/krb5.conf
[domain_realm]
	.aktiv-test.ru = AKTIV-TEST
	aktiv-test.ru = AKTIV-TEST

...

Создать на сервере нового пользователя

Code Block
languagebash
$ sudo kadmin.local
# username = testuser
# password = test
kadmin.local:$ addprinc <username>
# ...
kadmin.local:$ quit

...

Code Block
languagebash
$ kinit <username>
...
$ klist
...
$ kdestroy

Клиент

...

Установим pkcs11 модуль rtpkcs11ecp.so

Установим необходимые пакеты и сконфигурируем kerberos

Code Block
languagebash
$ wget https://download.rutoken.ru/Rutoken/SDK/sdk-180919-80c054.zip
$ unzip -q sdk-180919-80c054.zip
$ sudo cp -P sdk/openssl/rtengine/bin/linux_glibc-x86_64/lib/librtengine.so* /usr/lib/x86_64-linux-gnu/engines-1.1/

...

Установим необходимые пакеты и сконфигурируем kerberos

Code Block
languagebash
$ sudo apt-get install krb5-sudo apt-get install krb5-user libpam-krb5 libpam-ccreds auth-client-config krb5-pkinit opensc libengine-pkcs11-openssl
# В диалогах указать:
# realm = AKTIV-TEST
# домен = aktiv-test.ru
$ sudo dpkg-reconfigure krb5-config

...

Code Block
languagebash
title/etc/krb5kdc/kdc.conf
[realms]
    AKTIV-TEST = {
        database_name = /var/lib/krb5kdc/principal
        admin_keytab = FILE:/etc/krb5kdc/kadm5.keytab
        acl_file = /etc/krb5kdc/kadm5.acl
        key_stash_file = /etc/krb5kdc/stash
        max_life = 10h 0m 0s
        max_renewable_life = 7d 0h 0m 0s
        master_key_type = des3-hmac-sha1
        supported_enctypes = aes256-cts:normal arcfour-hmac:normal des3-hmac-sha1:normal des-cbc-crc:normal des:normal des:v4 des:norealm des:onlyrealm des:afs3
        default_principal_flags = +preauth
        pkinit_anchors = FILE:/etc/krb5/cacert.pem
        pkinit_identity = FILE:/etc/krb5/kdc.pem,/etc/krb5/kdckey.pem
    } 

...

Включим preauth для пользователя

Code Block
languagebash
$ sudo kadmin.local
$ kadmin.local$: modprinc +requires_preauth <username>

...

Сгенерируем ключевую пару клиента. Создаем заявку на сертификат.сертификат.

Tip
titleПримечание

Если вы используете OpenSSL 3.0, то необходимо выполнить следующую инструкцию

Code Block
languagebash
# не забываем про ID!
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 -l --id 45
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:librtpkcs11ecp.so
...
OpenSSL> req -engine pkcs11 -new -key 45 -keyform engine -out client.req -subj "/C=RU/ST=Moscow/L=Moscow/O=Aktiv/OU=dev/CN=testuser/emailAddress=testuser@mail.com"

...

Code Block
languagebash
$ 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

...

Перезапустим сервер и KDC

Code Block
 $ /etc/init.d/krb5-admin-server restart
 $ /etc/init.d/krb5-kdc restart

...

Code Block
languagebash
$ kinit <username>

Примечание

Если по каким-то причинам не удалось аутентифицироваться, то можно узнать об причине неисправности с помощью

...

логирования. Для этого в файле

...

настройки /etc/krb5.conf и /etc/krb5kdc/kdc.conf.

Code Block
languagebash
[logging]
	default = FILE:/var/log/krb5.log
	kdc = FILE:/var/log/krb5kdc.log
	admin_server = FILE:/var/log/kadmin.log

При этом после этого нужно перезагрузить KDC с

...

помощью команд:

Code Block
 $ /etc/init.d/krb5-admin-server restart
 $ /etc/init.d/krb5-kdc restart