web-dev-qa-db-ja.com

リクエストのプリンシパルが間違っています(SSH / GSSAPI / Kerberos / Debian)

「内部」(VirtualBoxの意味で)ネットワーク上に2つのVMをセットアップしました。1つはDNSサーバー(dns1.example.com)で、もう1つはKDCおよびKerberos管理サーバー(kdc.example.com)です。デフォルトで唯一のレルムはEXAMPLE.COMです。どちらのマシンも、新しくインストールしたDebianSqueezeを使用しています。

問題:kdc.example.comからkdc.example.comのssh経由でログインできますが、dns1.example.comからssh経由でログインできません。

Kdc.example.comで、デバッグモードのsshdは次のように述べています。

debug1: Unspecified GSS failure.  Minor code may provide more information
Wrong principal in request

debug1: Got no client credentials
debug3: mm_request_send entering: type 41
debug3: mm_request_receive entering
debug1: userauth-request for user tom service ssh-connection method gssapi-with-mic
debug1: attempt 2 failures 1
debug2: input_userauth_request: try method gssapi-with-mic
debug1: userauth-request for user tom service ssh-connection method gssapi-with-mic
debug1: attempt 3 failures 1
debug2: input_userauth_request: try method gssapi-with-mic

その時点で、クライアントはパスワードを要求されます。 Wiresharkによって処理されたtcpdumpファイルは、暗号化されたパケットの交換があったことを示していますが、暗号化されているため、これ以上差し引くことはできません:)。 2日間のグーグルの後、私は立ち往生していて、助けていただければ幸いです。

さらに、Kerberosやその仲間に関しては、一般的な正常な構成のデバッグ戦略に関するアドバイス/リンク/ヒントをいただければ幸いです。たとえば、「間違ったプリンシパル」の何が問題になっているのか、サーバーが正しいプリンシパルの代わりに受け取るプリンシパルは何かを探す場所がわかりません。何かが私に本当の冒険はまだ来ていないことを教えてくれます:)。

以下は、構成と診断出力です。私は何も忘れていないことを願っています。

kdc:~# cat /etc/krb5kdc/kdc.conf 
[kdcdefaults]
    kdc_ports = 750,88

[realms]
    EXAMPLE.COM = {
        database_name = /var/lib/krb5kdc/principal
        admin_keytab = FILE:/etc/krb5kdc/kadm5.keytab
        acl_file = /etc/krb5kdc/kadm5.acl
        key_stash_file = /etc/krb5kdc/stash
        kdc_ports = 750,88
        max_life = 10h 0m 0s
        max_renewable_life = 7d 0h 0m 0s
        master_key_type = des3-hmac-sha1
        supported_enctypes = aes256-cts:normal arcfour-hmac:normal des3-hmac-sha1:normal des-cbc-crc:normal des:normal des:v4 des:norealm des:onlyrealm des:afs3
        default_principal_flags = +preauth
    }

kdc:~# kadmin.local -q 'listprincs'
Authenticating as principal root/[email protected] with password.
K/[email protected]
Host/[email protected]
Host/[email protected]
Host/[email protected]
Host/[email protected]
kadmin/[email protected]
kadmin/[email protected]
kadmin/[email protected]
kadmin/[email protected]
krbtgt/[email protected]
root/[email protected]
[email protected]

kdc:~# cat /etc/ssh/sshd_config |grep '^[^#]'
Port 22
ListenAddress 172.16.3.3
Protocol 2
HostKey /etc/ssh/ssh_Host_rsa_key
HostKey /etc/ssh/ssh_Host_dsa_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 768
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPIKeyExchange yes
GSSAPICleanupCredentials yes
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes

/etc/krb5.confは、kdcとdns1の両方で同一です。

dns1:~$ cat /etc/krb5.conf 
[libdefaults]
    default_realm = EXAMPLE.COM
    dns_lookup_realm = true
    dns_lookup_kdc = true 
    forwardable = true
[realms]
    EXAMPLE.COM={
        admin_server = kdc.example.com
    }
[domain_realm]
    example.com = EXAMPLE.COM
    .example.com = EXAMPLE.COM
[logging]
    kdc = FILE:/var/log/krb5kdc.log
    admin_server = FILE:/var/log/kadmin.log
    default = FILE:/var/log/krb5lib.log

TGTは転送可能です。 sshクライアントの場合:

dns1:~$ klist -f
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: [email protected]

Valid starting     Expires            Service principal
01/03/12 20:00:03  01/04/12 06:00:03  krbtgt/[email protected]
    renew until 01/04/12 20:00:00, Flags: FRIA
01/03/12 20:00:21  01/04/12 06:00:03  Host/[email protected]
    renew until 01/04/12 20:00:00, Flags: FRAT

Keytabも問題ないようです。

dns1:~# klist -k
Keytab name: WRFILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   5 Host/[email protected]
   5 Host/[email protected]
   5 Host/[email protected]
   5 Host/[email protected]

DNS(PTR、TXT、SRVを含む)は正常に機能します。

dns1:~# cat /var/cache/bind/db.example.com 
$Origin example.com.
$TTL    86400
@   IN  SOA dns1.example.com. root.example.com. (
            2012010301  ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
              86400 )   ; Negative Cache TTL
;
@   IN  NS  dns1.example.com.
dns1    IN  A   172.16.3.2
www IN  A   172.16.3.8
mail    IN  A   172.16.3.9
fed IN  A   172.16.3.100

kdc IN  A   172.16.3.3
;kds    IN  A   172.16.3.4

_kerberos   TXT "EXAMPLE.COM"

krb IN  CNAME   kdc

_kerberos._udp      SRV 0 0 88  kdc
_kerberos-master._udp   SRV 0 0 88  kdc
_kerberos-adm._tcp  SRV 0 0 749 kdc
_kpasswd._udp       SRV 0 0 464 kdc

dns1:~# cat /var/cache/bind/db.3.16.172.in-addr.arpa 
$Origin 3.16.172.in-addr.arpa.
$TTL    86400
@   IN  SOA dns1.example.com. root.example.com. (
            2012010102  ; Serial
             604800     ; Refresh
              86400     ; Retry
            2419200     ; Expire
              86400 )   ; Negative Cache TTL
;
@   IN  NS  dns1.example.com.
2   IN  PTR dns1.example.com.
3   IN  PTR kdc.example.com.

8   IN  PTR example.com.
9   IN  PTR mail.example.com.
2
badbishop

新しいサーバービルドでまったく同じエラーをグーグルで検索しているときにこれを見つけました-正しい方向に私を向けました:)

私の場合、逆引きDNSが正しくありませんでした。これを更新して、キャッシュネームサーバーのキャッシュをクリアすると、機能しました。

3
Rob Redpath

もっと気を配る必要があります。/etc/hostsに127.0.0.1をFQDNに解決する行が残っていました(現在はコメントアウトされています)。

kdc:~$ cat /etc/hosts
127.0.0.1   localhost
#127.0.0.1  kdc.example.com kdc
172.16.3.3  kdc.example.com kdc

DBとkeytabから関連するプリンシパルを削除し、両方のVMを再起動すると、すべてが希望どおりに機能します。うーん...

2
badbishop