Я пытаюсь настроить поддержку входа Kerberos (домен Windows AD, предоставляющий Kerberos) для рабочих станций Kubuntu 12.04 Linux в компании, где я работаю.
Он почти полностью работает, но я не могу заставить работать kerberos как для входа в систему (через kdm), так и для ssh одновременно. Проблема, похоже, в том, что kdm определяет полный домен хоста как hostname.domain. а ssh определяет полный домен как hostname.domain (обратите внимание на отсутствие завершающего .)
Этого отсутствия или наличия . в конце домена, который используется в запросах Kerberos, достаточно, чтобы запрос билета завершился ошибкой «Сервер не найден в базе данных Kerberos». Если я обновлю /etc/hosts, чтобы указать полное имя хоста как hostname.domain. и присоединюсь к домену с помощью Samba, входы KDM с использованием Kerberos будут работать правильно, но входы SSH будут завершаться неудачей. Если я обновлю /etc/hosts, чтобы указать хост как hostname.domain, то входы SSH с использованием Kerberos будут работать, но входы KDM будут завершаться неудачей.
Я немного не понимаю, почему эти два сервиса по-разному определяют полное доменное имя. Я провел тщательный поиск и не нашел никаких упоминаний о том, что у кого-то еще была такая проблема, или о каких-либо вариантах, которые заставили бы один из сервисов определять свои доменные имена по-разному.
Технические детали
Использование Kubuntu 12.04 — это техническое требование, находящееся вне моего контроля, поэтому на данном этапе обновление до более позднего дистрибутива не представляется возможным.
pam_krb5 используется для обеспечения аутентификации Kerberos через PAM DNS, который не является Windows DNS (нельзя переключать DNS-серверы, пока не будут завершены дальнейшие работы над другой инфраструктурой), поэтому основные данные, используемые для присоединения к домену Samba Kerberosied, берутся из /etc/hosts, который выглядит примерно так:
127.0.0.1 hostname.domain. hostname localhost
(хотя используемый DNS-сервер Unix имеет правильные прямые и обратные записи DNS для хостов)
/etc/krb5.conf (который в основном является файлом дистрибутива по умолчанию с введенными данными домена и серверов)
[libdefaults]
default_realm = DOMAIN
krb4_config = /etc/krb.conf
krb4_realms = /etc/krb.realms
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
# samba 3 didn't like the default enc type so overridden to ones it supported
default_tkt_enctypes = arcfour-hmac-md5 des3-hmac-sha1 des-cbc-crc
default_tgs_enctypes = arcfour-hmac-md5 des3-hmac-sha1 des-cbc-crc
[realms]
DOMAIN = {
kdc = dc01.domain
kdc = dc02.domain
admin_server = dc01.domain
}
[domain_realm]
.domain = DOMAIN
[login]
krb4_convert = true
krb4_get_tickets = false
/etc/samba/smb.conf (используется только для присоединения к домену)
[global]
security = ads
realm = WETAFX.CO.NZ
workgroup = WETAFX.CO.NZ
kerberos method = secrets and keytab
client signing = yes
client use spnego = yes
server string = %h server (Samba, Ubuntu)
dns proxy = no
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
panic action = /usr/share/samba/panic-action %d
pam wise /etc/pam.d/kdm просто включает в себя файлы common-pam, которые имеют стандартные записи pam_krb5.so, такие как
auth sufficient pam_krb5.so minimum_uid=1000
которые в основном взяты непосредственно из страниц руководства pam_krb5.conf
конфигурация ssh имеет
GSSAPIAuthentication yes
а остальное — стандартный файл конфигурации Ubuntu SSH по умолчанию.
Спасибо за любые указания относительно того, что является причиной этого несоответствия в обнаруженном полностью квалифицированном домене между службами.
решение1
Я думаю, что я разобрался, что здесь происходит. Похоже, что дополнительная информация сохраняется в файле keytab после присоединения хоста с/без . на конце домена, и именно отсюда возникало странное поведение.
Однажды я удалил /etc/krb5.keytab и перезапустил присоединение к домену, что создало новый keytab, который был настроен только с доменным именем, настроенным без . на конце. На тот момент и kdm, и ssh работали правильно с kerberos.