Configurare un server Kerberos

By | Dicembre 11, 2018

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: example
Re-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": kerberos
Re-enter password for principal "root/admin@EXAMPLE.COM": kerberos
Principal "root/admin@EXAMPLE.COM" created.

Crea il principal user01:

kadmin.local:  addprinc user01
Enter password for principal "user01@EXAMPLE.COM": user01
Re-enter password for principal "user01@EXAMPLE.COM": user01
Principal "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.

One thought on “Configurare un server Kerberos

  1. Pingback: RHEL7: utilizzare Kerberos per controllare l'accesso alle condivisioni di rete NFS - prometheusproject

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.