Назад | Перейти на главную страницу

ошибка чтения файла keytab krb5.keytab

Я заметил эти сообщения об ошибках Kerberos keytab как на SLES 11.2, так и на CentOS 6.3:

sshd[31442]: pam_krb5[31442]: error reading keytab 'FILE: / etc/ krb5. keytab'

/etc/krb5.keytab не существует на наших хостах, и, насколько я понимаю, файл keytab нам не нужен. За это введение в Kerberos keytab:

Keytab - это файл, содержащий пары участников Kerberos и зашифрованных ключей (они являются производными от пароля Kerberos). Вы можете использовать этот файл для входа в Kerberos без запроса пароля. Чаще всего файлы keytab используются в личных целях, чтобы позволить сценариям проходить аутентификацию в Kerberos без вмешательства человека или сохранять пароль в текстовом файле.

Это похоже на то, что нам не нужно, и, возможно, с точки зрения безопасности лучше не иметь этого.

Как я могу предотвратить появление этой ошибки в наших системных журналах? Вот мой krb5.conf, если он полезен:

banjer@myhost:~> cat /etc/krb5.conf
# This file managed by Puppet
#
[libdefaults]
        default_tkt_enctypes = RC4-HMAC DES-CBC-MD5 DES-CBC-CRC
        default_tgs_enctypes = RC4-HMAC DES-CBC-MD5 DES-CBC-CRC
        preferred_enctypes = RC4-HMAC DES-CBC-MD5 DES-CBC-CRC
        default_realm = FOO.EXAMPLE.COM
        dns_lookup_kdc = true
        clockskew = 300

[logging]
        default = SYSLOG:NOTICE:DAEMON
        kdc = FILE:/var/log/kdc.log
        kadmind = FILE:/var/log/kadmind.log

[appdefaults]
pam = {
        ticket_lifetime = 1d
        renew_lifetime = 1d
        forwardable = true
        proxiable = false
        retain_after_close = false
        minimum_uid = 0
        debug = false
        banner = "Enter your current"
}

Дайте мне знать, если вам понадобятся другие конфиги. Спасибо.

РЕДАКТИРОВАТЬ

Это сообщение появляется в /var/log/secure всякий раз, когда пользователь без полномочий root входит в систему через SSH или консоль. Кажется, это происходит только при аутентификации на основе пароля. Если я использую ssh на основе ключей для сервера, я не вижу ошибки. Если я захожу в систему под root, то ошибки не вижу. Наши серверы Linux аутентифицируются в Active Directory, поэтому для аутентификации пользователя используется смесь PAM, samba, kerberos и winbind.

Если у вас нет keytab на хосте, вы действительно не используете Kerberos должным образом и широко открыты для относительно простой атаки, если злоумышленник может отравить ваши кеши DNS.

Kerberos - это система общего секрета, и для эффективной работы любой сервер, принимающий билеты Kerberos, должен иметь локальную копию общего секрета, который также есть в Центре распространения ключей Kerberos (KDC). Это и есть keytab, локальная копия общего секрета для этой службы.

Keytab также может использоваться в качестве кеша для получения билетов Kerberos Ticket-Granting-Tickets (TGT), но это для тех случаев, когда вы хотите, чтобы ваш хост действовал как клиент для сервера Kerberos, а не как сервер.

pam_krb5 использует keytab для проверки того, что введенный пароль является действительным паролем в KDC. Если у вас нет вкладки, позволяющей это сделать, то все, что вы проверяете, - это то, что какая-то машина где-то ответила на запрос протокола Kerberos.

Это могло быть старое сообщение, но у меня была та же проблема, и я хотел избавиться от сообщения. Я выполнил эти инструкции ArchLinux и решил это.

https://wiki.archlinux.org/index.php/Active_Directory_Integration#Creating_a_machine_key_tab_file

Просто введите это:

net ads keytab create -U administrator

Однако это может зависеть от вашей настройки.

Вы можете отключить проверку, чтобы избежать появления сообщения в журнале, как предлагает Банджер, но цель этапа проверки - предотвратить атаку, при которой злоумышленник устанавливает свой собственный фиктивный KDC. Другими словами, вам нужен принципал хоста для проверки подлинности TGT, предоставленного KDC.

Чтобы отключить проверку keytab и, следовательно, подавить эти сообщения журнала, добавьте no_validate в настройках PAM. Например:

auth        sufficient    pam_krb5.so use_first_pass no_validate

На своих серверах CentOS 6 я внес это изменение везде, где видел pam_krb5.so на которые есть ссылки в этих двух файлах:

/etc/pam.d/password-auth-ac
/etc/pam.d/system-auth-ac

Я уверен, что SLES похожа, но мы постепенно отказываемся от этой ОС, поэтому я не планирую ее там тестировать.

Как заметил @ ryan-fisher в своем ответе, хосту нужен файл keytab, чтобы он мог получить TGT для предварительной проверки.

Причина, по которой сообщение не отображается для пользователя root, заключается в том, что этот пользователь является локальным (не требует Kerberos для аутентификации). При использовании авторизованных ключей SSH вы также обходите Kerberos, поэтому не будет ошибок, связанных с отсутствием keytab.

Теперь вам нужно убедиться, что /etc/krb5.keytab содержит ключи для главного host/domain.name.of.host для машины. Предполагая, что обратный DNS настроен правильно, вы сможете войти в систему с помощью ssh, не вводя пароль, при условии, что у вас есть действующий TGT.