Kerberos

De SeRoM - Wiki
Aller à : navigation, rechercher

Introduction

Kerberos serveur vient avec 3 démons:

  • krb5kdc: Le serveur KDC
  • kadmin: La console d'administration
  • kprop: Pour la synchronisation des KDC Master-Slave

Dans la doc qui suit, on ne va utiliser que les deux premiers.

Mise en place

Serveur

Installation

On installe le paquet qui va bien

 yum install krb5-server

Configuration

On édite le fichier de configuration 'client' krb5.conf

 vim /etc/krb5.conf
     [libdefaults]
         default_reals = SERVER.EXAMPLE.COM
     
     [realms]
         SERVER.EXAMPLE.COM = {
             kdc = <IP-Du-Server-KDC>:88
             admin_server = <IP-Du-Server-KDC>:749
         }
     
     [domain_realm]
         server.example.com = EXAMPLE.COM
         example.com = EXAMPLE.COM
     
     [appdefaults]
         validate = true

On édite le fichier de configuration 'serveur' kdc.conf

 vim /var/kerberos/krb5kdc/kdc.conf
     [realms]
      SERVER.EXAMPLE.COM = {
      master_key_type = des3-hmac-sha1
      default_principal_flags = +preauth
      ...

On édite le fichier de drois d'admin du KDC kadm5.acl

 vim /var/kerberos/krb5kdc/kadm5.acl
     */admin@<REALM>   *

Préparations

On initialise une Base de donnée Kerberos.

 /usr/kerberos/sbin/kdb5_util create -r <REALM> -s

Notez que l'argument -s génère un 'stash' pour ne pas avoir à taper de mot de passe au démarrage du démon.

On rajoute un compte administrateur et un compte user grace à kadmin.local:

 kadmin.local
    kadmin.local: addprinc admin/admin@<REALM>
    kadmin.local: addprinc user@<REALM>

Tant qu'on est connecté à la console d'admin, on en profite pour créer un service host. On génére aussi le keytab local à partir du principal créer.

 kadmin.local
    kadmin.local: addprinc -randkey host/server.example.com 
    kadmin.local: ktadd -k /etc/krb5.keytab host/server.example.com 

Démarrage

On lance les deux démons que l'on utilise:

 chkconfig krb5kdc on
 chkconfig kadmin on
 /etc/init.d/krb5kdc start
 /etc/init.d/kadmin start

Et on oublie pas de d'ouvrir les ports utilisé par ces démons dans IPTables avec les règles suivantes:

 -A RHS333 -p tcp -m tcp --dport 88 -j ACCEPT
 -A RHS333 -p udp -m udp --dport 88 -j ACCEPT
 -A RHS333 -p udp -m udp --dport 464 -j ACCEPT
 -A RHS333 -p tcp -m tcp --dport 749 -j ACCEPT

Attention

Attention

Il y a un contexte SELinux spécial pour Kerberos. Vérifiez bien le contexte des fichiers de configurations (/var/kerberos/krb5kdc/) et de logs (/var/log/).

Client

On récupère le fichier de configuration type 'client' krb5.conf. On s'assure qu'on ai un bon contexte SELinux appliqué.

 scp server:/etc/krb5.conf /etc/krb5.conf
 
 retorecon /etc/krb5.conf

On ajoute le principal du client dans le KDC

 kadmin - root/admin
     kadmin.local: addprinc -randkey host/station.example.com 
     kadmin.local: ktadd -k /etc/krb5.keytab host/station.example.com 

On va activer l'authentification via Kerberos avec l'outil graphique d'authentification:

 system-config-authentication

Gérer les Principals

Ajouter un utilisateur:

 kadmin
     kadmin: addprinc <user>

Ajouter un administrateur:

 kadmin
     kadmin: addprinc root/admin

Ajouter un service (HTTP, nfs, host, ...):

 kadmin
     kadmin: addprinc -randkey hots/server.example.com
     kadmin: addprinc -randkey <service>/server.example.com

Extraire le keytab d'un principal service:

 kadmin
     kadmin: ktadd -k /path/mykeytab.keytab <service>/<hostname.fqdn>

Ajouter le SSO sur SSH

Sur tous les hosts il faudra adapter une valeur du fichier ssh_config.

 vim /etc/ssh/ssh_config
     GSSAPIDelegateCredentials yes

Troubleshooting

Liste tous les principals connu du KDC via kadmin ou kadmin.local.

 kadmin.local
     kadmin.local: listprincs

Voir les détails d'un principal via kadmin ou kadmin.local.

 kadmin.local
     kadmin.local: getprinc <Principal>

Liste tous les principals connu du KDC via ktutil.

 ktutil
     ktutil: rkt /etc/openldap/ldap.keytab
     ktutil: list

Demande un ticket pour un principal spécifique:

 kvno ldap/station.example.com