Krb5KDC

Материал из Etersoft wiki
Перейти к: навигация, поиск
Wackowiki-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была автоматически перемещена с old.wiki.etersoft.ru.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.


Установка и предварительная настройка KDC в ALT Linux

В данном описании используется реализация MIT Kerberos, именуемая часто также Krb5, для отличия от альтернативных реализаций, основанных на протоколе Kerberos (Например, Heimdal).


Преамбула

KDC - это Центр Распределения Ключей (Key distribution center), часть криптосистемы на основе протокола Kerberos, реализующая безопасную аутентификацию по не шифрованным каналам.


Требования и ограничения

Для полноценной работы необходимо:

  • иметь DNS-сервер, с управляемым доменом, к которому привязывается пространство имён (REALM) принципалов (Principal);
  • синхронизация времени на всех узлах, участвующих в работе с ключами;
  • все узлы, которые участвуют в качестве сервисов, должны определятся в DNS;
  • ключи для сервисов (SPN - Service Principal Name) привязываются к именам хостов в DNS, что ограничивает возможности переименования.


В расчёте на смену имён используются CNAME-записи в DNS. Например, в минимальном виде, предполагается следующий набор записей в DNS:

# Default REALM TXT-record for dns_lookup_realm

_kerberos               TXT       "OFFICE.ETERSOFT.RU"



# Kerberos services SRV-records for dns_lookup_kdc

_kerberos._udp          SRV       0 0 88 server

                        SRV       0 0 88 backup-server1

                        SRV       0 0 88 backup-server2

_kerberos-master._udp   SRV       0 0 88 server

_kerberos-adm._tcp      SRV       0 0 749 server

_kpasswd._udp           SRV       0 0 464 server



# Kerberos servers CNAME-records

kerberos                CNAME     server

kerberos-1              CNAME     backup-server1

kerberos-2              CNAME     backup-server2

Все эти записи не обязательны, но слишком полезны, в плане масштабирования и настроек клиентов, чтобы ими пренебрегать.


Настройка сервера KDC

У сервера KDC есть два вида настроек: клиентские и серверные.


Клиентские настройки задаются в файле /etc/krb5.conf. Кроме клиентских, в этом файле, могут быть заданы и серверные настройки общего характера. Пример настроек /etc/krb5.conf выглядит следующим образом:

[libdefaults]

    default_realm = OFFICE.ETERSOFT.RU

    dns_lookup_kdc = true                                                                                                                

    dns_lookup_realm = false



    ticket_lifetime = 36000

    renew_lifetime = 36000

    forwardable = true



[realms]

    OFFICE.ETERSOFT.RU = {

        kdc = kerberos.office.etersoft.ru

        admin_server = kerberos.office.etersoft.ru

        master_kdc = kerberos.office.etersoft.ru

        default_domain = office.etersoft.ru

    }



[domain_realm]

    .office.etersoft.ru = OFFICE.ETERSOFT.RU

    office.etersoft.ru = OFFICE.ETERSOFT.RU



[logging]

    kdc = SYSLOG:INFO

В данном примере на сервере отключен поиск имени так называемого рилма (REALM - пространства имён в Kerberos) по умолчанию. С использованием этом опции на клиентах, поиски имени рилма по умолчанию, проводится в DNS (TXT-запись _kerberos для домена, к которому привязан рилм).


В секции [realms] указываются имена серверов, которые на клиентах, также могут быть получены через DNS (SRV-записи _kerberos._udp, _kerberos-master._udp, _kerberos-adm._tcp и _kpasswd._udp). Проверить наличие записей в DNS можно следующим образом:

$ dig _kerberos.office.etersoft.ru TXT | grep _kerberos

; <<>> DiG 9.3.6-P1 <<>> _kerberos.office.etersoft.ru TXT

;_kerberos.office.etersoft.ru.  IN      TXT

_kerberos.office.etersoft.ru. 3600 IN   TXT     "OFFICE.ETERSOFT.RU"



$ dig _kerberos._udp.office.etersoft.ru SRV|grep _kerberos 

; <<>> DiG 9.3.6-P1 <<>> _kerberos._udp.office.etersoft.ru SRV

;_kerberos._udp.office.etersoft.ru. IN  SRV

_kerberos._udp.office.etersoft.ru. 3600 IN SRV  0 0 88 server.office.etersoft.ru.



$ dig _kerberos-master._udp.office.etersoft.ru SRV|grep _kerberos-master

; <<>> DiG 9.3.6-P1 <<>> _kerberos-master._udp.office.etersoft.ru SRV

;_kerberos-master._udp.office.etersoft.ru. IN SRV

_kerberos-master._udp.office.etersoft.ru. 3600 IN SRV 0 0 88 server.office.etersoft.ru.



$ dig _kerberos-adm._tcp.office.etersoft.ru SRV|grep _kerberos-adm   

; <<>> DiG 9.3.6-P1 <<>> _kerberos-adm._tcp.office.etersoft.ru SRV

;_kerberos-adm._tcp.office.etersoft.ru. IN SRV

