Protection des données de l'annuaire
Compréhension de la sécurité d’un annuaire
Les annuaires LDAP devenant de plus en plus populaires au sein des entreprises et avec des schémas développés pour contenir tous types d’informations dont pour certaines assez sensibles, il convient donc de les sécuriser.
La sécurité des annuaires concerne non seulement les données sensibles qu’une personne non autorisée pourrait s’approprier, mais aussi la capacité d’une personne à endommager tout ou partie de l’annuaire, ou à le mettre tout simplement hors service ; tout ceci ayant pour but final d’impacter l’activité de l’entreprise.
Ce chapitre sera consacré à la partie sécurisation des données de l’annuaire ; la partie concernant la mise hors service de l’annuaire ayant déjà été abordée lors de la configuration des limites des ressources du service "slapd".
Pour ce faire, OpenLDAP offre la possibilité de définir et de limiter des actions sur des entrées de l’annuaire et les attributs qui la composent. On parle alors de contrôle d’accès à l’annuaire appelé couramment ACL.
Configuration générale des ACL
Le système d’ACL fourni par OpenLDAP est assez simple dans sa syntaxe, car il se résume aux questions suivantes : Qui a accès à quoi et pour quoi faire ?
Et sa syntaxe de configuration est la suivante :
<access directive> ::= access to <what>
[by <who> [<access>] [<control>] ]+
<what> ::= * |
[dn[.<basic-style>]=<regex> | dn.<scope-style>=<DN>]
[filter=<ldapfilter>] [attrs=<attrlist>]
<basic-style> ::= regex | exact
<scope-style> ::= base | one | subtree | children
<attrlist> ::= <attr> [val[.<basic-style>]=<regex>] | <attr> ,
<attrlist>
<attr> ::= <attrname> | entry | children
<who> ::= * | [anonymous | users | self
| dn[.<basic-style>]=<regex> | dn.<scope-style>=<DN>]
[dnattr=<attrname>]
[group[/<objectclass>[/<attrname>][.<basic-style>]]=<regex>]
[peername[.<basic-style>]=<regex>]
[sockname[.<basic-style>]=<regex>]
[domain[.<basic-style>]=<regex>]
[sockurl[.<basic-style>]=<regex>]
[set=<setspec>]
[aci=<attrname>]
<access> ::= [self]{<level>|<priv>}
<level> ::= none | disclose | auth | compare | search | read | write
| manage
<priv> ::= {=|+|-}{m|w|r|s|c|x|d|0}+
<control> ::= [stop | continue | break]
À première vue, la configuration d’une ACL paraît bien compliquée. Les sections suivantes tâcheront de donner une explication pour chacune de ces syntaxes.
1. Les entrées ciblées (à quoi ?)
Le "à quoi" fait référence aux entrées (et/ou aux attributs) auxquelles les ACL vont s’appliquer et sont généralement sélectionnées de trois façons : l’annuaire entier, par DN ou par filtre.
Voici la syntaxe utilisée :
<what> ::= * |
[dn[.<basic-style>]=<regex> | dn.<scope-style>=<DN>]
[filter=<ldapfilter>] [attrs=<attrlist>]
<basic-style> ::= regex | exact
<scope-style> ::= base...
Configuration des ACL dans l’annuaire de démonstration
La configuration des ACL dans un annuaire OpenLDAP peut s’effectuer également de deux façons : par le fichier "slapd.conf" ou via la méthode en ligne (OLC) en modifiant à chaud le DIT de configuration (cn=config) avec l’utilisation de la commande LDAP modify ou avec l’aide d’un navigateur LDAP.
La méthode en ligne (OLC) sera privilégiée pour le déploiement des ACL en modifiant ou en ajoutant l’attribut olcAccess provenant de la classe d’objet olcDatabaseConfig chargée par le schéma de base de l’application.
Cet attribut devra se positionner dans le DIT de configuration (cn=config) et plus précisément dans les entrées de l’annuaire de type olcDatabaseConfig.
L’annuaire LDAP créé et configuré précédemment possédera les différents DIT listés dans la figure 11-1. Il s’y trouvera les deux DIT par défaut que sont le "frontend" et le "config", et le DIT créé pour y stocker les données propres à l’exploitation des utilisateurs de l’entreprise.
ldapsearch -h localhost -D cn=config -W -b "cn=config" -s one
objectclass=olcDatabaseConfig objectClass -LL
Enter LDAP Password:
dn: olcDatabase={-1}frontend,cn=config
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
dn: olcDatabase={1}bdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcBdbConfig
Figure 11-1 : Liste des DIT de l’annuaire de démonstration
1. Configuration des ACL standard
À cet instant, aucune ACL n’a été placée dans ces différents DIT, cela signifie donc que l’ACL de base globale à savoir "lecture pour tout le monde sur la totalité de l’annuaire" (to * by * read) est appliquée, et ceci peut (et doit) être changé.
1. |
Il faut donc commencer par interdire l’accès à tous les utilisateurs de visualiser le DIT de configuration (cn=config) en appliquant l’ACL suivante au niveau de l’entrée... |