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

Материал из ALT Linux Wiki
Перейти к: навигация, поиск
м
Строка 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 для запроса дальнейших билетов на другие службы. Часто специалисты билет называют «тикетом».
Строка 85: Строка 85:
 
ldap/main.test.altlinux@TEST.ALTLINUX</pre>
 
ldap/main.test.altlinux@TEST.ALTLINUX</pre>
  
Обратите внимание, выводятся как обычные пользователи, так и службы. Последние идут с [http://ru.wikipedia.org/wiki/FQDN FQDN] (полным доменным именем) сервера, указанным через / от названия службы.
+
Обратите внимание, выводятся как обычные пользователи, так и службы. Последние идут с [[ruwp:FQDN|FQDN]] (полным доменным именем) сервера, указанным через / от названия службы.
  
 
''Примечания:''  
 
''Примечания:''  

Версия 10:22, 18 октября 2015

Журнал ALT-review

Работа с Kerberos в ALT-домене
ALT-review logo.png
Работа с Kerberos в ALT-домене

Автор: AндрейЧерепанов   Раздел: практика   Выпуск: 01   Тег: kerberos,домен

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

$ 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