Настройка Kerberos-аутентификации
Введение
Дополнительные материалы
Основные понятия
Key Distribution Center (KDC) - хранилище информации о паролях пользователейAdmin server - основной сервер kerberos. У нас KDC и admin server находятся на одной машинеRealm - "среда", в которой производится аутентификацияPrincipal - пользователь или сервис, участвующий в механизме аутентификации. Мы пока рассматриваем только пользователей
Стенд
две машины с Astra Linux 1.3 x64 и настроенной ALD
Важно: время на клиенте и сервере должно быть синхронизировано. Невыполнение этого требования может привести к возникновению проблем.
<username> = test1 <realm> = RUSBITECH.RU <server> = server.rusbitech.ru
Клиент
Установлены стандартные пакеты для работы с токенами:
libopenct1_0.6.20-1.2_amd64.deb openct_0.6.20-1.2_amd64.deb opensc_0.12.2-2_amd64.deb libp11-2_0.2.8-2_amd64.deb libengine-pkcs11-openssl_0.1.8-2_amd64.deb
Сервер и клиент
Kerberos realm: RUSBITECH.RU, доменное имя server.rusbitech.ru (прописано в /etc/hosts на клиенте)
Пользователи: test1@RUSBITECH.RU
Добавочно к предустановленным пакетам ald/kerberos установлен krb5-pkinit(krb5-pkinit_1.10.1+dfsg-3_amd64.deb, Debian Wheezy):
Общий порядок действий
Проверка получения тикета пользователем на сервере
$ kinit <username>...$ klist...$ kdestroyПроверка получения билета пользователем на клиенте, используя идентификацию по паролю
$ kinit <username>@<realm>...$ klist...$ kdestroyНастройка работы с сертификатами и токеном
Сервер
Создать ключ и сертификат CA:
openssl genrsa -out cakey.pem 2048openssl req -key cakey.pem -new -x509 -out cacert.pemCommon name указать test1 (ваш пользователь).Создать ключ и сертификат KDC:
openssl genrsa -out kdckey.pem 2048Создание запроса
Common name указать RUSBITECH.RUПодпись запроса
export CLIENT=server #Имя Вашего сервера
kdc.pem kdckey.pem cacert.pem
Включить preauth на сервере.
Необходимо дополнить секцию kdcdefaults новыми параметрами из примера ниже:
[kdcdefaults]
kdc_tcp_ports = 88
pkinit_identity = FILE:/var/lib/krb5kdc/kdc.pem,/var/lib/krb5kdc/kdckey.pem
pkinit_anchors = FILE:/var/lib/krb5kdc/cacert.pem
[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
}
Включить preauth для пользователя
kadmin.local$: modprinc +requires_preauth <username>Клиент
Создать каталог /etc/krb5/
Скопировать сертификатCA (cacert.pem) c сервера в /etc/krb5/ на клиентеОтформатировать токен
pkcs15-init --erase-card -p rutoken_ecppkcs15-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Сгенерировать ключевую пару и заявку на сертификат на токене
# не забываем про ID!
opensslOpenSSL> engine dynamic -pre SO_PATH:/usr/lib/ssl/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:
Сервер
Скопировать с клиента заявку (client.req) и подписать ее ключом CA:
export REALM=RUSBITECH.RU #Ваш доменexport CLIENT=testuser #Ваш пользовательopenssl x509 -CAkey cakey.pem -CA cacert.pem -req -in client.req -extensions client_cert -extfile pkinit_extensions -out client.pem/etc/init.d/krb5-admin-server restart/etc/init.d/krb5-kdc restartКлиент
Вернуть сертификат клиента (client.pem) и положить его в /etc/krb5/ <
Также записать его на токен
client.pem должен быть подписан на сервере!Настроить kerberos
[libdefaults] default_realm = RUSBITECH.RU pkinit_anchors = FILE:/etc/krb5/cacert.pem # для аутентификации по локальному ключу # pkinit_identities = FILE:/etc/krb5/client.pem,/etc/krb5/clientkey.pem # для аутентификации по токену pkinit_identities = PKCS11:/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so
Проверить как оно все работает
$ kinit <username>