Presentazione di Kerberos
Kerberos è un protocollo di autenticazione sviluppato al MIT nel 1988.Un client si connette a un server KDC (Kerberos Distribution Center) utilizzando un principal (tipo di accesso) e ottiene un ticket. Finché il ticket è valido, il client può accedere ad alcuni servizi e non ha più bisogno di autenticarsi.Sia il client (qui kbclient.example.com) che il server KDC (qui kbserver.example.com) devono trovarsi nello stesso dominio (in genere il nome del dominio scritto in maiuscolo, qui EXAMPLE.COM).
Prerequisiti
Prima di configurare Kerberos, la sincronizzazione NTP e la risoluzione del nome host devono essere funzionanti.
Se DNS non è configurato, aggiungi le seguenti righe nel file /etc/hosts (sostituisci gli indirizzi IP specificati con i tuoi):
192.168.1.11 kbserver.example.com 192.168.1.12 kbclient.example.com
Attenzione: quando si aggiunge una nuova riga nel file /etc/hosts, è necessario scrivere il nome di dominio completo subito dopo l’indirizzo IP. Se usi uno o più alias e li aggiungi prima del nome di dominio completo, Kerberos non funzionerà.
Configurazione del server
Installa i pacchetti Kerberos:
# yum install -y krb5-server krb5-workstation pam_krb5
Innanzitutto, modifica il file /var/kerberos/krb5kdc/kdc.conf e sostituisci EXAMPLE.COM con il tuo dominio.
Facoltativamente, decommentare la riga master_key_type = aes256-cts e incollare la seguente riga nella stanza [realms]:
default_principal_flags = +preauth
Nota: rimuove la compatibilità con Kerberos 4 ma migliora la sicurezza.
Quindi, nel file /etc/krb5.conf, decommenta tutte le linee, sostituisci EXAMPLE.COM con il tuo dominio, esempio.com con il tuo nome di dominio e kerberos.example.com con il tuo nome del server KDC (qui kbserver .example.com).
Infine, modifica il file /var/kerberos/krb5kdc/kadm5.acl e sostituisci EXAMPLE.COM con il tuo dominio.
Crea il database Kerberos (sostituisci EXAMPLE.COM con il tuo dominio):
# kdb5_util create -s -r EXAMPLE.COM Loading random data Initializing database '/var/kerberos/krb5kdc/principal' for realm 'EXAMPLE.COM', master key name 'K/M@EXAMPLE.COM' You will be prompted for the database Master Password. It is important that you NOT FORGET this password. Enter KDC database master key:exampleRe-enter KDC database master key to verify:example
Nota: può essere necessario digitare i tasti sulla tastiera per aumentare l’entropia necessaria per la generazione casuale dei dati!
Avvia i servizi Kerberos:
# systemctl start krb5kdc kadmin
Attiva i servizi Kerberos all’avvio:
# systemctl enable krb5kdc kadmin
Crea un utente per il test:
# useradd user01
Esegui lo strumento di amministrazione Kerberos:
# kadmin.local Authenticating as principal root/admin@EXAMPLE.COM with password.
Crea il principal admin:
kadmin.local: addprinc root/admin Authenticating as principal root/admin@EXAMPLE.COM with password. WARNING: no policy specified for root/admin@EXAMPLE.COM; defaulting to no policy Enter password for principal "root/admin@EXAMPLE.COM":kerberosRe-enter password for principal "root/admin@EXAMPLE.COM":kerberosPrincipal "root/admin@EXAMPLE.COM" created.
Crea il principal user01:
kadmin.local: addprinc user01 Enter password for principal "user01@EXAMPLE.COM":user01Re-enter password for principal "user01@EXAMPLE.COM":user01Principal "user01@EXAMPLE.COM" created.
Aggiungi il nome host KDC al database Kerberos:
kadmin.local: addprinc -randkey host/kbserver.example.com Authenticating as principal root/admin@EXAMPLE.COM with password. WARNING: no policy specified for host/kbserver.example.com@EXAMPLE.COM; defaulting to no policy Principal "host/kbserver.example.com@EXAMPLE.COM" created.
Crea una copia locale memorizzata per impostazione predefinita nel file /etc/krb5.keytab:
kadmin.local: ktadd host/kbserver.example.com Authenticating as principal root/admin@EXAMPLE.COM with password. Entry for principal host/kbserver.example.com with kvno 2, encryption type aes256-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/kbserver.example.com with kvno 2, encryption type aes128-cts-hmac-sha1-96 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/kbserver.example.com with kvno 2, encryption type des3-cbc-sha1 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/kbserver.example.com with kvno 2, encryption type arcfour-hmac added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/kbserver.example.com with kvno 2, encryption type camellia256-cts-cmac added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/kbserver.example.com with kvno 2, encryption type camellia128-cts-cmac added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/kbserver.example.com with kvno 2, encryption type des-hmac-sha1 added to keytab WRFILE:/etc/krb5.keytab. Entry for principal host/kbserver.example.com with kvno 2, encryption type des-cbc-md5 added to keytab WRFILE:/etc/krb5.keytab.
Esci dallo strumento di amministrazione Kerberos:
kadmin.local: quit
Modifica il file / etc / ssh / sshd_config e aggiungi / rimuovi le seguenti righe:
GSSAPIAuthentication yes GSSAPIDelegateCredentials yes
Ricarica la configurazione del servizio sshd:
# systemctl reload sshd
Configura il componente PAM sulla riga di comando:
# authconfig --enablekrb5 --update
Per ottenere la configurazione corretta del firewall (porta udp/tcp 88 per Kerberos stesso, porta tcp 749 per comunicazione kadmin), creare il file /etc/firewalld/services/kerberos.xml e incollare le seguenti righe:
<?xml version="1.0" encoding="utf-8"?> <service> <short>Kerberos</short> <description>Kerberos network authentication protocol server</description> <port protocol="tcp" port="88"/> <port protocol="udp" port="88"/> <port protocol="tcp" port="749"/> </service>
Nota: un file di configurazione di Kerberos Firewalld esiste già nella directory /usr/lib/firewalld/ services ma non specifica il protocollo kadmin (749/tcp). Ciò costringerebbe tutte le configurazioni a essere eseguite solo sul server KDC, il che non è molto utile.
Aggiungi il nuovo servizio al firewall:
# firewall-cmd --permanent --add-service=kerberos
Ricarica la configurazione del firewall:
# firewall-cmd --reload
Verifica la tua configurazione (qui kbserver.example.com è il nome del server KDC):
# su - user01 $ kinit Password for user01@EXAMPLE.COM:user01$ klist Ticket cache: KEYRING:persistent:1000:1000 Default principal: user01@EXAMPLE.COM Valid starting Expires Service principal 07/22/2014 16:48:35 07/23/2014 16:48:11 krbtgt/EXAMPLE.COM@EXAMPLE.COM renew until 07/22/2014 16:48:11 $ ssh kbserver.example.com
Ora dovresti essere in grado di uscire e riconnettersi senza fornire alcuna password.
Nota: per eliminare un ticket, utilizzare il comando kdestroy.
Troubleshooting
Quando si risolve il comportamento di Kerberos come root, è possibile assegnare un nome file alla variabile di ambiente KRB5_TRACE. Questo ti aiuterà a tracciare i vari passi seguiti da Kerberos.
# export KRB5_TRACE=/dev/stdout # kinit [2878] 1451496694.41411: Getting initial credentials for root@EXAMPLE.COM [2878] 1451496694.41547: Sending request (183 bytes) to EXAMPLE.COM ...
Risorse addizionali
Il capitolo 11 della Guida all’autenticazione a livello di sistema RHEL 7 tratta della configurazione KDC.
Pingback: RHEL7: utilizzare Kerberos per controllare l'accesso alle condivisioni di rete NFS - prometheusproject