Введение
Related links
Основные понятия
- Key Distribution Center (KDC) - хранилище информации о паролях пользователей
- Admin server - основной сервер kerberos. У нас KDC и admin server находятся на одной машине
- Realm - "среда", в которой производится аутентификация
- Principal - пользователь или сервис, участвующий в механизме аутентификации. Мы пока рассматриваем только пользователей
Стенды
- две виртуальные машины с Ubuntu 12.10 x86
- две виртуальные машины с Astra Linux 1.3 x64
Note |
---|
Важно: время на клиенте и сервере должно быть синхронизировано. Невыполнение этого требования может привести к возникновению проблем. |
Ubuntu
...
<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)
Astra Linux 1.3 Смоленск
...
<username> = test1
<realm> = RUSBITECH.RU
<server> = server.rusbitech.ru
Клиент
Установлены стандартные пакеты для работы с токенами (openct, opensc
)
Сервер и клиент
- Kerberos realm: RUSBITECH.RU, доменное имя
server.rusbitech.ru
(прописано в /etc/hosts на клиенте) - Пользователи:
test1@RUSBITECH.RU
...
Code Block |
---|
|
$ dpkg -i --force-depends krb5-pkinit_1.10.1+dfsg-3_amd64.deb |
Общий порядок действий
1. /* только для Ubuntu */ Установить пакеты и создать новый realm
Для Astra Linux достаточно только установить krb5-pkinit
1.1 Сервер
Code Block |
---|
|
$ sudo apt-get install krb5-kdc krb5-admin-server krb5-pkinit
# В диалогах указать:
# realm = AKTIV-TEST
# домен = aktiv-test.ru
$ sudo krb5_newrealm
# ввести пароль |
1.2 Клиент
Code Block |
---|
|
$ 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
на клиенте и сервере
Code Block |
---|
|
[domain_realm]
.aktiv-test.ru = AKTIV-TEST
aktiv-test.ru = AKTIV-TEST |
2. /* Только для Ubuntu */ Завести на сервере нового пользователя с помощью kadmin.local
Code Block |
---|
|
$ sudo kadmin.local
# username = testuser
# password = test
kadmin.local:$ addprinc <username>
# ...
kadmin.local:$ quit |
3. На сервере проверить, что для этого пользователя можно получить тикет
Code Block |
---|
|
$ kinit <username>
...
$ klist
...
$ kdestroy |
4. Проверить, что с клиента можно получить тикет, используя аутентификацию по паролю
Code Block |
---|
|
$ kinit <username>@<realm>
...
$ klist
...
$ kdestroy |
5. Настроить работу с сертификатами и токеном
5.1 Сервер
5.1.1 Создать ключ и сертификат CA:
...
Code Block |
---|
|
$ kadmin.local
kadmin.local$: modprinc +requires_preauth <username> |
5.2 Клиент
5.2.1 Скопировать сертификат CA (cacert.pem) c сервера в /etc/krb5/ на клиенте
...
Code Block |
---|
|
# не забываем про 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:
...
Code Block |
---|
$ /etc/init.d/krb5-admin-server restart
$ /etc/init.d/krb5-kdc restart |
5.4 Обратно клиент
5.4.1 Вернуть сертификат клиента (client.pem) и положить его в /etc/krb5/
...