Я хочу аутентифицироваться с SSH через Kerberos SSO. Теперь, когда я вошел в систему с моим основным пользователем на sourcehost я получаю свой билет Kerberos, но не могу использовать его для SSH в targethost .

Проблема, кажется, имя хоста. У меня есть основной host/targethost.example.com@EXAMPLE.COM но независимо от того, если я ssh targethost или ssh targethost.example.com он переводится в основной host/targethost@EXAMPLE.COM (см. Сообщение об ошибке ниже), который не существует

Я могу ошибаться, но я думаю, что все должно быть наоборот, и ssh targethost и ssh targethost.example.com должны быть переведены в основной host/targethost.example.com@EXAMPLE.COM .

Вот ошибка:

$ ssh targethost.example.com -v
...
debug1: Unspecified GSS failure.  Minor code may provide more information
Server host/targethost@EXAMPLE.COM not found in Kerberos database

debug1: Unspecified GSS failure.  Minor code may provide more information
Server host/targethost@EXAMPLE.COM not found in Kerberos database

debug1: Unspecified GSS failure.  Minor code may provide more information
...
debug1: Next authentication method: password
testuser@targethost.example.com's password: 

Кто-нибудь может объяснить, как принципал хоста получен из имени хоста и как это можно настроить (я, кстати, на Ubuntu)?


Редактировать:

Ответ grawity привел меня к решению, которое я считаю подходящим для моей конфигурации.

  • В книге Гармана Kerberos я обнаружил, что канонизация на стороне KDC была предпочтительным способом.
  • Для моего KDC, поддерживаемого LDAP, я нашел в документации Kerberos (внизу этой страницы) способ, как это можно реализовать.

Поэтому после создания принципала узла с помощью kdadmin.local / addprinc с полным доменным именем мне пришлось добавить псевдоним к новой записи субъекта в LDAP, запустив ldapmodify со следующим вводом:

dn: krbPrincipalName=host/targethost.example.com@EXAMPLE.COM,cn=EXAMPLE.COM,cn=krbContainer,dc=example,dc=com
replace: krbCanonicalName
krbCanonicalName: host/targethost.example.com@EXAMPLE.COM
-
add: krbPrincipalName
krbPrincipalName: host/targethost@EXAMPLE.COM

1 ответ1

1

Традиционно Kerberos использовал обратный DNS для канонизации основного имени. То есть после разрешения targethost.example.com в IP-адрес он пытается преобразовать адрес обратно в "каноническое" имя и использует его для принципала.

Если targethost была решена с помощью / и т.д. / хосты, то первое имя в соответствующей строке будет использоваться в качестве "канонического" имени:

# good:
1.2.3.4  targethost.example.com  targethost

# bad:
1.2.3.4  targethost  targethost.example.com

Если вы хотите, вы можете полностью отключить канонизацию на основе DNS через /etc/krb5.conf:

[libdefaults]
    dns_canonicalize_hostname = false

... и просто создайте два принципала для хоста - один для короткого имени, другой для длинного. (Это именно то, что делает Active Directory, и мало чем отличается от поведения SSL/TLS - всегда безопаснее напрямую использовать пользовательский ввод, а не запрашивать DNS.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .