NOTA BENE Gli esempi citati in questa guida si intendono per MIT Kerberos 5 versione 1.6 su Scientific Linux 5.1.
Nel nostro laboratorio abbiamo un dominio example.com e n sottodomini dn.example.com. Le macchine che costituiscono il laboratorio sono:
kdc.example.com: KDC del realm EXAMPLE.COM e DNS di example.com
client.example.com: client Kerberizzato appartenente al realm EXAMPLE.COM
server.example.com: server applicativo Kerberizzato appartenente al realm EXAMPLE.COM
lab1.d1.example.com: KDC del realm D1.EXAMPLE.COM e DNS di d1.example.com
lab2.d2.example.com: KDC del realm D2.EXAMPLE.COM e DNS di d2.example.com
….
….
….
labn.dn.example.com: KDC del realm Dn.EXAMPLE.COM e DNS di dn.example.com
Per necessità logistiche gli studenti implementeranno il server kdc, il server applicativo ed il client sulla stessa macchina.
[root@kdc ~]$ yum install krb5-server
[root@client ~]$ vi /etc/krb5.conf
[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = DN.EXAMPLE.COM dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h forwardable = yes [realms] DN.EXAMPLE.COM = { kdc = kerberos.dn.example.com:88 admin_server = kerberos.dn.example.com:749 default_domain = dn.example.com } [domain_realm] .dn.example.com = DN.EXAMPLE.COM dn.example.com = DN.EXAMPLE.COM [appdefaults] pam = { debug = false ticket_lifetime = 36000 renew_lifetime = 36000 forwardable = true krb4_convert = false }
[root@kdc ~]$ vi /var/kerberos/krb5kdc/kdc.conf
[kdcdefaults] v4_mode = nopreauth kdc_tcp_ports = 88 [realms] DN.EXAMPLE.COM = { #master_key_type = des3-hmac-sha1 acl_file = /var/kerberos/krb5kdc/kadm5.acl dict_file = /usr/share/dict/words admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab supported_enctypes = des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal des-cbc-crc:v4 des-cbc-crc:afs3 }
[root@kdc ~]$ kdb5_util create -s
[root@kdc ~]$ service krb5kdc start
[root@kdc ~]$ service kadmin start
[root@kdc ~]$ service krb524 start
[root@kdc ~]$ kadmin.local
kadmin.local: listprincs
kadmin.local: addprinc admin/admin
[root@labn ~]$ vi /var/kerberos/krb5kdc/kadm5.acl
[root@kdc ~]$ kinit admin/admin
[root@kdc ~]$ kadmin
kadmin: addprinc user1
[root@kdc ~]$ kadmin
kadmin: addprinc -randkey host/labn.dn.example.com
[root@server ~]$ kinit admin/admin
[root@server ~]$ kadmin
kadmin: ktadd host/labn.dn.example.com
kadmin: exit
[root@server ~] vi /etc/ssh/sshd_config
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes (elimina il ticket alla chiusura della sessione ssh)
[root@server ~]$ service sshd restart
[root@client ~]$ vi /etc/ssh/ssh_config
GSSAPIDelegateCredentials yes (abilita il client ssh al forwarding del ticket)
[root@server ~]$ adduser -m user1
[root@client ~]$ kinit -F user1
[root@client ~]$ klist
[root@client ~]$ ssh user1@labn.dn.example.com
[user1@server ~]$ klist (la cache delle credenziali è vuota)
[user1@server ~]$ exit
[root@client ~]$ kdestroy
[root@client ~]$ kinit user1
[root@client ~]$ klist -f
[root@client ~]$ ssh user1@labn.dn.example.com
[user1@server ~]$ klist -f (notare che il TGT è ancora forwardabile)
[user1@server ~]$ exit
[root@server ~]$ authconfig --update --enablekrb5 [root@server ~]$ vi /etc/pam.d/system-auth (aggiungere validate)
la riga delle pam dovrà apparire come segue:
auth sufficient pam_krb5.so use_first_pass validate
[root@server ~]$ vi /etc/xinetd.d/krb5-telnet (verificare che disable = no)
[root@server ~]$ service xinetd restart
[root@client ~]$ telnet -f -a -l user1 labn.dn.example.com
[user1@server ~]$ exit
[root@kdc ~]$ vi /var/named/data/dn.example.com
_kerberos IN TXT "DN.EXAMPLE.COM"
_kerberos._udp IN SRV 0 0 88 kerberos
_kerberos._tcp IN SRV 0 0 88 kerberos
_kerberos-master._udp IN SRV 0 0 88 kerberos
_kerberos-adm._tcp IN SRV 0 0 749 kerberos
_kpasswd._udp IN SRV 0 0 464 kerberos
Inserire inoltre il CANME:
kerberos IN CNAME labn
su entrambi i kdc dei domini N e M:
aggiungere i principal krbtgt/DM.EXAMPLE.COM@DN.EXAMPLE.COM e krbtgt/DN.EXAMPLE.COM@DM.EXAMPLE.COM, lo stesso principal DEVE avere stesse password, kvno e enctype su i due kdc, controllarlo con il comando "getprinc".
kadmin: getprinc krbtgt/DM.EXAMPLE.COM@DN.EXAMPLE.COM
Si tratta semplicemente di fare cross autenticazione diretta tra il kdc di EXAMPLE.COM e i kdc dei domini DN.EXAMPLE.COM e DM.EXAMPLE.COM
Quindi sui kdc di ogni dominio DN.EXAMPLE.COM dobbiamo aggiungere i due principal krbtgt/EXAMPLE.COM@DN.EXAMPLE.COM e krbtgt/DN.EXAMPLE.COM@EXAMPLE.COM e questi stessi principal vanno aggiunti sul kdc.example.com facendo attenzione che le password relative a stessi principal creati sui due kdc diversi siano identiche!
Scegliamo tutti la password: klab per tutte le chiavi su tutti i domini
[root@kdc ~]$ kadmin.local
kadmin: addprinc krbtgt/EXAMPLE.COM@DN.EXAMPLE.COM
kadmin: addprinc krbtgt/DN.EXAMPLE.COM@EXAMPLE.COM
kadmin: getprinc krbtgt/EXAMPLE.COM@DN.EXAMPLE.COM (Controlliamo le kvno e gli enctype per entrambi i principal)
Lo stesso andrà fatto sui labn e labm.
[root@client ~]$ vi /etc/krb5.conf
dns_lookup_kdc = true
[root@labn ~]$ vi /home/user1/.k5login
user1@DM.EXAMPLE.COM
[root@labn ~]$ chown user1:user1 /home/user1/.k5login
A questo punto l'utente user1 del dominio DM.EXAMPLE.COM potrà fare login ssh sul sitema labn.dn.example.com
[root@labm ~]$ ssh user1@labn.dn.example.com
[user1@labn ~]$