Домен/Kerberos: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
(не показано 18 промежуточных версий 6 участников)
Строка 1: Строка 1:
Страница посвящена проверки функционирования и нюансам использования [http://ru.wikipedia.org/wiki/Kerberos Kerberos] в [[Домен|домене ALT Linux]]
{{review
|Title          = Работа с Kerberos в ALT-домене
|Annotation    = Работа с Kerberos в ALT-домене
|Author        = AндрейЧерепанов
|Tag            = kerberos,домен
|Section        = практика
|Issue          =01
}}
{{review-nav
|link=
|link2=
|page=FAQ
}}


== Сервер ==
Kerberos — сетевой протокол аутентификации, позволяющий передавать данные через незащищённые сети для безопасной идентификации. Более подробно узнать об этом протоколе можете в [[ruwp:Kerberos|статье про Kerberos на Wikipedia]]. В [[Домен|домене ALT Linux]] этот протокол занимает важное место, так как обеспечивает инфраструктуру для аутентификации пользователей (для входа в систему, для использования сетевых ресурсов по протоколу SMB и доступа в Интернет через прокси-сервер).


Служба Kerberos на сервере называется {{prg|krb5kdc}}. Основной её чертой является крайняя немногословность, что затрудняет отладку.
Сервер аутентификации выполняет одну функцию: получает запрос, содержащий имя клиента, запрашивающего аутентификацию, и возвращает ему зашифрованный TGT (Ticket Granting Ticket, билет для получения билета). Затем пользователь может использовать этот TGT для запроса дальнейших билетов на другие службы. Часто специалисты билет называют «тикетом».
 
С практической точки зрения нас интересуют нюансы использования и отладки Kerberos.
 
== Проверка работы сервера ==
 
Итак, при создании ALT-домена настраивается также и служба Kerberos на сервере {{prg|krb5kdc}}. Основной её чертой является крайняя немногословность (по соображениям безопасности), что затрудняет отладку.  
 
В модуле «Домен» веб-интерфейса показывается текущее состояние в том числе и службы Kerberos. Если всё в порядке, то показывается
KDC: OK
 
Альтернативный способ получить статус домена:
<pre># alterator-cmdline /net-domain action read
domain:test.altlinux
resolver:OK
access:OK
ldap:OK
kdc:OK
smb:OK (TEST.ALTLINUX)
dhcpd:OK
master:#t</pre>
 
В ALT Linux Kerberos хранит все свои данные в LDAP. Поэтому для успешной работы Kerberos требуется как запуск сервера LDAP {{prg|slapd}}, так и заполнение структуры базы для Kerberos (при проверке в LDAP ищутся записи класса {{pkg|krbRealmContainer}}).
 
Если служба krb5kdc не запущена, то попробуйте запустить её вручную:
# service krb5kdc start
 
Настройка сервера Kerberos (KDC) осуществляется в файле {{path|/var/lib/kerberos/krb5kdc/kdc.conf}}
 
Там же видно, что журналы kdc и admin_server прописываются в секции {{path|[logging]}} и через {{prg|syslogd}} попадают в файл {{path|/var/log/messages}}.
 
{{attention|Если служба {{prg|krb5kdc}} не может быть запущена из-за того, что записи в LDAP не созданы (такое случалось на [[Branches/p6|Шестой платформе]], когда домен создавался '''до''' того, как настраивался сервер DHCP; в Седьмой платформе это исправлено), то нужно настроить DHCP и попробовать создать домен с другим именем.}}
 
== Принципалы (пользователи) ==
 
В Kerberos билеты (тикеты) выдаются <s>только членам профсоюза</s> зарегистрированным принципалам. Это могут быть как пользователи, так и службы. При создании домена создаются и принципалы поддерживаемых служб. В базу Kerberos пользователи добавляются через веб-интерфейс (раздел «Пользователи») или из командной строки в программе [[Домен/Скрипты#ldap-useradd|ldap-useradd]].
 
Для заведения пользователей и в базе Kerberos в файле {{path|/etc/sysconfig/system}} должна быть указана роль сервера '''master''':
SERVER_ROLE=master
 
Проверить, заведён ли пользователь можно программой {{prg|kadmin.local}}.
 
=== kadmin.local ===
 
Проверка заведённых принципалов:
 
<pre># kadmin.local -q 'listprincs *'
Authenticating as principal root/admin@TEST.ALTLINUX with password.
K/M@TEST.ALTLINUX
krbtgt/TEST.ALTLINUX@TEST.ALTLINUX
kadmin/admin@TEST.ALTLINUX
kadmin/changepw@TEST.ALTLINUX
kadmin/history@TEST.ALTLINUX
kadmin/main.test.altlinux@TEST.ALTLINUX
nfs/main.test.altlinux@TEST.ALTLINUX
cifs/main.test.altlinux@TEST.ALTLINUX
host/main.test.altlinux@TEST.ALTLINUX
pop3/main.test.altlinux@TEST.ALTLINUX
http/main.test.altlinux@TEST.ALTLINUX
HTTP/main.test.altlinux@TEST.ALTLINUX
pop/main.test.altlinux@TEST.ALTLINUX
imap/main.test.altlinux@TEST.ALTLINUX
smtp/main.test.altlinux@TEST.ALTLINUX
cas@TEST.ALTLINUX
l1@TEST.ALTLINUX
admin@TEST.ALTLINUX
tt@TEST.ALTLINUX
karpov_d@TEST.ALTLINUX
ldap/main.test.altlinux@TEST.ALTLINUX</pre>
 
Обратите внимание, выводятся как обычные пользователи, так и службы. Последние идут с [[ruwp:FQDN|FQDN]] (полным доменным именем) сервера, указанным через / от названия службы.
 
''Примечания:''
* {{prg|kadmin.local}} работает и при выключенной службе {{prg|krb5kdc}}.
* вы можете запустить {{prg|kadmin.local}} без параметров и указывать команды прямо в появившейся командной строке
* перечень команд можно посмотреть в {{cmd|man kadmin.local}}
* команда {{cmd|listprinc}} может указываться с шаблоном. Например <pre># kadmin.local -q 'listprincs cas*'
Authenticating as principal root/admin@TEST.ALTLINUX with password.
cas@TEST.ALTLINUX</pre>
* завести принципала в Kerberos можно командой
# . alterator-kdc-princ-functions
# addprinc princ
Authenticating as principal root/admin@TEST.ALTLINUX with password.
WARNING: no policy specified for princ@TEST.ALTLINUX; defaulting to no policy
Principal "princ@TEST.ALTLINUX" created.
 
Вообще рекомендуется использовать функции alterator-kdc-princ-functions.
 
Далее проверяем заведённого пользователя (пусть у нас есть принципал cas):
<pre># getprinc cas
Authenticating as principal root/admin@TEST.ALTLINUX with password.
Principal: cas@TEST.ALTLINUX
Expiration date: [never]
Last password change: Thu Nov 08 11:52:45 MSK 2012
Password expiration date: [none]
Maximum ticket life: 12 days 12:00:00
Maximum renewable life: 0 days 00:00:00
Last modified: Thu Nov 08 11:52:45 MSK 2012 (root/admin@TEST.ALTLINUX)
Last successful authentication: [never]
Last failed authentication: [never]
Failed password attempts: 0
Number of keys: 4
Key: vno 3, ArcFour with HMAC/md5, no salt
Key: vno 3, DES cbc mode with CRC-32, no salt
Key: vno 3, Triple DES cbc mode raw, no salt
Key: vno 3, DES cbc mode with CRC-32, AFS version 3
Attributes:
Policy: [none]</pre>
 
И смена пароля у принципала Kerberos:
<pre># changepw cas 1234
Authenticating as principal root/admin@TEST.ALTLINUX with password.
Enter password for principal "cas":
Re-enter password for principal "cas":
Password for "cas@TEST.ALTLINUX" changed.</pre>
 
== Проверка получения билета ==
 
Для использования утилит работы с билетами Kerberos на стороне клиента необходимо установить пакет {{pkg|krb5-kinit}}.
 
=== Запросить билет у Kerberos ===
$ kinit cas
Password for cas@TEST.ALTLINUX:
 
Укажите пароль и нажмите Enter.
 
=== Показ полученных билетов ===
<pre>$ klist
Ticket cache: FILE:/tmp/krb5cc_500
Default principal: cas@TEST.ALTLINUX
 
Valid starting    Expires            Service principal
02/28/13 08:31:26  03/01/13 08:31:25  krbtgt/TEST.ALTLINUX@TEST.ALTLINUX</pre>
 
Обратите внимание, что билет для службы krbtgt выдан на сутки. Как управлять сроком выдаваемого билета и его обновлением, будет рассказано ниже.
 
=== Очистить локальный кэш билетов ===
 
$ kdestroy
 
== Синхронизация времени ==
 
Одним из основных требований успешного использования Kerberos является обеспечение одинакового времени на сервере и клиенте. В рамках ALT-домена эта задача решена использованием синхронизации по [https://tools.ietf.org/html/rfc867 RFC 867]. Для этого на сервере включается через xinetd daytime-tcp:
 
# chkconfig --list | grep daytime-tcp
        daytime-tcp:    вкл
 
А на клиенте — служба {{cmd|settime-rfc867}}:
 
chkconfig settime-rfc867 on
service settime-rfc867 start


== Нюансы работы ==
== Нюансы работы ==
* Тикет Kerberos по умолчанию выдаётся не более чем на 1 сутки. Если хотите выдавать тикет больше, чем на сутки, пропишите
*# <source lang="Ini">max_life = 30d</source> в файле {{path|/var/lib/kerberos/krb5kdc/kdc.conf}} (максимальный срок выдаваемого тикета — 30 дней)
*# на LDAP-сервере '''dn: krbPrincipalName=krbtgt/<ваш_домен>''' <source lang="Ini">krbMaxTicketLife: 2592000</source> (срок выдаваемого тикета с сервера — 30 дней, указывается в количестве секунд)
*# Для указания периода возобновления тикета (хотя странно, имея такой «длинный» тикет, указывать период его обновления) параметры <source lang="Ini">max_renewable_life = 30d</source> и {{term|krbMaxRenewableAge: 2592000}} соответственно.
* При использовании сервера или клиента домена на Седьмой платформе с клиентами или сервером ранних версий '''на новой системе''' пропишите в раздел {{term|[libdefaults]}} файла {{path|/etc/krb5.conf}} строку <source lang="Ini">allow_weak_crypto = true</source>Без этого с тикетами Kerberos будут проблемы.


== TODO ==
=== Увеличиваем срок выдаваемого билета ===
{{todo|* Отладка получения тикета: kinit, klist, kdestroy
Тикет Kerberos по умолчанию выдаётся не более чем на 1 сутки. Если хотите выдавать тикет больше, чем на сутки, пропишите:
* Troubleshooting
# <source lang="Ini">max_life = 30d</source> в файле {{path|/var/lib/kerberos/krb5kdc/kdc.conf}} (максимальный срок выдаваемого тикета — 30 дней)
* kadmin.local
# на LDAP-сервере '''dn: krbPrincipalName=krbtgt/<ваш_домен>''' <source lang="Ini">krbMaxTicketLife: 2592000</source> (срок выдаваемого тикета с сервера — 30 дней, указывается в количестве секунд)
* срок тикета в /etc/krb5.conf
# Для указания периода возобновления тикета (хотя странно, имея такой «длинный» тикет, указывать период его обновления) параметры <source lang="Ini">max_renewable_life = 30d</source> и {{term|krbMaxRenewableAge: 2592000}} соответственно.
* синхронизация времени с помощью settime-rfc867}}
 
=== Использование старых версий Kerberos с новыми ===
 
В новых версиях Kerberos слабые алгоритмы (например, {{term|des-cbc-crc:afs3}}) по умолчанию запрещены к использованию. А на старых системах (клиентах или серверах на Пятой или Шестой платформе) они используются. Чтобы включить их поддержку, '''на новой системе''' пропишите в раздел {{term|[libdefaults]}} файла {{path|/etc/krb5.conf}} строку <source lang="Ini">allow_weak_crypto = true</source>Без этого с билетами Kerberos (и, как следствие с монтированием каталогов и доступом к прокси-серверу) будут проблемы.
 
=== Ошибка запуска службы krb5kdc ===
 
Если в журнале при запуске службы {{cmd|krb5kdc}} появляется ошибка:
preauth pkinit failed to initialize: No realms configured correctly for pkinit support
то это означает, что сервер LDAP ({{prg|slapd}}) ещё не успел проинициализироваться для доступа krb5kdc. Увеличьте уровень загрузки службы krb5kdc с 40 до 41 (между запуском этих служб появится служба {{prg|anacron}}):
# subst 's/chkconfig:  345 40 /chkconfig:  345 41 /' /etc/init.d/krb5kdc
# chkconfig krb5kdc on
 
Исправлено в krb5-kdc {{Since|1.11.2-alt3}}
 
== Вход по билету ==
* https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Deployment_Guide/sso-config-firefox.html


[[Категория:Домен]]
{{Category navigation|title=Домен|category=Домен|sortkey={{SUBPAGENAME}}}}

Версия от 07:27, 19 апреля 2016

ALT-review logo.png
Alt Club.png
Alt linux team.png

Навигация

Главная: ALT-review

Все статьи

Предложения и пожелания

Ресурсы

FAQ


Kerberos — сетевой протокол аутентификации, позволяющий передавать данные через незащищённые сети для безопасной идентификации. Более подробно узнать об этом протоколе можете в статье про Kerberos на Wikipedia. В домене ALT Linux этот протокол занимает важное место, так как обеспечивает инфраструктуру для аутентификации пользователей (для входа в систему, для использования сетевых ресурсов по протоколу SMB и доступа в Интернет через прокси-сервер).

Сервер аутентификации выполняет одну функцию: получает запрос, содержащий имя клиента, запрашивающего аутентификацию, и возвращает ему зашифрованный TGT (Ticket Granting Ticket, билет для получения билета). Затем пользователь может использовать этот TGT для запроса дальнейших билетов на другие службы. Часто специалисты билет называют «тикетом».

С практической точки зрения нас интересуют нюансы использования и отладки Kerberos.

Проверка работы сервера

Итак, при создании ALT-домена настраивается также и служба Kerberos на сервере krb5kdc. Основной её чертой является крайняя немногословность (по соображениям безопасности), что затрудняет отладку.

В модуле «Домен» веб-интерфейса показывается текущее состояние в том числе и службы Kerberos. Если всё в порядке, то показывается

KDC: OK

Альтернативный способ получить статус домена:

# alterator-cmdline /net-domain action read
domain:test.altlinux
resolver:OK
access:OK
ldap:OK
kdc:OK
smb:OK (TEST.ALTLINUX)
dhcpd:OK
master:#t

В ALT Linux Kerberos хранит все свои данные в LDAP. Поэтому для успешной работы Kerberos требуется как запуск сервера LDAP slapd, так и заполнение структуры базы для Kerberos (при проверке в LDAP ищутся записи класса krbRealmContainer).

Если служба krb5kdc не запущена, то попробуйте запустить её вручную:

# service krb5kdc start

Настройка сервера Kerberos (KDC) осуществляется в файле /var/lib/kerberos/krb5kdc/kdc.conf

Там же видно, что журналы kdc и admin_server прописываются в секции [logging] и через syslogd попадают в файл /var/log/messages.

Внимание! Если служба krb5kdc не может быть запущена из-за того, что записи в LDAP не созданы (такое случалось на Шестой платформе, когда домен создавался до того, как настраивался сервер DHCP; в Седьмой платформе это исправлено), то нужно настроить DHCP и попробовать создать домен с другим именем.


Принципалы (пользователи)

В Kerberos билеты (тикеты) выдаются только членам профсоюза зарегистрированным принципалам. Это могут быть как пользователи, так и службы. При создании домена создаются и принципалы поддерживаемых служб. В базу Kerberos пользователи добавляются через веб-интерфейс (раздел «Пользователи») или из командной строки в программе ldap-useradd.

Для заведения пользователей и в базе Kerberos в файле /etc/sysconfig/system должна быть указана роль сервера master:

SERVER_ROLE=master

Проверить, заведён ли пользователь можно программой kadmin.local.

kadmin.local

Проверка заведённых принципалов:

# kadmin.local -q 'listprincs *'
Authenticating as principal root/admin@TEST.ALTLINUX with password.
K/M@TEST.ALTLINUX
krbtgt/TEST.ALTLINUX@TEST.ALTLINUX
kadmin/admin@TEST.ALTLINUX
kadmin/changepw@TEST.ALTLINUX
kadmin/history@TEST.ALTLINUX
kadmin/main.test.altlinux@TEST.ALTLINUX
nfs/main.test.altlinux@TEST.ALTLINUX
cifs/main.test.altlinux@TEST.ALTLINUX
host/main.test.altlinux@TEST.ALTLINUX
pop3/main.test.altlinux@TEST.ALTLINUX
http/main.test.altlinux@TEST.ALTLINUX
HTTP/main.test.altlinux@TEST.ALTLINUX
pop/main.test.altlinux@TEST.ALTLINUX
imap/main.test.altlinux@TEST.ALTLINUX
smtp/main.test.altlinux@TEST.ALTLINUX
cas@TEST.ALTLINUX
l1@TEST.ALTLINUX
admin@TEST.ALTLINUX
tt@TEST.ALTLINUX
karpov_d@TEST.ALTLINUX
ldap/main.test.altlinux@TEST.ALTLINUX

Обратите внимание, выводятся как обычные пользователи, так и службы. Последние идут с FQDN (полным доменным именем) сервера, указанным через / от названия службы.

Примечания:

  • kadmin.local работает и при выключенной службе krb5kdc.
  • вы можете запустить kadmin.local без параметров и указывать команды прямо в появившейся командной строке
  • перечень команд можно посмотреть в man kadmin.local
  • команда listprinc может указываться с шаблоном. Например
    # kadmin.local -q 'listprincs cas*'

Authenticating as principal root/admin@TEST.ALTLINUX with password. cas@TEST.ALTLINUX

  • завести принципала в Kerberos можно командой
# . alterator-kdc-princ-functions
# addprinc princ
Authenticating as principal root/admin@TEST.ALTLINUX with password.
WARNING: no policy specified for princ@TEST.ALTLINUX; defaulting to no policy
Principal "princ@TEST.ALTLINUX" created.

Вообще рекомендуется использовать функции alterator-kdc-princ-functions.

Далее проверяем заведённого пользователя (пусть у нас есть принципал cas):

# getprinc cas
Authenticating as principal root/admin@TEST.ALTLINUX with password.
Principal: cas@TEST.ALTLINUX
Expiration date: [never]
Last password change: Thu Nov 08 11:52:45 MSK 2012
Password expiration date: [none]
Maximum ticket life: 12 days 12:00:00
Maximum renewable life: 0 days 00:00:00
Last modified: Thu Nov 08 11:52:45 MSK 2012 (root/admin@TEST.ALTLINUX)
Last successful authentication: [never]
Last failed authentication: [never]
Failed password attempts: 0
Number of keys: 4
Key: vno 3, ArcFour with HMAC/md5, no salt
Key: vno 3, DES cbc mode with CRC-32, no salt
Key: vno 3, Triple DES cbc mode raw, no salt
Key: vno 3, DES cbc mode with CRC-32, AFS version 3
Attributes:
Policy: [none]

И смена пароля у принципала Kerberos:

# changepw cas 1234
Authenticating as principal root/admin@TEST.ALTLINUX with password.
Enter password for principal "cas": 
Re-enter password for principal "cas": 
Password for "cas@TEST.ALTLINUX" changed.

Проверка получения билета

Для использования утилит работы с билетами Kerberos на стороне клиента необходимо установить пакет krb5-kinit.

Запросить билет у Kerberos

$ kinit cas
Password for cas@TEST.ALTLINUX: 

Укажите пароль и нажмите Enter.

Показ полученных билетов

$ klist
Ticket cache: FILE:/tmp/krb5cc_500
Default principal: cas@TEST.ALTLINUX

Valid starting     Expires            Service principal
02/28/13 08:31:26  03/01/13 08:31:25  krbtgt/TEST.ALTLINUX@TEST.ALTLINUX

Обратите внимание, что билет для службы krbtgt выдан на сутки. Как управлять сроком выдаваемого билета и его обновлением, будет рассказано ниже.

Очистить локальный кэш билетов

$ kdestroy

Синхронизация времени

Одним из основных требований успешного использования Kerberos является обеспечение одинакового времени на сервере и клиенте. В рамках ALT-домена эта задача решена использованием синхронизации по RFC 867. Для этого на сервере включается через xinetd daytime-tcp:

# chkconfig --list | grep daytime-tcp
        daytime-tcp:    вкл

А на клиенте — служба settime-rfc867:

chkconfig settime-rfc867 on
service settime-rfc867 start

Нюансы работы

Увеличиваем срок выдаваемого билета

Тикет Kerberos по умолчанию выдаётся не более чем на 1 сутки. Если хотите выдавать тикет больше, чем на сутки, пропишите:

  1. max_life = 30d
    
    в файле /var/lib/kerberos/krb5kdc/kdc.conf (максимальный срок выдаваемого тикета — 30 дней)
  2. на LDAP-сервере dn: krbPrincipalName=krbtgt/<ваш_домен>
    krbMaxTicketLife: 2592000
    
    (срок выдаваемого тикета с сервера — 30 дней, указывается в количестве секунд)
  3. Для указания периода возобновления тикета (хотя странно, имея такой «длинный» тикет, указывать период его обновления) параметры
    max_renewable_life = 30d
    
    и krbMaxRenewableAge: 2592000 соответственно.

Использование старых версий Kerberos с новыми

В новых версиях Kerberos слабые алгоритмы (например, des-cbc-crc:afs3) по умолчанию запрещены к использованию. А на старых системах (клиентах или серверах на Пятой или Шестой платформе) они используются. Чтобы включить их поддержку, на новой системе пропишите в раздел [libdefaults] файла /etc/krb5.conf строку

allow_weak_crypto = true

Без этого с билетами Kerberos (и, как следствие с монтированием каталогов и доступом к прокси-серверу) будут проблемы.

Ошибка запуска службы krb5kdc

Если в журнале при запуске службы krb5kdc появляется ошибка:

preauth pkinit failed to initialize: No realms configured correctly for pkinit support

то это означает, что сервер LDAP (slapd) ещё не успел проинициализироваться для доступа krb5kdc. Увеличьте уровень загрузки службы krb5kdc с 40 до 41 (между запуском этих служб появится служба anacron):

# subst 's/chkconfig:   345 40 /chkconfig:   345 41 /' /etc/init.d/krb5kdc
# chkconfig krb5kdc on

Исправлено в krb5-kdc  с версии 1.11.2-alt3 

Вход по билету