_kerberos-adm._tcp.office.etersoft.ru. 3600 IN SRV 0 0 749 server.office.etersoft.ru.



$ dig _kpasswd._udp.office.etersoft.ru SRV|grep _kpasswd     

; <<>> DiG 9.3.6-P1 <<>> _kpasswd._udp.office.etersoft.ru SRV

;_kpasswd._udp.office.etersoft.ru. IN   SRV

_kpasswd._udp.office.etersoft.ru. 3600 IN SRV   0 0 464 server.office.etersoft.ru.

В ALT Linux, утилита dig устанавливается с пакетом bind-utils.


Кроме клиентских настроек, для инициализации базы данных с ключами, необходимо задать серверные. Серверные настройки и база ключей в дистрибутивах ALT Linux располагаются в каталоге /var/lib/kerberos/krb5kdc. Исходно, в этом каталоге располагаются два файла: kdc.conf и kadm5.acl.


В файле kdc.conf задаются настройки используемых алгоритмов щифрования, переопределяется расположение системных файлов, а также задаются глобальные настройки рилма. В файле kadm5.acl задаются права доступа на создание, удаление и модифкацию принципалов, смену паролей, а также запросы к базе, просмотр списков принципалов и политик и установку параметров принципалов (шаблон настроек, время жизни и т.д.)


Минимально, по сравнению с настройками по умолчанию, в этих файлах нужно заменить имя рилма. Например, так:

# cat kdc.conf 

[kdcdefaults]

 acl_file = /var/lib/kerberos/krb5kdc/kadm5.acl

 dict_file = /usr/share/dict/words

 admin_keytab = /var/lib/kerberos/krb5kdc/kadm5.keytab



[realms]

 OFFICE.ETERSOFT.RU = {

  master_key_type = des-cbc-crc

  supported_enctypes = rc4-hmac:normal des-cbc-crc:normal des3-cbc-raw:normal des3-cbc-sha1:normal des-cbc-crc:afs3

 }



# cat kadm5.acl 

*/admin@OFFICE.ETERSOFT.RU      *


Можно заметить, что имена принципалов в Kerberos составные. По умолчанию, все административные привилегии предоставляются принципалам с вида */admin.


После задания всех необходимых настроек, инициализация базы KDC производится с помощью утилиты kdb5_util (или kdb5_ldap_util, если база располагается в LDAP, для чего в настройках клиента и сервера указывается использование соответствующего расширения). Пример, инициализации базы KDC следующим образом:

# kdb5_util create -s

Loading random data

Initializing database '/var/lib/kerberos/krb5kdc/principal' for realm 'OFFICE.ETERSOFT.RU',

master key name 'K/M@OFFICE.ETERSOFT.RU'

You will be prompted for the database Master Password.

It is important that you NOT FORGET this password.

Enter KDC database master key: 

Re-enter KDC database master key to verify: 



# pwd

/var/lib/kerberos/krb5kdc

# ls -l

total 24

-rw-r--r-- 1 root root   29 Mar 17 17:10 kadm5.acl

-rw-r--r-- 1 root root  337 Mar 17 17:06 kdc.conf

-rw------- 1 root root 8192 Mar 17 17:11 principal

-rw------- 1 root root 8192 Mar 17 17:11 principal.kadm5

-rw------- 1 root root    0 Mar 17 17:11 principal.kadm5.lock

-rw------- 1 root root    0 Mar 17  2011 principal.ok


Важным, при инициализации базы KDC, является параметр '-s', указывающий на необходимость создания stash-файла - файла с ключами (по сути паролем), на которых зашифрованы все ключи, хранящиеся в базе. Если этот параметр не указать, то master-пароль потребуется вводить вручную каждый раз, во время загрузки сервера KDC. Так безопаснее, но крайне неудобно.


Теперь можно запустить сервер KDC:

# service krb5kdc start

Starting krb5kdc service: [ DONE ]


Стоит отметить, что stash-файл, располагается в том же каталоге, но начинается с точки, то есть является скрытым. Если его случайно удалить, то сервер не загрузится. А если, при этом, не удастся вспомнить master-пароль, то все зашифрованные ключи в базе будут потеряны. Восстановление stash-файла, в случае потери, можно продемонстрировать следующим образом:

# ls -a .k5*

.k5.OFFICE.ETERSOFT.RU

# mv .k5.OFFICE.ETERSOFT.RU .k5.OFFICE.ETERSOFT.RU.x2

[root@winesrv krb5kdc]# service krb5kdc restart

Stopping krb5kdc service: [ DONE ]

Starting krb5kdc service: krb5kdc: cannot initialize realm OFFICE.ETERSOFT.RU - see log file for details

# tail /var/log/messages -n 5

Mar 17 18:08:03 winesrv krb5kdc: krb5kdc shutdown succeeded

Mar 17 18:08:03 winesrv krb5kdc[1204]: Cannot find/read stored master key - while fetching master key K/M for realm OFFICE.ETERSOFT.RU

Mar 17 18:08:03 winesrv krb5kdc[1204]: Cannot find/read stored master key - while fetching master key K/M for realm OFFICE.ETERSOFT.RU

