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

Материал из ALT Linux Wiki
Нет описания правки
 
(не показано 17 промежуточных версий 6 участников)
Строка 5: Строка 5:
|Tag            = kerberos,домен
|Tag            = kerberos,домен
|Section        = практика
|Section        = практика
|Issue          =
|Issue          =01
}}
}}
{{review-nav
{{review-nav
Строка 13: Строка 13:
}}
}}


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


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


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


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


Строка 59: Строка 59:
=== kadmin.local ===
=== kadmin.local ===


Проверка заведённых пользователей:
Проверка заведённых принципалов:
 
<pre># kadmin.local -q 'listprincs *'
<pre># kadmin.local -q 'listprincs *'
Authenticating as principal root/admin@TEST.ALTLINUX with password.
Authenticating as principal root/admin@TEST.ALTLINUX with password.
Строка 84: Строка 85:
ldap/main.test.altlinux@TEST.ALTLINUX</pre>
ldap/main.test.altlinux@TEST.ALTLINUX</pre>


Обратите внимание, выводятся как обычные пользователи, так и службы. Последние идут с FDDN (полным доменным именем) сервера, указанным через / от названия службы.
Обратите внимание, выводятся как обычные пользователи, так и службы. Последние идут с [[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


Примечание: {{prg|kadmin.local}} работает и при выключенной службе {{prg|krb5kdc}}
== Синхронизация времени ==
 
Одним из основных требований успешного использования 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}}}}

Текущая версия от 16:08, 8 сентября 2020

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 

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