====== 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]]