Ceci est une ancienne révision du document !
Table des matières
Configuration d'apache-krb
Le serveur apache-krb.maison.mrs
va fournir un service http nécessitant une authentification kerberos. Nous allons donc installer ce qui est nécessaire :
- un système de synchronisation de l'horloge (NTP). Nous ne verrons ici comment faire, ce n'est pas le sujet principal ;
- un serveur apache classique ;
- les composants kerberos nécessaires.
Installation d'apache
Nous installons un Apache « prefork » classique :
apache-krb:~# aptitude install apache2-mpm-prefork --- Enabling site default. Enabling module alias. Enabling module autoindex. Enabling module dir. Enabling module env. Enabling module mime. Enabling module negotiation. Enabling module setenvif. Enabling module status. Enabling module auth_basic. Enabling module deflate. Enabling module authz_default. Enabling module authz_user. Enabling module authz_groupfile. Enabling module authn_file. Enabling module authz_host. ...
Mais il nous manque le module spécifique à l'authentification kerberos : libapache2-mod-auth-kerb
.
apache-krb:~# aptitude install libapache2-mod-auth-kerb ... Les NOUVEAUX paquets suivants vont être installés : bind9-host{a} geoip-database{a} krb5-config{a} libapache2-mod-auth-kerb libbind9-50{a} libdns53{a} libgeoip1{a} libisc50{a} libisccc50{a} libisccfg50{a} liblwres50{a} 0 paquets mis à jour, 11 nouvellement installés, 0 à enlever et 0 non mis à jour. Il est nécessaire de télécharger 1 805ko d'archives. Après dépaquetage, 4 579ko seront utilisés. Voulez-vous continuer ? [Y/n/?] ... Paramétrage de libapache2-mod-auth-kerb (5.3-5+b1) ... Enabling module auth_kerb. Run '/etc/init.d/apache2 restart' to activate new configuration! ...
Notez que krb5-config
a été installé par dépendance. Des questions sont posées lors de sa configuration, mais peu importe, nous allons récupérer le krb5.conf
déjà utilisé sur kerberos.maison.mrs
et sur le poste de travail.
Le module auth_kerb
a été activé, mais il faut bien sûr indiquer où et comment apache doit s'en servir.
Configuration de kerberos
sur kerberos.maison.mrs
Nous devons créer un « principal » pour notre service HTTP, de façon presque identique à celle utilisée pour créer des principaux d'utilisateurs. Ici, le mot de passe peut être créé de façon aléatoire car seuls les composants kerberos concernés devront le connaitre. Nous pouvons réaliser l'opération depuis n'importe quel hôte sur lequel krb5-user
a été installé :
root@pchris:/home/chris# kadmin -p chris/admin Authenticating as principal chris/admin with password. Password for chris/admin@MAISON.MRS: kadmin: addprinc -clearpolicy -randkey HTTP/apache-krb.maison.mrs Principal "HTTP/apache-krb.maison.mrs@MAISON.MRS" created. kadmin: list_principals HTTP/apache-krb.maison.mrs@MAISON.MRS K/M@MAISON.MRS chris/admin@MAISON.MRS chris@MAISON.MRS kadmin/admin@MAISON.MRS kadmin/changepw@MAISON.MRS kadmin/history@MAISON.MRS kadmin/kerberos.maison.mrs@MAISON.MRS krbtgt/MAISON.MRS@MAISON.MRS kadmin: quit
Cette opération a permis la création d'une clé secrète qui doit être partagée avec le service http situé sur apache-krb.maison.mrs
C'est grâce à cette clé que l'utilisateur pourra dialoguer en langage kerberos avec le service http. Souvenez-vous de ce que l'on a vu dans le Principe général.
kadmin
va encore une fois nous servir :
kerberos:~# kadmin -p chris/admin Authenticating as principal chris/admin with password. Password for chris/admin@MAISON.MRS: kadmin: ktadd -k krb5-http.keytab HTTP/apache-krb.maison.mrs Entry for principal HTTP/apache-krb.maison.mrs with kvno 3, encryption type AES-256 CTS mode with 96-bit SHA-1 HMAC added to keytab WRFILE:krb5-http.keytab. Entry for principal HTTP/apache-krb.maison.mrs with kvno 3, encryption type ArcFour with HMAC/md5 added to keytab WRFILE:krb5-http.keytab. Entry for principal HTTP/apache-krb.maison.mrs with kvno 3, encryption type Triple DES cbc mode with HMAC/sha1 added to keytab WRFILE:krb5-http.keytab. Entry for principal HTTP/apache-krb.maison.mrs with kvno 3, encryption type DES cbc mode with CRC-32 added to keytab WRFILE:krb5-http.keytab. kadmin: quit
Nous avons créé dans le répertoire courant un fichier nommé krb5-http.keytab
qui contient quatre entrées, fonction des divers algorithmes de chiffrement possibles. La commande klist
permet de le vérifier :
kerberos:~# klist -e -k krb5-http.keytab Keytab name: WRFILE:krb5-http.keytab KVNO Principal ---- -------------------------------------------------------------------------- 3 HTTP/apache-krb.maison.mrs@MAISON.MRS (AES-256 CTS mode with 96-bit SHA-1 HMAC) 3 HTTP/apache-krb.maison.mrs@MAISON.MRS (ArcFour with HMAC/md5) 3 HTTP/apache-krb.maison.mrs@MAISON.MRS (Triple DES cbc mode with HMAC/sha1) 3 HTTP/apache-krb.maison.mrs@MAISON.MRS (DES cbc mode with CRC-32)
Il nous faut déménager par un moyen sécurisé ce fichier sur apache-krb.maison.mrs
, par exemple avec ssh :
kerberos:~# scp krb5-http.keytab root@apache-krb.maison.mrs:/etc/apache2/ ... root@apache-krb.maison.mrs's password: krb5-http.keytab 100% 322 0.3KB/s 00:00 kerberos:~# rm krb5-http.keytab
sur apache-krb
Première chose à faire, rendre le « keytab » lisible par www-data
:
apache-krb:/etc/apache2# chown www-data:www-data krb5-http.keytab apache-krb:/etc/apache2# chmod 400 krb5-http.keytab apache-krb:/etc/apache2# ls -l krb5-http.keytab -r-------- 1 www-data www-data 322 févr. 15 10:55 krb5-http.keytab
Configuration d'apache
Nous allons maintenant modifier la configuration du serveur par défaut, pour nécessiter l'authentification kerberos :
apache-krb:/etc/apache2# cat sites-available/default
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
AuthName "Secure Access"
AuthType Kerberos
Krb5Keytab /etc/apache2/krb5-http.keytab
KrbMethodK5Passwd off
KrbSaveCredentials on
require valid-user
AllowOverride None
Order allow,deny
allow from all
</Directory>
...
</VirtualHost>
Pour les diverses options de configuration disponibles pour le module auth_kerb
, je vous invite à visiter la documentation (succincte) disponible sur le site du projet ou de lire le fichier (non moins succinct) /usr/share/doc/libapache2-mod-auth-kerb/README.gz
.
L'option KrbMethodK5Passwd off
fait que si l'utilisateur ne dispose pas déjà de son TGT, les portes du service lui sont irrémédiablement fermées.
Configuration du client
Il n'y a pas grand chose à faire si ce n'est de s'assurer que le navigateur web sait gérer la négociation kerberos. Au moins Firefox
sait le faire, mais sa configuration par défaut ne le permet peut-être pas. Le mieux est de s'en assurer en allant sur l'URI about:config
et en s'assurant que l'on a quelque chose de la forme :
network.negotiate-auth.trusted-uris;https://,http://
Ici, toute demande d'URI faisant référence aux protocoles http et https sera autorisée à effectuer la négociation kerberos.