Mar 17 18:08:03 winesrv krb5kdc: krb5kdc: cannot initialize realm OFFICE.ETERSOFT.RU - see log file for details

Mar 17 18:08:03 winesrv krb5kdc: krb5kdc startup failed

# kdb5_util stash

kdb5_util: Cannot find/read stored master key while reading master key

kdb5_util: Warning: proceeding without master key

Enter KDC database master key:

# ls -la .k5*

-rw------- 1 root root 14 Mar 17 18:09 .k5.OFFICE.ETERSOFT.RU

-rw------- 1 root root 14 Mar 17 18:06 .k5.OFFICE.ETERSOFT.RU.x2

# service krb5kdc start

Starting krb5kdc service: [ DONE ]


Для управления базой KDC используются две утилиты kadmin и kadmin.local. kadmin работает через специальный сервис kadmin, а kadmin.local локально на сервере KDC непосредственно с файлами базы KDC. Пока нет ни одного принципала с административными привилегиями, требуется использовать kadmin.local.


Пример создания принципалов, с помощью kadmin.local выглядит следующим образом:

# kadmin.local 

Authenticating as principal root/admin@OFFICE.ETERSOFT.RU with password.

kadmin.local:  ?

Available kadmin.local requests:



add_principal, addprinc, ank

                         Add principal

delete_principal, delprinc

                         Delete principal

modify_principal, modprinc

                         Modify principal

change_password, cpw     Change password

get_principal, getprinc  Get principal

list_principals, listprincs, get_principals, getprincs

                         List principals

add_policy, addpol       Add policy

modify_policy, modpol    Modify policy

delete_policy, delpol    Delete policy

get_policy, getpol       Get policy

list_policies, listpols, get_policies, getpols

                         List policies

get_privs, getprivs      Get privileges

ktadd, xst               Add entry(s) to a keytab

ktremove, ktrem          Remove entry(s) from a keytab

lock                     Lock database exclusively (use with extreme caution!)

unlock                   Release exclusive database lock

list_requests, lr, ?     List available requests.

quit, exit, q            Exit program.



kadmin.local:  ank root/admin

WARNING: no policy specified for root/admin@OFFICE.ETERSOFT.RU; defaulting to no policy

Enter password for principal "root/admin@OFFICE.ETERSOFT.RU": 

Re-enter password for principal "root/admin@OFFICE.ETERSOFT.RU": 

Principal "root/admin@OFFICE.ETERSOFT.RU" created.


Теперь можно запускать сервис kadmin и использовать его, причём уже с любого хоста, где заданы клиентские настройки Kerberos.

# service kadmin start

Extracting kadm5 Service Keys: [ DONE ]

Starting kadmind service: [ DONE ]



# kadmin

Authenticating as principal root/admin@OFFICE.ETERSOFT.RU with password.

Password for root/admin@OFFICE.ETERSOFT.RU: 

kadmin:  ank guest

WARNING: no policy specified for guest@OFFICE.ETERSOFT.RU; defaulting to no policy

Enter password for principal "guest@OFFICE.ETERSOFT.RU": 

Re-enter password for principal "guest@OFFICE.ETERSOFT.RU": 

Principal "guest@OFFICE.ETERSOFT.RU" created.


Проверить получение пользовательских ключей можно с помощью утилит kinit, klist и kdestroy. Любой пользователь может попытаться получить так называемые TGT-ключи (Ticket grant ticket). При этом, последующий доступ к сетевым ресурсам, которые поддерживают работу через Kerberos уже не потребует повторного ввода пароля - доступ к ресурсам будет осуществляться через TGT.

# kinit guest

Password for guest@OFFICE.ETERSOFT.RU: 

# klist 

Ticket cache: FILE:/tmp/krb5cc_0

Default principal: guest@OFFICE.ETERSOFT.RU



Valid starting     Expires            Service principal

03/17/11 18:42:42  03/18/11 18:42:42  krbtgt/OFFICE.ETERSOFT.RU@OFFICE.ETERSOFT.RU


Если не считать настройку политик использования ключей, а также предположить, что сервисы krb5kdc, kadmind настроены на автозагрузку, то на этом инициализация сервера KDC завершена.


Далее, необходимо настроить вход в систему через PAM.


Настройка PAM для Kerberos

Для настройки входа в систему необходим PAM-модуль. В ALT Linux этот модуль устанавливается с пакетом pam_krb5. Шаблон настройки PAM-аутентификации для Kerberos расположен в файле /etc/pam.d/system-auth-krb5. Системные службы используют для аутентификации файл /etc/pam.d/system-auth, который является символической ссылкой на нужный вариант файла настроек, по умолчанию /etc/pam.d/system-auth-local. Для управления вариантами настроек аутентификации в ALT Linux используется утилита control. Пример переключения режима аутентификации выглядит следующим образом:

# control system-auth

local

# control system-auth help

krb5: authentication via Kerberos 5

ldap: authentication via LDAP

local: local authentication

multi: use multi authentication method

pkcs11: use pkcs11 authentication method

# control system-auth krb5

# control system-auth

krb5