Archive

Archives pour 10/2004

Installation d’un KDC Kerberos

I) Introduction :

Dans le mécanisme traditonnel d’authentification, les utilisateurs prouvent leur identité au moyen d’un mot de passe. Ce système ne sait pas vérifier si l’utilisateur distant a volé le mot de passe ni même si le système distant est un système criminel masqué derrière une adresse dérobée.

Dans le système d’authentification Kerberos, lorsque un utilisateur tente de se connecter à un système, un hôte, le Key Distribution Center (centre de distribution des clés ou KDC) va vérifier les identités des deux parties avant de valider une authentification et en cas de succès, il va avertir chacune des deux parties que l’autre est bien celui qu’il prétend être.

Deux points important sont à noter pour finir cette courte introduction. Tout d’abord, l’utilisation de Kerberos nécessite que les services soient kerberisés. Les logiciels doivent être conçus pour exploiter Kerberos sinon point de sécurisation. L’exemple flagrant est celui des domaines MS Active Directory qui exploitent Kerberos V5 sur le papier mais même en 2004 la plupart des applications même Microsoft ne le sont pas et exploitent par conséquent le bien moins sécurisé NTLM. L’autre point important est que par son mode de fonctionnement, Kerberos implémente le SSO (Single Sign On) ce qui permet de n’avoir à s’authentifier qu’une fois puis après il suffit de présenter son ticket Kerberos. Mais encore une fois cela est valable si les applications sont Kerberisées.

II) Installation :

Sous Debian :

# apt-get install krb5-kdc krb5-admin-server krb5-user

L’installation vous demandera d’entrer la clé maitre (master key) du KDC.

Et si vous souhaitez faire une installation propre, ajoutez les les champs SRV suivants dans la zone correspondante de votre DNS :

_kerberos._udp IN SRV 01 00 88 kerberos.momonux.org.
_kerberos._tcp IN SRV 01 00 88 kerberos.momonux.org.
_kpasswd._udp IN SRV 01 00 464 kerberos.momonux.org.
_kerberos-adm._tcp IN SRV 01 00 749 kerberos.momonux.org.
_kerberos IN TXT MOMONUX.ORG.

Rien de spécifique à connaître pour la configuration du KDC en lui même. Éditez le fichier /etc/krb5kdc/kdc.conf et adaptez le nom du Realm (zone kerberos) à votre Realm. Le Realm correspond au domaine DNS en majuscule. Sachez qu’un KDC peut être serveur de plusieurs Realms.
Adaptez ce fichier en remplaçant MOMONUX.ORG par votre Realm.

[kdcdefaults]
 kdc_ports = 750,88

[realms]
MOMONUX.ORG = {
 database_name = /var/lib/krb5kdc/principal
 admin_keytab = FILE:/etc/krb5kdc/kadm5.keytab
 al_file = /etc/krb5kdc/kadm5.acl
 key_stash_file = /etc/krb5kdc/stash
 kdc_ports = 750,88
 max_life = 10h 0m 0s
 max_renewable_life = 7d 0h 0m 0s
 master_key_type = des3-hmac-sha1
 supported_enctypes = des3-hmac-sha1:normal des-cbc-crc:normal des:normal des:v4 des:norealm des:onlyrealm des:afs3
 default_principal_flags = +preauth
}

Maintenant que le KDC est configuré, on va définir le comportement des clients Kerberos de ce KDC. On va notamment définir le realm par défaut et comment contacter ce realm. Cette manipulation s’effectue sur le KDC et sur les clients de ce même KDC. Pour celà, éditez le fichier /etc/krb5.conf.

[libdefaults]
 default_realm = MOMONUX.ORG
 kdc_timesync = 1
 ccache_type = 4
 forwardable = true
 proxiable = true

[realms]
MOMONUX.ORG = {
 kdc = kerberos.momonux.org
 admin_server = kerberos.momonux.org
 default_domain = momonux.org
}
[domain_realm]
 momonux.org = MOMONUX.ORG
 momonux.org = MOMONUX.ORG

III) Initialisation du KDC :

Dans un premier temps, il faut initialiser la base de données du KDC fraîchement installé :

kdb5_util create -r MOMONUX.ORG -s

Il est temps de démarrer le KDC maintenant :

# krb5kdc

Ensuite, on va ajouter un utilisateur principal nommé foo:

kadmin.local:  add_principal foo@MOMONIX.ORG
WARNING: no policy specified for foo@MOMONIX.ORG; defaulting to no policy
Enter password for principal "foo@MOMONIX.ORG":
Re-enter password for principal "foo@MOMONIX.ORG":
Principal "foo@MOMONIX.ORG" created.

Enfin, on va ajouter un hôte principal. Il faut ajouter chaque hôte du réseau à kerberiser sur le kdc.

kadmin.local:  addprinc host/carl.momonux.org
WARNING: no policy specified for host/carl.momonux.org@MOMONUX.ORG; defaulting to no policy
Enter password for principal "host/carl.momonux.org@MOMONUX.ORG":
Re-enter password for principal "host/carl.momonux.org@MOMONUX.ORG":
Principal "host/carl.momonux.org@MOMONUX.ORG" created.

Testez votre KDC en faisant une demande de ticket à l’aide de la commande kinit :

# kinit julien@MOMONUX.ORG
Password for julien@MOMONUX.ORG:

Affichons la liste des tickets Kerberos à l’aide de klist :

$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: julien@MOMONUX.ORG

Valid starting     Expires            Service principal
10/21/04 18:20:51  10/22/04 04:20:51  krbtgt/MOMONUX.ORG@MOMONUX.ORG
renew until 10/22/04 18:20:49

Notez que la commande kadmin permet d’effectuer cette commande sur une autre machine que le KDC

Pour finir sur la configuration du KDC, il se pourrait que vous auriez besoin d’avoir recours à un serveur esclave, particulièrement dans les environnements de production. L’implémentation Kerberos du MIT gère très bien celà au moyen de la commande kpropd -S.

IV) Mise en pratique : authentification de clients GNU/Linux :

Il vous faudra impérativement avoir configuré le client kerberos comme décrit plus haut. Si c’est le cas vous pouvez procéder à l’installation du module PAM approprié. Sous Debian le paquet porte le nom de libpam-krb5.

Configuration de PAM sous Debian :

Effectuez le remplaçement suivant dans le fichier /etc/pam.d/common-password :

password   required   pam_unix.so nullok obscure min=4 max=8 md5

Devient :

password        sufficient      pam_unix.so md5
password   required   pam_krb5.so try_first_pass

Configuration de PAM sous Gentoo/Mandrake/Fedora :
Effectuez le remplaçement suivant au fichier /etc/pam.d/system-auth :

auth       required     /lib/security/pam_env.so
auth    sufficient      pam_ldap.so try_first_pass
auth       sufficient   /lib/security/pam_unix.so likeauth nullok try_first_pass
auth       required     /lib/security/pam_deny.so

account optional        /lib/security/pam_ldap.so try_first_pass
account    required     /lib/security/pam_unix.so try_first_pass

password   required     /lib/security/pam_cracklib.so retry=3
password   sufficient   /lib/security/pam_unix.so nullok md5 shadow try_authtok try_first_pass
password   required     /lib/security/pam_deny.so

session    required     /lib/security/pam_limits.so
session sufficient      /lib/security/pam_ldap.so try_first_pass
session    required     /lib/security/pam_unix.so try_first_pass

Devient :

auth       required     /lib/security/pam_env.so
auth       required   /lib/security/pam_unix.so likeauth nullok
auth       required     /lib/security/pam_deny.so

account    required     /lib/security/pam_unix.so

password   required     /lib/security/pam_cracklib.so retry=3
password   sufficient	/lib/security/pam_krb5.so
password   required   /lib/security/pam_unix.so nullok md5 shadow try_authtok try_first_pass
password   required     /lib/security/pam_deny.so

session    required     /lib/security/pam_limits.so
session    required     /lib/security/pam_unix.so

Maintenant authentifiez vous depuis la machine sur cette machine et validez avec les journaux que l’authentification fonctionne.

V) Conclusion :

Kerberos est un mécanisme d’authentification très puissant. Couplé à LDAP (en plaçant l’attribut userPassword à la valeur {KERBEROS}user@realm), il peut fournir une solide plateforme d’authentification. Cette plateforme complétée par un serveur Samba vous permettra d’avoir un système d’authentification sûr et surtout opérationnel pour des clients UNIX comme des clients Windows.

Categories: GNU/Linux Tags: