Authentification Windows dans Nagios

Mercredi, 31 Janvier 2007 00:00
Imprimer
Note des utilisateurs: / 2
MauvaisTrès bien 

On peut utiliser l'annuaire de Windows (Active Directory) pour authentifier les utilisateurs de l'interface web de Nagios — qui en sont aussi les contacts — depuis l'hôte Linux hébergeant Nagios. Pour cela deux méthodes sont possibles : LDAP et Kerberos.

A noter que les méthodes d'authentification que je décris ci-après sont valables pour n'importe quelle application web sous Apache. D'autre part, les mots de passe transitent en clair sur le réseau. Tant qu'on reste sur le LAN...

Mon environnement pour cette configuration est une Fedora Core 5, Apache 2.2.2 et Nagios 2.7, Active Directory sous Windows 2000.

 

 

Supposons que :

LDAP

D'après mes tests, cette méthode est trop lente sur un Active Directory bien rempli. Toutefois, la configuration est la suivante.

Créer un utilisateur dans Active Directory, qui sera dédié à l'accès LDAP depuis Apache. Appelons-le ton_user, et plaçons-le dans l'OU ton_OU.

Dans la configuration générale d'Apache (httpd.conf), ajouter :

LoadModule authz_ldap_module modules/mod_authz_ldap.so

Dans le répertoire à protéger (pour Nagios, /usr/local/nagios/sbin où sont stockés les scripts CGI), créer un fichier .htaccess contenant :

AuthType Basic
# What the users will see as a "title" of the login prompt:
AuthName "Domain Credentials Required"
# use plain LDAP authentication:
AuthzLDAPMethod ldap
# FQDN resolvable hostname (or IP) of the Windows
# AD domain controller:
AuthzLDAPServer ton_DC.ton_domaine.com
# Distinguished Name (DN) of the user that mod_authz_ldap should
# bind to the LDAP server as when searching for the domain user
# provided by the web client (Active Directory does not allow
# anonymous binds). Note, the cn attribute corresponds to the
# "Display Name" field of a user's account in the Active Directory
# Users and Computers tool, not their login username:
AuthzLDAPBindDN "cn=ton_user,OU=ton_OU,dc=ton_domaine,dc=com"
# the BindDN user's password:
AuthzLDAPBindPassword "SECRET"
# LDAP Attribute where the user's domain login username is stored in:
AuthzLDAPUserKey sAMAccountName
# Base DN to begin searching for users from in the LDAP:
AuthzLDAPUserBase "dc=ton_domaine,dc=com"
# Search in sub-containers below the UserBase DN if
# necessary (most likely):
AuthzLDAPUserScope subtree
# Require the username and password provided to be a valid
# user in the AD:
require valid-user

En rouge, les champs à remplacer pour ta configuration.

Note : un seul DC est référencé ici, c'est un peu léger pour la sûreté de fonctionnement.

Kerberos

La référence ayant servi de base à cet article est dans le support Microsoft, à l'article "Providing Active Directory authentication via Kerberos protocol in Apache".

Dans la configuration générale d'Apache (httpd.conf), ajouter :

LoadModule auth_kerb_module modules/mod_auth_kerb.so

Dans la répertoire de la configuration d'Apache (généralement /etc/httpd/conf), créer un fichier "keytab" (cette étape est-elle indispensable ? J'ai l'impression que le keytab ne sert à rien si l'option KrbVerifyKDC est à off) :

HTTP/ton_hote_nagios.ton_domaine.com@TON_DOMAINE.COM 

Dans le fichier de configuration de Kerberos /etc/krb5.conf :

[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log

[libdefaults]
ticket_lifetime = 24000
default_realm = TON_DOMAINE.COM
dns_lookup_realm = false
dns_lookup_kdc = false

[realms]
TON_DOMAINE.COM = {
kdc = ton_dc.ton_domaine.com:88
kdc = ton_autre_dc.ton_domaine.com:88
}


[domain_realm]
.ton_domaine.com = TON_DOMAINE.COM
ton_domaine.com = TON_DOMAINE.COM


[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}

En rouge, les valeurs à remplacer par celles de ton environnement.

Tu peux vérifier le bon fonctionnement de l'authentification Kerberos en passant quelques commandes :

> kinit toi@TON_DOMAINE.COM 

Kerberos doit te demander ton mot de passe. Vérifie ensuite que le ticket Kerberos t'a bien été alloué :

> klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: toi@TON_DOMAINE.COM

Valid starting Expires Service principal
01/31/07 15:46:41 01/31/07 22:26:41 krbtgt/TON_DOMAINE.COM@TON_DOMAINE.COM


Kerberos 4 ticket cache: /tmp/tkt0
klist: You have no tickets cached

Enfin, fais le ménage en détruisant le ticket qui vient de t'être alloué :

> kdestroy

Dans le répertoire à protéger (pour Nagios, /usr/local/nagios/sbin où sont stockés les scripts CGI), créer un fichier .htaccess :

AuthName "Kerberos"
AuthType Kerberos
Krb5Keytab /etc/httpd/conf/keytab
KrbAuthRealm TON_DOMAINE.COM
KrbMethodNegotiate off
KrbSaveCredentials off
KrbVerifyKDC off
Require valid-user

Particularité de Kerberos : Apache va récupérer le nom de l'utilisateur sous la forme user@REALM (toi@TON_DOMAINE.COM, le nom de domaine étant en majuscules). Cela implique de définir les noms des contacts sous cette forme dans la configuration de Nagios.

Pour que tout cela soit pris en compte, relance Apache et Nagios.

Authentification transparente

Jean-Baptiste Marin propose une méthode d'authentification Kerberos transparente (sans resaisie du login / mot de passe). Voir le forum pour les détails.

 

Mis à jour le Jeudi, 20 Mars 2008 16:14