Eu configurei duas VMs em uma rede "interna" (no sentido VirtualBox), sendo uma delas um servidor DNS (dns1.example.com) e a outra - um servidor admin KDC e Kerberos (kdc.example.com ). O padrão e o único domínio são EXAMPLE.COM. Ambas as máquinas usam o Debian Squeeze recém-instalado.
O problema:
Eu posso fazer o login via ssh em kdc.example.com de kdc.example.com, mas não consigo fazer login via ssh em dns1.example.com.
Em kdc.example.com, o sshd no modo de depuração diz:
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
ponto em que o cliente é solicitado por uma senha. Um arquivo tcpdump processado pelo Wireshark mostra que houve alguma troca de pacotes criptografados, mas não posso deduzir mais como estão, bem, criptografados :). Depois de dois dias pesquisando, estou preso e gostaria de receber ajuda.
Ainda mais eu apreciaria qualquer conselho / links / dicas sobre uma estratégia geral de depuração de configuração, quando se trata de Kerberos e amigos. Por exemplo, estou sem ideias para procurar o que há de errado com 'Principal errado' e qual é o principal que o servidor recebe em vez do direito. Algo me diz que as aventuras reais ainda estão por vir:).
Abaixo estão as configurações e as saídas de diagnóstico. Espero não ter esquecido nada.
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 é idêntico no kdc e no 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
O TGT é transitável. No cliente 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
O Keytab também parece estar bem:
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]
O DNS (incl. PTR, TXT, SRV) funciona como deveria.
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.