====== Installazione Realm Kerberos in Laboratorio ======
** NOTA BENE **
Gli esempi citati in questa guida si intendono per MIT Kerberos 5 versione 1.6 su Scientific Linux 5.1.
===== Descrizione dell'ambiente di test =====
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.
===== Preparazione del sistema =====
[root@kdc ~]$ //yum install krb5-server//
===== Configurazione client e librerie K5 =====
[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
}
===== Configurazione del KDC (Key Distribution Center) =====
[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
}
===== Creazione del database per il REALM DN.EXAMPLE.COM =====
[root@kdc ~]$ //kdb5_util create -s//
===== Avviamento dei servizi che caratterizzano un KDC =====
[root@kdc ~]$ //service krb5kdc start//
[root@kdc ~]$ //service kadmin start//
[root@kdc ~]$ //service krb524 start//
===== Creare il primo utente amministratore del REALM =====
[root@kdc ~]$ //kadmin.local//
kadmin.local: //listprincs//
kadmin.local: //addprinc admin/admin//
===== Impostazione delle ACL di amministratore =====
[root@labn ~]$ //vi /var/kerberos/krb5kdc/kadm5.acl//
===== Creare un utente non privilegiato =====
[root@kdc ~]$ //kinit admin/admin//
[root@kdc ~]$ //kadmin//
kadmin: //addprinc user1//
===== Creare la chiave di servizio per la macchina labn.dn.example.com nel database del KDC =====
[root@kdc ~]$ kadmin
kadmin: //addprinc -randkey host/labn.dn.example.com//
===== Inserire la chiave di servizio nella keytable del server applicativo =====
[root@server ~]$ kinit admin/admin
[root@server ~]$ kadmin
kadmin: //ktadd host/labn.dn.example.com//
kadmin: //exit//
===== Kerberizzazione del servizio ssh mediante le librerie GSSAPI =====
[root@server ~] //vi /etc/ssh/sshd_config//
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes (elimina il ticket alla chiusura della sessione ssh)
[root@server ~]$ //service sshd restart//
===== Kerberizzazione del client =====
[root@client ~]$ //vi /etc/ssh/ssh_config//
GSSAPIDelegateCredentials yes (abilita il client ssh al forwarding del ticket)
===== Inserimento di un utente nel database di autorizzazione =====
[root@server ~]$ //adduser -m user1//
===== Test di utilizzo dell’account Kerberos con ssh =====
[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//
===== Configurazione dei moduli PAM per l’autenticazione con Kerberos 5 =====
[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
===== Verifica del telnet kerberizzato =====
[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//
===== Configurazione del DNS del dominio example.com per i servizi Kerberos 5 =====
[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
===== Configurazione della Cross Realm Authentication =====
==== Cross autenticazione diretta tra i domini DN.EXAMPLE.COM e DM.EXAMPLE.COM ====
**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
==== Cross autenticazione gerarchica tra i domini N e M passando per 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.
==== Configurazione del client per la cross authentication ====
[root@client ~]$ //vi /etc/krb5.conf//
dns_lookup_kdc = true
==== Autorizzazione in ssh ====
[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 ~]$
===== Link utili =====
[[http://www.kerberos.org/index.html]]
[[http://www.kerberos.org/software/tutorial.html]]
[[http://www.zeroshell.net/kerberos/]]
[[http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5.4/html/Deployment_Guide/ch-kerberos.html]]