Домен/Kerberos: различия между версиями
Нет описания правки |
(→Запросить билет у Kerberos: Kurman.22049) |
||
(не показано 20 промежуточных версий 6 участников) | |||
Строка 1: | Строка 1: | ||
{{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 и доступа в Интернет через прокси-сервер). | |||
Сервер аутентификации выполняет одну функцию: получает запрос, содержащий имя клиента, запрашивающего аутентификацию, и возвращает ему зашифрованный 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}} соответственно. | |||
=== Использование старых версий 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
Title::Работа с Kerberos в ALT-домене- Автор: Author::AндрейЧерепанов Раздел: Section::практика Выпуск: Issue::01 Тег: Tag::kerberos,домен
|
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.
Принципалы (пользователи)
В 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 сутки. Если хотите выдавать тикет больше, чем на сутки, пропишите:
- в файле /var/lib/kerberos/krb5kdc/kdc.conf (максимальный срок выдаваемого тикета — 30 дней)
max_life = 30d
- на LDAP-сервере dn: krbPrincipalName=krbtgt/<ваш_домен> (срок выдаваемого тикета с сервера — 30 дней, указывается в количестве секунд)
krbMaxTicketLife: 2592000
- Для указания периода возобновления тикета (хотя странно, имея такой «длинный» тикет, указывать период его обновления) параметры и krbMaxRenewableAge: 2592000 соответственно.
max_renewable_life = 30d
Использование старых версий 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