Kerberos è un protocollo di autenticazione di rete.
Kerberos fornisce una forte autenticazione crittografica sui dispositivi che consente a client e server di comunicare in modo più sicuro. È progettato per risolvere i problemi di sicurezza della rete.
Quando i firewall rappresentano una soluzione per affrontare l'intrusione dalle reti esterne, Kerberos solitamente viene utilizzato per affrontare l'intrusione e altri problemi di sicurezza all'interno della rete.
L'attuale versione di Kerberos è la versione 5, chiamata KRB5 .
Per implementare Kerberos, dobbiamo avere il servizio di autenticazione centralizzato in esecuzione sul server.
Questo servizio è chiamato KEY DISTRIBUTION CENTER (KDC).
Un server registrato con KDC è considerato attendibile da tutti gli altri computer nel regno di Kerberos.
File di esempio krb5.conf
Ecco un esempio di file krb5.conf che contiene tutte le informazioni di mappatura da REALM e da dominio a REALM,
# cat /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 = EXAMPLE.COM dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true [realms] EXAMPLE.COM = { kdc = kerberos.example.com admin_server = kerberos.example.com } [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM
Installa il server Kerberos KDC
Per motivi di sicurezza, si consiglia di eseguire il server Kerberos (KDC) su un server separato.
Scarica e installa il pacchetto del server krb5.
# rpm -ivh krb5-server-1.10.3-10.el6_4.6.x86_64.rpm Preparing... ########################################### [100%] 1:krb5-server ########################################### [100%]
Verificare che i seguenti rpm siano installati prima di configurare KDC:
# rpm -qa | grep -i krb5 pam_krb5-2.3.11-9.el6.x86_64 krb5-server-1.10.3-10.el6_4.6.x86_64 krb5-workstation-1.10.3-10.el6_4.6.x86_64 krb5-libs-1.10.3-10.el6_4.6.x86_64
Modifica il file /etc/krb5.conf
Modificare /etc/krb5.conf in modo che rifletta come di seguito con le appropriate mappature REALM e DOMAIN_REALM.
# cat /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 = MYREALM.COM dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true [realms] MYREALM.COM = { kdc = elserver1.example.com admin_server = elserver1.example.com } [domain_realm] .myrealm.com = MYREALM.COM myrealm.com = MYREALM.COM
Modifica file kdc.conf
Anche kdc.conf dovrebbe essere modificato come mostrato di seguito.
# cat /var/kerberos/krb5kdc/kdc.conf [kdcdefaults] kdc_ports = 88 kdc_tcp_ports = 88 [realms] MYREALM.COM = { #master_key_type = aes256-cts acl_file = /var/kerberos/krb5kdc/kadm5.acl dict_file = /usr/share/dict/words admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal }
Crea database KDC
Quindi, crea il database KDC utilizzando il comando kdb5_util come mostrato di seguito. In questa fase, immettere la password appropriata per la chiave master del database KDC.
# /usr/sbin/kdb5_util create -s Loading random data Initializing database '/var/kerberos/krb5kdc/principal' for realm 'MYREALM.COM', master key name 'K/[email protected]' You will be prompted for the database Master Password. It is important that you NOT FORGET this password. Enter KDC database master key: Re-enter KDC database master key to verify:
Assegna il privilegio di amministratore
Agli utenti possono essere concessi privilegi di amministratore per il database utilizzando il file /var/kerberos/krb5kdc/kadm5.acl.
# cat /var/kerberos/krb5kdc/kadm5.acl */[email protected] *
Nell'esempio precedente, qualsiasi principale in MYREALM con un'istanza di amministratore dispone di tutti i privilegi di amministratore.
Crea un principale
Creare l'entità utilizzando il comando seguente. In questo esempio, ho creato il principal con il nome utente “eluser”.
# kadmin.local -q "addprinc eluser/admin" Authenticating as principal root/[email protected] with password. WARNING: no policy specified for eluser/[email protected]; defaulting to no policy Enter password for principal "eluser/[email protected]": Re-enter password for principal "eluser/[email protected]": Principal "eluser/[email protected]" created.
Avvia il servizio Kerberos
Avvia i demoni KDC e kadmin come mostrato di seguito.
# service krb5kdc start Starting Kerberos 5 KDC: [ OK ] # service kadmin start Starting Kerberos 5 Admin Server: [ OK ]
Configura client Kerberos
Configura il client Kerberos per l'autenticazione nel database KDC:
Ora vediamo come configurare il client krb5 per l'autenticazione sul database Kerberos KDC che abbiamo creato sopra.
Passaggio 1:installa i pacchetti krb5-libs e krb5-workstation sul computer client.
Passaggio 2:copia /etc/krb5.conf dal server KDC alla macchina client.
Passaggio 3:ora è necessario creare l'entità per il client nel database KDC/Kerberos.
È possibile utilizzare i comandi seguenti per creare l'entità per la macchina client sul server master KDC. Nell'esempio seguente sto creando un'entità host per il client elserver3.example.com sul server KDC master elserver1.example.com
# kadmin.local -q "addprinc host/elserver3.example.com" Authenticating as principal root/[email protected] with password. WARNING: no policy specified for host/[email protected]; defaulting to no policy Enter password for principal "host/[email protected]": Re-enter password for principal "host/[email protected]": Principal "host/[email protected]" created.
Passaggio 4:estrai krb5.keytab per il client dal server master KDC utilizzando il comando seguente:
# kadmin.local -q "ktadd -k /etc/krb5.keytab host/elserver3.example.com" Authenticating as principal root/[email protected] with password. Entry for principal host/elserver3.example.com with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/elserver3.example.com with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/elserver3.example.com with kvno 2, encryption type des3-cbc-sha1 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/elserver3.example.com with kvno 2, encryption type arcfour-hmac added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/elserver3.example.com with kvno 2, encryption type des-hmac-sha1 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/elserver3.example.com with kvno 2, encryption type des-cbc-md5 added to keytab WRFILE:/etc/krb5.keytab.
Questo completa la configurazione. A questo punto hai finito.
D'ora in poi, ogni volta che stabilisci una connessione SSH e RSH, l'host verifica la propria identità rispetto al database KDC utilizzando il file keytab e stabilisce una connessione sicura su Kerberos.
Ktadd viene utilizzato per generare una nuova keytab o aggiungere un principal a una keytab esistente dal comando kadmin.
Ktremove viene utilizzato per rimuovere il principal da una keytab esistente. Il comando per rimuovere il principal che abbiamo creato sopra è,
kadmin.local -q "ktremove -k /etc/krb5.keytab –q all"
Elimina un database KDC
Per qualche motivo, se devi eliminare un database KDC, usa il comando seguente:
# kdb5_util -r MYREALM.COM destroy kdb5_util: Deleting KDC database stored in /usr/local/var/krb5kdc/principal, you sure (type yes to confirm)? <== yes OK, deleting database '/usr/local/var/krb5kdc/principal'...
-f opzione nel comando precedente forza l'eliminazione del database KDC.
Backup e ripristino del database KDC
Per eseguire il backup di un database KDC in un file, usa krb5_util_dump.
# kdb5_util dump kdcfile # ls -l kdcfile -rw-------. 1 root root 5382 Apr 10 07:25 kdcfile
Per ripristinare il database KDC dal file di dump creato nel passaggio precedente, procedi come segue:
# kdb5_util load kdcfile