Apparence
Uubu.fr

Les systèmes Linux, l’open source, les réseaux, l’interopérabilité, etc.
« Il vaut mieux viser la perfection et la manquer que viser l’imperfection et l’atteindre. » (Bertrand Arthur William RUSSEL)
19 octobre 2013

htmlpdflatexmanmd




OpenLDAP - Sécurité

OpenLDAP - Sécurité

Considérations de sécurité

Écoute sélective: Par défaut, slapd écoute sur toutes les adresses IPv4 et IPv6. Pour spécifier les ip sur lesquelles slapd écoute: slapd -h ldap://127.0.0.1
Firewall IP: Les capacités de firewalling IP du système peuvent être utilisées pour restreindre l'accès. Généralement, slapd écoute sur le port 389/tcp pour ldap:// et le port 636/tcp pour ldaps://. slapd peut être configuré pour écouter sur d'autres ports.
TCP Wrappers: TCP wrappers fournis un système de contrôle d'accès basé sur des règles pour contrôler les accès TCP/IP sur le serveur. Par exemple: slapd: 10.0.0.0/255.0.0.0 127.0.0.1: ALLOW, slapd ALL: DENY
Protection de confidentialité et d'intégrité de données: TLS peut être utilisé pour fournir une protection de confidentialité et d'intégrité de données. OpenLDAP supporte la négociation de TLS (SSL) via StartTLS et ldaps://. Des mécanismes SASL (Simple Authentication and Security Layer) comme DIGEST-MD5 et GSSAPI sont également disponible.
Facteurs de sécurité forte: Le serveur utilise SSF pour indiquer la force du mécanisme. Un SSF de 0 spécifie aucune protection, à 1 des protections d'intégrité sont en place. un SSF › 1 indiquent la longueur de clé de cryptage. par exemple: DES fait 56, 3DES fait 112, AES fait 128, 192 ou 256.

        'security' contrôle les opérations de restriction quand les protections appropriées ne sont pas en place. Exemple:
        security ssf=1 update_ssf=112
        requière une protection d'intégrité pour toutes les opérations et une protection 3DES ou équivalent, pour les opérations de mise à jour (add, delete, modify, etc.)

Méthodes d'authentification

   La méthode simple a 3 modes d'opération: anonyme, non-authentifié, authentifié par user/password.

  L'accès anonyme est requis en ne fournissant pas de nom et de mot de passe pour une simple opération. l'accès non authentifié est requis en fournissant un nom, mais pas de mot de passe. L'accès authentifié requière un nom valide et un mot de passe.

  le mécanisme anonyme est activé par défaut, il peut être désactivé par "disallow bind_anon".

  note: désactiver le mécanisme anonyme n'empêche pas les accès anonymes à l'annuaire. Pour exiger une authentification pour accéder à l'annuaire, utiliser "require authc"

   L'accès non-authentifié est désactivé par défaut et peut être activé par "allow bind_anon_cred"

  L'accès authentifié est activé par défaut. Cependant les mots de passe sont stockés en clair, il est recommandé de l'utiliser uniquement avec des session chiffrées. Il est recommandé que toutes les authentifications non protégées soient désactivées en utilisant par ex: security simple_bind=56 qui exige les simple_bind d'utiliser le cryptage DES ou meilleur.

  Le mécanisme d'authentification user/password peut être complètement désactivé en utilisant "disallow bind_simple".

Stockage des mots de passe

   Les mots de passe LDAP sont normalement stockés dans l'attribut userPassword. la RFC4519 spécifie que les mots de passe ne sont pas stockés sous forme chiffrée. Cela permet d'utiliser une grande quantité de mécanismes basés sur les mots de passe, comme DIGEST-MD5.

  Cependant, il peut être préférable de stocker un hash des mots de passe. slapd supporte plusieurs schémas de stockage.

  L'attribut userPassword peut avoir une ou plusieurs valeurs, et il est possible pour chaque valeur d'être stockées sous une forme différente. durant l'authentification, slapd va chercher un des mots de passe qui correspondrai. Le schéma de stockage est stocké comme préfixe dans la valeur, donc un hash utilisant SHA1 ressemblera à:

  userPassword: {SSHA}DkMTwBl+a/3DQTxCYEApdUtNXGgdUac3

Schéma de stockage de mot de passe SSHA

ces valeurs sont représentée sous la forme:
userPassword: {SSHA}DkMTwBl+a/3DQTxCYEApdUtNXGgdUac3
schéma de stockage de mot de passe CRYPT
Ce schéma utilise la fonction système crypt(3). Il produit le hash traditionnel à 13 caractères, mais peut également générer le hash MD5 34 octets de glibc2.
userPassword: {CRYPT}aUihad99hmev6
userPassword: {CRYPT}$1$czBJdDqS$TmkzUAb836oMxg/BmIwN.1

Schéma de stockage de mot de passe MD5

Ce schéma prend simplement le hash md5 et le stocke sous la forme base64:
userPassword: {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==
schéma de stokage de mot de passe SMD5
Il améliore le schéma MD5
userPassword: {SMD5}4QWGWZpj9GCmfuqEvm8HtZhZS6E=
schéma de stockage de mot de passe SHA
SHA est plus sécurisé que MD5
userPassword: {SHA}5en6G6MezRroT3XKqkdPOmY/BfQ=

Schéma de stockage de mot de passe SASL

   Ce n’est pas vraiment un schéma de stockage de mot de passe. Il utilise l’attribut userPassword pour déléguer la vérification à un autre processus.

Schéma de stockage de mot de passe Kerberos

   Ce n’est pas un schéma de stockage de mot de passe, il utilise la valeur de l’attribut de userPassword pour déléguer la vérification à Kerberos

Authentification Externe

   Depuis OpenLDAP 2.0 slapd a la capacité de déléguer la vérification de mot de passe à un processus séparé. Il utilise la fonction sasl_checkpass(3). Le choix est très large, comme l’option d’utiliser saslauth(8) qui utiliser les fichiers local, kerberos, un serveur IMAP, un autre serveur LDAP ou tout ce qui peut supporter le mécanisme PAM.

  L’authentification externe fonctionne seulement avec les mots de passe en clair. ce système est sélectif, il utilise uniquement les utilisateurs dont l’attribut userPassword est marqué avec "SASL".

exemple:
userPassword: {SASL}username@realm

Configurer slapd pour l'utilisation d'un fournisseur d'authentification

   Quand une entrée a une valeur de mot de passe "{SASL}", OpenLDAP délègue tout le processus de validation à cyrus SASL. Tout la configuration est faite dans les fichiers de configuration de SASL.

  Un fichier nommé /usr/lib/sasl2/slapd.conf gouverne l’utilisation de SASL quand il communique avec slapd.

Simple exemple pour un serveur qui utilise saslauth pour vérifier les mots de passe:
mech_list: plain
pwcheck_method: saslauthd
saslauthd_path: /var/run/sasl2/mux

Configurer saslauth

saslauthd est capable d’utiliser différents services d’authentification, vois saslauthd(8). Exemple de saslauthd.conf qui utilise M$ Active Directory:
ldap_servers: ldap://dc1.example.com/ ldap://dc2.example.com/
ldap_search_base: cn=Users,DC=ad,DC=example,DC=com
ldap_filter: (userPrincipalName=%u)
ldap_bind_dn: cn=saslauthd,cn=Users,DC=ad,DC=example,DC=com
ldap_password: secret
dans ce cas, saslauthd est lancé avec le mécanisme d’authentification ldap et est définis pour combiner SASL avec le login:
saslauthd -a ldap -r
^
26 septembre 2013

htmlpdflatexmanmd




OpenLDAP - Limites

OpenLDAP - Limites

configuration des limites de slapd

   Il est généralement préférable de limiter les ressources du serveur pour qu'il soit accessible à tous les clients. OpenLDAP fournit 2 type de limites : un limite de taille, qui peut être restreinte par le nombre d'entrées qu'un client peut récupérer en une seule opération, et une limite de temps, qui restreint le temps qu'une opération peut se poursuivre.

Limites Soft et Hard

   L'administrateur du serveur peut limiter les limites hard et soft. Les limites soft sont les valeurs de limite par défaut, les limites hard sont les limites qui ne peuvent pas être dépassée par les utilisateurs LDAP.

  Les clients LDAP peuvent spécifier leur propre limites de taille et de temps pour les opérations de recherche.

  Si le client spécifie une limite alors la plus faible des valeurs entre celle-ci et la hard limit sera choisie. Si le client ne spécifie pas de limite, la soft limit s'applique.

Le rootdn n'est pas sujet à ces limites.
sizelimit {‹integer›|unlimited} # défaut 500
timelimit {‹integer›|unlimited} # défaut 3600
Une forme étendue permet aux limites soft et hard d'être séparés.
sizelimit size[.{soft|hard|unchecked}]=‹integer› [...]
timelimit time.{soft=‹integer›} [...]
exemple
sizelimit size.soft=10 size.hard=75

   Le mot clé unchecked spécifie une limite du nombre d'entrées que le serveur va examiner une fois qu'il a crée un lot de résultats candidat en utilisant les indices. Ça peut être très important dans les gros annuaires, quand une recherche qui ne peut pas être satisfaite depuis un index peut nécessiter d'examiner des millions d'entrées.

Limites par base

   Chaque base de donnée peut avoir ses propres limites. La syntaxe est plus flexible, et permet différentes limites à appliquer à différentes entités. le terme entité est utilisé pour indiquer l'ID de la personne ou du processus qui a initié l'opération LDAP. Dans slapd.conf le mot clé est limits. En utilisant le backend slapd config, l'attribut correspondant est olcLimits. La syntaxe est la même dans les 2 cas.

limits ‹who› ‹limit› [‹limit› [ ... ]]

   la clause limits peut être spécifiée plusieurs fois. Le serveur examine chaque clause jusqu'à ce qu'il en trouve une qui corresponde à l'ID qui a requis l'opération. Si aucune correspondante n'est trouvée, les limites globales sont utilisées.

Spécifier à qui s'applique les limites

La partie ‹who› peut prendre les valeurs suivante:
*____________________________All, including anonymous and authenticated users
anonymous____________________Anonymous (non-authenticated) users
users________________________Authenticated users
self_________________________User associated with target entry
dn[.‹basic-style›]=‹regex›___Users matching a regular expression
dn.‹scope-style›=‹DN›________Users within scope of a DN
group[/oc[/at]]=‹pattern›____Members of a group

Spécifier des limites de temps

time.soft=‹integer›
où integer est la durée en seconde.
si soft ou hard ne sont pas spécifiés, la valeur est utilisée pour les 2:
limits anonymous time=27
la valeur unlimited peut être utilisé pour supprimer la limite de temps hard :
limits dn.exact="cn=anyuser,dc=example,dc=org" time.hard=unlimited
spécifier des tailles limites.
size[.soft|hard|unchecked]=integer›
où integer est le nombre d'entrée maximum que slapd va retourner.

Limites de taille et résultats paginés

   Si le client LDAP ajoute le pagedResultsControl pour les opérations de recherche, la limite de taille hard est utilisée par défaut, parce que la requête pour une taille de page spécifique est considérée comme une requête explicite pour une limitation sur un nombre d'entrée à retourner. Cependant, la taille limite s'applique au compteur total des entrées retournées dans la recherche, et pas dans une simple page.

size.pr={‹integer›|noEstimate|unlimited}

integer est la taille de page maximum si aucune taille implicite n'est donnée. noEstimate n'a pas d'effet dans l'implémentation courante vu que le serveur ne retourne pas une estimations de taille de résultat. unlimited indique qu'aucune limite n'est appliquée à la taille de page maximum.
size.prtotal contrôle le nombre total d'entrées qui peuvent être retournés par une recherche paginée. Par défaut la limite est la même que la limite size.hard.
size.prtotal={‹integer›|unlimited|disabled}
unlimited supprime la limite sur le nombre d'entrée qui peuvent être retournés par une recherche paginée. disabled peut être utilisé pour désactiver sélectivement les recherche de résultat paginés.

Exemples

cet exemple applique des limites de temps et de taille pour toutes les recherche par les utilisateurs, excepté rootdn.
sizelimit 50
timelimit 10
Limites hard et soft global: Il est parfois utile de limiter la taille des résultats mais de permettre aux clients de demander une limite plus élevée si nécessaire. Cela peut être fait en définissant des limites soft et hard séparés:
sizelimit size.soft=5 size.hard=100
Pour se prémunir des clients qui font des recherches non-indexées inefficaces, ajouter la limite unchecked:
sizelimit size.soft=5 size.hard=100 size.unchecked=100
Donner des limites plus grandes pour des utilisateurs spécifiques.
limits dn.exact="cn=anyuser,dc=example,dc=org" size=100000
limits dn.exact="cn=personnel,dc=example,dc=org" size=100000
limits dn.exact="cn=dirsync,dc=example,dc=org" size=100000
Il est généralement mieux d'éviter de mentionner des utilisateurs spécifiques dans la configuration serveur. Une meilleur manière est de donner des limites supérieurs à un groupe:
limits group/groupOfNames/member="cn=bigwigs,dc=example,dc=org" size=100000
Limiter qui peut faire des recherche paginées
limits group/groupOfNames/member="cn=dirsync,dc=example,dc=org" size.prtotal=unlimited
limits users size.soft=5 size.hard=100 size.prtotal=disabled
limits anonymous size.soft=2 size.hard=5 size.prtotal=disabled
^
26 septembre 2013

htmlpdflatexmanmd




slapd.conf

slapd.conf

Fichier de configuration de slapd (ancien format)

   Le fichier de configuration (slapd.conf) consiste de 3 types d'information de configuration: global, backend et database. Les informations globales sont spécifiées en premier, suivis par les informations associées avec un type de backend particulier, puis les informations associées avec un type particulier de base. Les directives globales peuvent être écrasées par des directives de base ou de backend, et les directives backend peuvent être écrasées par les directives de base de données.

  Les lignes blanches et les lignes de commentaire commençant par un # et sont ignorées. Si une ligne commence par un espace blanc, il est considéré comme la suite de la ligne précédente (même si la précédente ligne est un commentaire).

Format général


# Directives de configuration globale:
‹global config directives›
    
# backend definition
backend ‹typeA›
‹backend-specific directives›
    
# first database definition & config directives
database ‹typeA›
‹database-specific directives›
    
# second database definition & config directives
database ‹typeB›
‹database-specific directives›
    
# second database definition & config directives
database ‹typeA›
‹database-specific directives›
    
# subsequent backend & database definitions & config directives
...

Directives Global

   Les directives décrites dans cette section s'appliquent à tous les backend et bases.

access to ‹what› [ by ‹who› [‹accesslevel›][‹control›]]+ Cette directive donne accès spécifié par accesslevel à un set d'entrée et/ou d'attributs spécifiés par what, par un ou plusieurs utilisateurs spécifiés par who. note: si aucune directive access n'est spécifié, la politique est access to * by * read.
attributetype ‹rfc4512 Attribute Type Description› cette directive définit un type d'attribut.
idletimeout ‹integer› Spécifie le nombre de secondes à attendre avant de forcer la fermeture de la connexion d'un client. à 0, désactive la fonction.
include ‹filename› Spécifie une fichier à lire, contenant d'autres informations de configuration. Généralement utilisé pour inclure les spécification de schéma.
loglevel ‹integer› Cette directive spécifie le niveau de log (actuellement placé dans syslogd LOG_LOCAL4). Le loglevel peut être spécifié sous forme d'entier ou par mot clé.

level_keyword________Description
-1____any____________enable all debugging
0____________________no debugging
1_____(0x1 trace)____trace function calls
2_____(0x2 packets)__debug packet handling
4_____(0x4 args)_____heavy trace debugging
8_____(0x8 conns)____connection management
16____(0x10 BER)_____print out packets sent and received
32____(0x20 filter)__search filter processing
64____(0x40 config)__configuration processing
128___(0x80 ACL)_____access control list processing
256___(0x100 stats)__stats log connections/operations/results
512___(0x200 stats2)_stats log entries sent
1024__(0x400 shell)__print communication with shell backends
2048__(0x800 parse)__print entry parsing debugging
16384_(0x4000 sync)__syncrepl consumer processing
32____(0x8000 none)___only messages that get logged whatever log level is set

on peut additionner les valeurs:
loglevel 129
loglevel 0x81
loglevel 128 1
sont équivalent:
loglevel 0x80 0x1
et
loglevel acl trace

objectclass ‹rfc4512 Object Class Description› Cette directive définit une classe objet
referral ‹URI› Cette directive spécifie le référant quand slapd ne peut trouver une base locale pour manipuler les requêtes.
sizelimit ‹integer› Cette directive spécifie le nombre maximum d'entrée à retourner pour une opération de recherche. défaut: sizelimit 500
timelimit ‹integer› Cette directive spécifie le nombre maximum de seconde que slapd va passer à répondre à une requete. Au delà, il envoie un exceeded timelimit. defaut: timelimit 3600

Directives Backend

   Les directives dans cette section s'appliquent uniquement au backend dans lequel elles sont définies. Elles sont supportées par tous les types de backend. Les directives d'un backend s'appliquent à toutes les instances de base du même type.

backend ‹type› Cette directive marque le début d'une déclaration backend. ‹type› peut être un des types supportés:

Types___Description
bdb_____Berkeley DB transactional backend
dnssrv__DNS SRV backend
hdb_____Hierarchical variant of bdb backend
ldap____Lightweight Directory Access Protocol (Proxy) backend
meta____Meta Directory backend
monitor_Monitor backend
passwd__Provides read-only access to passwd(5)
perl____Perl Programmable backend
shell___Shell (extern program) backend
sql_____SQL Programmable backend

Directives générales de bases de données

   Les directives dans cette section s'appliquent uniquement à la base dans laquelle elles sont définies

database ‹type› Cette directive marque le début d'une déclaration d'instance de base. ‹type› doit être un des type de backend supporté.
limits ‹who›‹limit›[‹limit›[...]] spécifie les limites de temps et de taille sur qui initie une opération
readonly on|off Cette directive place la base en lecture seule
rootdn ‹DN› Cette directive spécifie le DN qui n'est pas sujet aux restriction de limites administratives et de contrôle d'accès pour les opérations sur cette base. le DN doit référer à une entrée dans l'annuaire. Le DN peut référer à une identité SASL. (ex: rootdn "cn=Manager,dc=example,dc=com", avec sasl: rootdn "uid=root,cn=example.com,cn=digest-md5,cn=auth")
rootpwd ‹password› Cette directive spécifie le mot de passe pour le rootdn. Il est possible d'utiliser slappasswd -s pour générer un hash.
suffix ‹dn suffix› Cette directive spécifie le suffixe DN des requêtes qui seront passé à cette base. Plusieurs lignes peuvent être spécifiées, et au moins une est requise pour chaque définition de base.(ex: suffix "dc=example,dc=com" # les requêtes avec un DN se terminant avec "dc=Example,dc=com" seront passées à ce backend)
syncrepl
syncrepl rid=‹replica ID›
provider=ldap[s] ://‹hostname›[:port]
type=refreshOnly
[interval=dd:hh:mm:ss]
[retry=[‹retry interval› ‹# of retries›]+]
searchbase=‹base DN›
[filter=‹filter str›]
[scope=sub|one|base]
[attrs=‹attr list›]
[attrsonly]
[sizelimit=‹limit›]
[timelimit=‹limit›]
schemachecking=on
bindmethod=simple
[binddn=‹DN›]
[saslmech=‹mech›]
[authcid=‹identity›]
[authzid=‹identity›]
[credentials=‹passwd›]
[realm=‹realm›]
[secprops=‹properties›]
starttls=yes
[tls_cert=‹file›]
[tls_key=‹file›]
[tls_cacert=‹file›]
[tls_cacertdir=‹path›]
[tls_reqcert=never|allow|try|demand]
[tls_ciphersuite=‹ciphers›]
[tls_crlcheck=none|peer|all]
[logbase=‹base DN›]
[logfilter=‹filter str›]
[syncdata=default|accesslog|changelog] Cette directive spécifie la base courante comme réplique du contenu d'un master en utilisant le moteur de réplication syncrepl.

provider indique le master. spécifie un schéma, un hôte et un port
rid est utilisé pour l'identification de la directive syncrepl courante dans le serveur de réplication.
searchbase n'a pas de valeur par défaut et doit toujours être spécifié.
scope est à sub par défaut
filter est à (objectclass=*) par défaut
attrs à "*,+" par défaut pour répliquer tous les utilisateurs et tous les attributs optionnels
attrsonly est désactivé par défaut
sizelimit est à unlimited par défaut
timelimit est à unlimited par défaut

   Le protocole de synchronisation de contenu LDAP à 2 types d'opérations: refreshOnly et refreshResultEntry. Avec RefreshOnly, la synchronisation est périodique. l'interval est spécifié par le paramètre interval. Par défaut il est à 1 jour. Avec refreshAndPersist, la synchronisation est persistante.

   Si une erreur se produit durant la réplication, le réplicateur tente de se reconnecter en accord avec le paramètre retry, qui est une liste de paire de paramètres ‹retry interval› et ‹# of retries›. Par exemple, retry "60 10 300 3" tente de se reconnecter toutes les 60 secondes, 10 fois, puis retente toutes les 300 secondes, 3 fois, avant de stopper la tentative de reconnexion.

   La vérification de schéma peut être renforcée avec le paramètre schemachecking. Activé, toute entrée répliquée sera vérifié pour ce schéma avant de le stocker. Le paramètre binddn donne le DN à lier pour la recherche syncrepl. Il doit être un DN qui a les droits d'accès en lecture.

   bindmethod est simple ou sasl, en fonction si l'authentification par mot de passe est simple pour sasl. L'authentification simple ne devrait pas être utilisé a moins que l'intégrité des données des protections de confidentialité soient en place (par exemple: TLS ou IPsec) L'authentification simple requière les paramètres binddn et credentials. L'authentification SASL requière la spécification d'un mécanisme utilisant le paramètre saslmech. authcid et credential peuvent être spécifiés pour l'identité d'authentification et le credential. authzid peut être utilisé pour spécifier l'identité d'autorisation.

   le paramètre realm spécifie un domaine. le paramètre secprops spécifie les propriétés de sécurité Cyrus SASL.

  starttls spécifie l'utilisation de TLS. Si l'argument critical est spécifié, la session sera abordée si la requête StartTLS échoue. Sinon la session SyncRepl continu sans TLS.

   Au lieu de répliquer toutes les entrées, le réplicateur peut chercher les logs de modification de données. Ce mode d'opération s'appel delta syncrepl. En plus des paramètres ci-dessus, les paramètres logbase et logfilter doivent être spécifiés pour les logs à utiliser. Le paramètre syncdata doit être soit à "accesslog" si le log est conforme au format slapo-accesslog ou "changelog". Si le paramètre syncdata est omis ou à "default", les paramètres de log seront ignorés. La réplication syncrepl est supportées par bdb et hdb.

updateref ‹URL› Cette directive est seulement applicable dans un slave. Il spécifie l'URL à retourner aux clients qui envoient des requêtes de mise à jours sur la réplique. Peut être spécifié plusieurs fois.
directives de base BDB et HDB Ces directives s'appliquent uniquement aux bases BDB et HDB.
directory ‹directory› Cette directive spécifie le dossier où les fichiers contenant la base et indices associés sont stockés.

Exemple de fichier de configuration

L'exemple suivant définit 2 bases pour manipuler différentes parties d'un arbre x500. Les 2 bases sont des instances BDB.
# example config file - global configuration section
include /usr/local/etc/schema/core.schema # inclue un fichier de définition de schéma
referral ldap ://root.openldap.org # les requêtes non local sur une des bases définies vont référer au server LDAP à l'hôte root.openldap.org
access to    *    by    *    read # Contrôle d'accès global.
    
# BDB definition for the example.com
database bdb
suffix "dc=example,dc=com" # suffix DN pour cette base
directory /usr/local/var/openldap-data # dossier où se trouve les fichiers de cette base.
rootdn "cn=Manager,dc=example,dc=com" # rootdn pour cette base
rootpw secret # mdp du rootdn
# indexed attribute definitions
index uid pres,eq # indique les indices pour maintenir divers attributs
index cn,sn,uid pres,eq,approx,sub
index objectClass eq
# database access control definitions
access to attrs=userPassword # Spécifier le controle d'accès pour les entrées dans cette base.
by self write
by anonymous auth
by dn.base="cn=Admin,dc=example,dc=com" write
by    *    none
access to    *
by self write
by dn.base="cn=Admin,dc=example,dc=com" write
by    *    read
    
# BDB definition for example.net
database bdb
suffix "dc=example,dc=net"
directory /usr/local/var/openldap-data-net
rootdn "cn=Manager,dc=example,dc=com"
index objectClass eq
access to    *    by users read

^
22 septembre 2013

htmlpdflatexmanmd




slapd-access

slapd-access

Configuration d'accès pour slapd

Structure

   access to ‹what› [ by ‹who› [ ‹access› ] [ ‹control› ] ]+

   Donne accès à un jeu d'entrées et/ou attributs (what) par des demandeurs (who). Les ACL sont évaluées dans l'ordre auxquelles elles apparaissent. lors qu'un what match, who est vérifié. puis les clauses access et control sont évaluées

Le champ WHAT

Spécifie l'entité à laquelle cette ACL s'applique. Il peut avoir les formes suivante:
dn[.‹dnstyle›]=‹dnpattern›
filter=‹ldapfilter›
attrs=‹attrlist›[ val[/matchingRule][.‹attrstyle›]=‹attrval›]

avec:
‹dnstyle›={{exact|base(object)}|regex|one(level)|sub(tree)|children}
‹attrlist›={‹attr›|[{!|@}]‹objectClass›}[,‹attrlist›]
‹attrstyle›={{exact|base(object)}|regex|one(level)|sub(tree)|children}

dn=‹dnpattern› Sélectionne les entrées basées sur leur contexte de nommage
‹dnstyle› (optionnel). Base (synonymes de baseObject) ou exact (alias de base) indique l'entrée dont le DN est égal à ‹dnpattern›. one (synonyme de onelevel) indique toutes les entrées immédiatement sous le ‹dnpattern›, sub (synonyme de subtree) indique toutes les entrées dans la sous-arborescence de ‹dnpattern›, children indique toutes les entrées subordonnées à ‹dnpattern› Si dnstyle est un regex, ‹dnpattern› est une expression étendue POSIX et match une représentation du DN.
filter=‹ldapfilter› Sélectionne les entrées basée sur un filtre LDAP
attrs=‹attrlist› sélectionne les attributs auxquels la règle s'applique. Le signe + indique l'accès à l'entrée elle-même. children indique l'accès à l'entrée de l'enfant. Les classes d'objet peuvent être spécifiés également. Les noms préfixés par '@' sont directement traités comme nom de classe d'objet. un nom préfixé par '!' et traité comme classe d'objet mais la règle affecte les attributs non requis ni permis. sans cette liste, assume attrs=@extensibleObject
attrs=‹attrlist›[ val[/matchingRule][.‹attrstyle›]=‹attrval›] Cette forme spécifie un accès à une valeur particulière d'un simple attribut. seul l'attribut est donnée.
dn, filter, attrs sont additifs. les sous-match résultant de regex peuvent être dé-référencés dans ‹who› avec la syntaxe ${v_n_} où _n_ est le numéro de sous-match.

Le champ WHO

Indique à qui la règle s'applique. Plusieurs who peuvent apparaîtrent dans l'acl. Il a la forme:
*    
anonymous
users
self[.‹selfstyle›]
    
dn[.‹dnstyle›[,‹modifier›]]=‹DN›
dnattr=‹attrname›
    
realanonymous
realusers
realself[.‹selfstyle›]
    
realdn[.‹dnstyle›[,‹modifier›]]=‹DN›
realdnattr=‹attrname›
    
group[/‹objectclass›[/‹attrname›]][.‹groupstyle›]=‹group›
peername[.‹peernamestyle›]=‹peername›
sockname[.‹style›]=‹sockname›
domain[.‹domainstyle›[,‹modifier›]]=‹domain›
sockurl[.‹style›]=‹sockurl›
set[.‹setstyle›]=‹pattern›
    
ssf=‹n›
transport_ssf=‹n›
tls_ssf=‹n›
sasl_ssf=‹n›
    
dynacl/‹name›[/‹options›][.‹dynstyle›][=‹pattern›]

avec:
‹style›={exact|regex|expand}
‹selfstyle›={level{‹n›}}
‹dnstyle›={{exact|base(object)}|regex|one(level)|sub(tree)|children|level{‹n›}}
‹groupstyle›={exact|expand}
‹peernamestyle›={‹style›|ip|ipv6|path}
‹domainstyle›={exact|regex|sub(tree)}
‹setstyle›={exact|expand}
‹modifier›={expand}
‹name›=aci ‹pattern›=‹attrname›]

Indique tout le monde
realanonymous Les mots clé préfixés par real agissent comme leur homologue non préfixés. La vérification se produit avec le DN authentification et le DN authorisation
anonymous référence les clients non authentifiés
users Références les clients authentifiés
self Référence l'entrée elle-même (l'entrée demandée et l'entrée qui requête doit correspondre). Accepte le style level{‹n›}, où _n_ indique que l'ancêtre du DN est utilisé dans le match. Une valeur positive indique que le ‹n›-ième ancêtre du DN de l'utilisateur est considéré; une valeur négative indique que le ‹n›-ième ancêtre de la cible doit être considéré. (ex: "by self.level{1} ..." matche quand l'objet "dc=example,dc=com" est accédé par cn=User,dc=example,dc=com") (ex: "by self.level{-1} ..." matche quand le même user accède à "ou=Address Book,cn=User,dc=example,dc=com"
dn=‹DN› L'accès est donnée au DN qui matche.
dnstyle (optionnel) autorise le même choix que pour WHAT. le style regex exploit la substitution de sous-match dans le dn.regex de WHAT en utilisant la forme $‹digit›, de 0 à 9 où 0 match toute la chaîne. ${‹digit›+} pour les sous-matches › 9, ${v‹digit›+} pour la substitution de chaîne de valeur d'attributs. le $ de fin de chaîne doit être spécifié par '$$'

access to dn.regex="^(.+,)?uid=([^,]+),dc=[^,]+,dc=com$" by dn.regex="^uid=$2,dc=[^,]+,dc=com$$" write
access to dn.regex="^(.+,)?uid=([^,]+),dc=example,dc=com$" by dn.exact,expand="uid=$2,dc=example,dc=com" write
access to dn.regex="^(.+,)?uid=([^,]+),dc=([^,]+),dc=com$" by dn.exact,expand="uid=$2,dc=$3,dc=com" write

level{n} est une extension de la forme onelevel, où l'ancêtre n est le pattern. Donc level{1} est équivalent à onelevel et level{0} vaut base
dnattr=‹attrname› L'accès est donné aux requêtes dont le DN est listé dans l'entrée accédée sous l'attribut ‹attrname›
group=‹group› L'accès est donné aux requêtes dont le DN est listé dans l'entrée group dont le DN est donné par ‹group› ‹objectclass› et ‹attrname› donnent la classe objet et l'attribut des membres.(défaut: groupOfNames et member). ‹style› peut être expand qui signifie que ‹group› sera étendu comme remplacement (mais non comme expression régulière), et exact, qui signifie que le match exacte sera utilisé. Pour des groupes statiques, le type d'attribut spécifié doit avoir la syntaxe DN ou NameAndOptionalUID. pour les groupes dynamiques, le type d'attribut doit être un sous-type de labeledURI
peername=‹peername› L'IP de l'hôte contactant (sous la forme IP=‹ip›:‹port› ou IP=[‹ipv6›]:‹port›) ou le nom de l'hôte contactant (PATH=‹path›)
sockname=‹sockname› Le nom du fichier de pipe nommé
domain=‹domain› Le nom d'hôte du contactant
sockurl=‹sockurl› l'URL du contactant, sont comparés avec le pattern pour déterminer l'accès. Le style décrit pour group et regex s'appliquent. Le cas spécial pour ip: ‹peername›=‹ip›[%‹mask›][{‹n›}] où n est le nom du port optionnel (ex: peername.ip=192.168.1.16%255.255.255.240{9009}). (ex: domain.subtree=example.com match www.example.com)
set=‹pattern›
dynacl/‹name›[/‹options›][.‹dynstyle›][=‹pattern›] Indique que la vérification de l'accès est déléguée à une méthode définies indiquée par ‹name›, qui peut être enregistrée en temps réel au moyen de déclarations moduleload. ‹options›, ‹dynstyle› et ‹pattern› sont optionnels et sont passés directement à la routine de parsing enregistrée
dynacl/aci[=‹attrname›] Signifie que le contrôle d'accès est déterminé par les valeurs dans attrnames de l'entrée elle-même. ‹attrname› indique quel type d'attribut maintient l'ACI dans l'entrée. Par défaut, OpenLDAPaci est utilisé
ssf=‹n›
transport_ssf=‹n›
tls_ssf=‹n›
sasl_ssf=‹n› Définissent le SSF minimum pour obtenir l'accès

Le champ ACCESS

Optionnel. Détermine le niveau d'accès ou le privilège que who aura. Il a la forme:
‹access› ::= [[real]self]{‹level›|‹priv›}
où:
‹level› ::= none|disclose|auth|compare|search|read|{write|add|delete}|manage
‹priv› ::= {=|+|-}{0|d|x|c|s|r|{w|a|z}|m}+

self Permet des opération spéciales pour le DN autorisé
realself Réfère au DN authentifié
level ce modèle d'accès s'assure d'une interprétation incrémentale des privilèges. Les niveaux possibles sont none (aucun accès, disclose ( divulgation d'information en cas d'erreur), auth (permettre l'authentification), compare, search, read, write (add+delete) et manage (inclus des accès administratifs).
priv le modèle d'accès priv se base sur des paramètres explicites de privilèges pour chaque clause. = réinitialise les accès définis précédemment, + et - ajoute/supprime des privilèges. m (manage), w (write), a (add), z (delete), r (read), s (search), c (compare), x (authentification), d (disclose), 0 ( aucun privilège) (défaut: +0)

Le champ Control

   Optionnel. Contrôle le flux de règles d'accès. Peut être:

stop Stop en cas de match
continue Permet à d'autres clause ‹who› dans le même ‹access› d'être considérés
break Permet à d'autres clauses ‹access› qui matchent la même cible d'être traités

exemple break:
access to dn.subtree="dc=example,dc=com" attrs=cn by * =cs break
access to dn.subtree="ou=People,dc=example,dc=com" by * +r
exemple continue:
access to dn.subtree="dc=example,dc=com" attrs=cn by * =cs continue by users +r

Scopes

base correspond seulement à l'entrée avec le DN fournit
one correspond aux entrées dont le parent est le DN fournit
subtree correspond à toutes les entrées dans l'arbre dont le root est le DN fournit
children correspond à toutes les entrées sous le DN (mais pas l'entrée nommée par le DN)

Par exemple, si l'annuaire contient les entrées nommées :
o=suffix
cn=Manager,o=suffix
ou=people,o=suffix
uid=kdz,ou=people,o=suffix
cn=addresses,uid=kdz,ou=people,o=suffix
uid=hyc,ou=people,o=suffix

alors:
dn.base="ou=people,o=suffix" match 2 ;
dn.one="ou=people,o=suffix match 3, and 5 ;
dn.subtree="ou=people,o=suffix match 2, 3, 4, and 5 ; and
dn.children="ou=people,o=suffix match 3, 4, and 5.

cibles


*__________________________All, including anonymous and authenticated users
anonymous__________________Anonymous (non-authenticated) users
users______________________Authenticated users
self_______________________User associated with target entry
dn[.‹basic-style›]=‹regex›_Users matching a regular expression
dn.‹scope-style›=‹DN›______Users within scope of a DN

Correspondance des droits

Level_____Privileges______Description
none______0_______________no access
disclose__d_______________needed for information disclosure on error
auth______dx______________needed to authenticate (bind)
compare___cdx_____________needed to compare
search____scdx____________needed to apply search filters
read______rscdx___________needed to read search results
write_____wrscdx__________needed to modify/rename
manage____mwrscdx_________needed to manage

Opérations requises

   Les opérations nécessitent différents privilèges sur différentes portions d'entrées.

add nécessite le privilège add sur le pseudo-attribut de l'entrée à ajouter, et add sur le pseudo-attribut children du parent de l'entrée.
bind quand les accréditifs sont stockés dans l'annuaire, nécessite les privilèges auth sur l'attribut où sont stockés ces accréditifs.
Compare nécessite compare sur l'attribut à comparer
delete nécessite delete sur le pseudo-attribut de l'entrée à supprimer et sur le pseudo-attribut children du parent de l'entrée
modify nécessite write (add pour ajouter, delete pour supprimer, les 2 pour modifier)
modrdn nécessite write sur le pseudo-attribut de l'entrée à supprimer, delete sur le pseudo-attribut Children de l'ancien parent de l'entrée, et add sur le pseudo-attribut Children du nouveau parent de l'entrée. delete est aussi requis sur les attributs qui sont présent dans l'ancien RDN si deleteoldrdn et à 1.
search nécessite search sur le pseudo-attribut entry du searchBase. Les entrées résultantes sont ensuite testé sur read sur le pseudo-attribut entry et sur chaque valeurs de chaque attribut demandé pour chaque referral utilisé pour générer des références continues, read sur le pseudo-attribut entry et les attributs du referral.
authzID, proxyAuthz necessitent auth sur tous les attributs présents dans la recherche et sur authzTo et/ou authzFrom de l'identité autorisant.

Exemples

Pour matcher la sous-arborescence désirée, la règle serait:
access to dn.regex="^(.+,)?dc=example,dc=com$" by ...
Pour des raisons de performance, il est mieux d'écrire:
access to dn.subtree="dc=example,dc=com" by ...
En écrivant des règles submatch, il peut être préférable d'éviter l'utilisation de ‹dnstyle›:
access to dn.regex="^(.+,)?uid=([^,]+),dc=example,dc=com$"
by dn.regex="^uid=$2,dc=example,dc=com$$" write
by ...
Cependant, c'est plus efficace:
access to dn.regex="^(.+,)?uid=([^,]+),dc=example,dc=com$"
by dn.exact,expand="uid=$2,dc=example,dc=com" write
by ...
^
22 septembre 2013

htmlpdflatexmanmd




slapd-config

slapd-config

Backend de configuration de slapd

Options de configuration globale

   Ces options sont spécifiées dans l'entrée cn=config. Elle doit avoir un objectClass olcGlobal.

cn =config
olcAllows Spécifie un jeu de fonctionnalités à autoriser. bind_anon_cred permet un bind anonyme quand les crédentials ne sont pas vide, bind_anon_dn permet un bind non-authentifié quand le DN n'est pas vide et proxy_authz_anon permet un contrôle d'autorisation proxy non-authentifié
olcArgsFile Chemin d'un fichier qui maintient la ligne de commande du serveur slapd
olcAttributeOptions Définis le tagging d'options d'attributs ou des préfixes tag/range. un préfixe se termine par '-'.
olcAuthIDRewrite Utilisé par le framework d'authentification pour convertir un simple nom en DN utilisé pour l'autorisation. Son but est analogue à olcAuthzRegexp. Ce jeu de règle est analogue à ceux décrit dans slapo-rwm
olcAuthzPolicy Spécifie quelles règles utiliser pour l'autorisation proxy. none désactive, from utilise les règles dans authzFrom, to utilise celles dans authzTo, any, et all (toutes les autorisations doivent réussir)
olcAuthzRegexp Utilisé par le framework d'authentification pour convertir un simple nom en DN utilisé pour l'autorisation.
olcConcurrency Spécifie un niveau de concurrence.
olcConnMaxPending Nombre maximum de requêtes en attente pour une session anonyme
olcConnMaxPendingAuth Spécifie le nombre maximum de requêtes en attente pour une session authentifiée.
olcDisallows Spécifie un jeu de fonctionnalités à désactiver. bind_anon n'accèpte plus les requêtes bind anonymes. bind_simple désactive le simple bind. tls_2_anon désactive les sessions forcées en status anonyme une fois l'opération StartTLS reçue. tls_authc désactive es opérations StartTLS si authentifié.
olcGentleHUP a TRUE, SIGHUP ne fait qu'une tentative d'arrêt. slapd n'accèpte plus les nouvelle connexions, mais attend que les connexions en cours se terminent.
olcIdleTimeout Nombre de secondes avant de fermer une session client non active. ( 0 désactive)
olcIndexIntLen Longueur de clé pour les indices entier ordonnés. Le MSB d'un binaire entier sera utilisé pour indexer les clés.
olcIndexSubstrIfMaxLen Longueur max des indices subinitial et subfinal.
olcIndexSubstrIfMinLen Longueur mini des indices subinitial et subfinal. Une valeur d'attribut doit avoir au moins cette longueur pour être traitée
olcIndexSubstrAnyLen Longueur utilisée pour les indices subany. Une valeur d'attribut doit avoir au moins cette longueur pour être traitée. est utilisé pour les indices subinitial et subfinal quand le filtre est supérieur à olcIndexSubstrIfMaxlen
olcIndexSubstrAnyStep Spécifie les étapes utilisée dans les recherchée d'index subany. définis l'offset pour les segments d'une chaîne de recherche
olcListenerThreads Spécifie le nombre de threads à utiliser pour le gestionnaire de connexion
olcLocalSSF Spécifie le Security Strength Factor (SSF) pour les sessions LDAP locales.
olcLogFile Fichier où enregistrer les logs
olcLogLevel Niveau de log
olcPasswordCryptSaltFormat Spécifie le format du salt passé à crypt(3) en générant les mots de passe {CRYPT}. Doit être au format sprintf(3) et peut inclure une conversion %s
olcPidFile Chemin absolu du fichier PID
olcPluginLogFile Chemin absolu d'un fichier contenant les logs pour le plugin SLAPI
olcReferral Spécifie les referrals à passer quand slapd ne peut pas trouver une base à utiliser pour une requête
olcReverseLookup Active/désactive la recherche inversée d'un nom de client
olcRootDSE Nom d'un fichier ldif contenant les attributs utilisateur pour le root DSE
olcSaslAuxprops Spécifie quels plugins auxprop utiliser pour les recherches d'authentification.
olcSaslHost fqdn utilisé pour le traitement SASL
olcSaslRealm Royaume SASL
olcSaslSecProps Spécifie les propriétés de sécurité pour cyrus SASL. none efface les flags "noanonymous,noplain". noplain désactive les mécanismes sujets à attaques passives. noactive désactive les mécanismes sujet à attaques actives. nodict désactive les mécanismes sujets à attaque passive par dictionnaire. noanonymous désactive le support des login anonymes. forwardsec nécessite un renvoie de secret entre les sessions. passcred nécessite un mécanisme qui passe les crédentials clients. minssf=‹factor› spécifie le SSF minimum acceptable. maxssf=‹factor› spécifie le SSF maximum acceptable. maxbufsize=‹size› spécifie la taille de tampon max.
olcServerID Spécifie un ID de 0 à 4096 pour ce serveur.
olcSockbufMaxIncoming Taille de PDU LDAP maximum entrante pour les sessions anonymes.
olcSockbufMaxIncomingAuth Taille de PDU LDAP maximum entrante pour les sessions authentifiées.
olcTCPBuffer Taille du tampon TCP. Une valeur globale est définie, et des valeur pour la lecture et l'écriture peuvent être spécifiés
olcThreads Taille maximum du pool de thread primaire.
olcToolThreads Nombre de thread maximum à utiliser en mode tool. ne devrait pas être supérieur au nombre de CPU.
olcWriteTimeout Nombre de secondes à attendre avant de fermer une connexion avec une écriture en cours. permet une récupération face à divers problèmes réseau

Options TLS

olcTLSCipherSuite Permet de configurer les chiffrement acceptés et l'ordre de préférence.
olcTLSCACertificateFile Fichier contenant les certificats pour toutes les CA que slapd reconnaît
olcTLSCACertificatePath Chemin d'un répertoire contenant les certificats CA
olcTLSCertificateFile Fichier contenant le certificat du server ldap
olcTLSCertificateKeyFile Fichier contenant la clé privée du serveur ldap
olcTLSDHParamFile Spécifie le fichier contenant les paramètres pour les échanges de clé Diffie-Hellman. "!AH" devrait être ajouté à la suite de chiffrements si des chiffrements sont spécifiés et utilisent les échanges de clé DH anonymes.
olcTLSRandFile Fichier pour obtenir des données aléatoires quand /dev/urandom n'est pas disponible
olcTLSVerifyClient Spécifie quelle vérification exécuter sur les certificats clients. never ne demande pas de certificat, allow nécessite un certificat. try le certificat est demandé, mais non obligatoire. demand|hard|true sont équivalent
olcTLSCRLCheck Spécifie si la CRL doit être utilisée pour vérifier les certificats clients. none ne vérifie pas la CRL. peer vérifie dans la CRL. all vérifie toute la chaîne dans le CRL.
olcTLSCRLFile Spécifie le fichier contenant la CRL à vérifier

Options de modules dynamique

   Chaque module a une entrée nommée cn=module{x},cn=config

olcModuleLoad Spécifie le nom d'un module dynamique
olcModulePath Spécifie une liste de répertoires où chercher les modules.

Options de schéma

   Les définitions de schéma sont créées en tant qu'entrée dans cn=schema,cn=config

olcAttributeTypes Spécifie une type d'attribut utilisant la syntaxe LDAPv3
olcDitContentRules Spécifie un DIT Content Rule utilisant la syntaxe LDAPv3
olcObjectClasses Spécifie une classe d'objet en utilisant la syntaxe LDAPv3
olcObjectIdentifier Définis une nom équivalent à l'OID donné

Options général de backend

   Chaque backend est définies dans une entrée nommée: olcBackend=‹databasetype›,cn=config

Options de base de données

   Les options de base de données sont définies dans des entrées nommées olcDatabase={x}‹databasetype›,cn=config. La base frontend spéciale est toujours numérotée {-1} et la base de configuration est toujours numérotée {0}

   Ces options peuvent être définies dans le frontend et doivent avoir l'objet olcFrontEndConfig

olcAccess Définis l'accès à une base de données
olcDefaultSearchBase Spécifie le dn de bas de recherche par défaut à utiliser quand les clients ne spécifient pas de base de recherche
olcExtraAttrs Liste les attributs devant être ajoutés aux requêtes de recherche. Les backend locaux retournent toute l'entrée, le frontend ne retourne que celles autorisées par les ACL.
olcPasswordHash Configure les hash à utiliser lors de la génération de mots de passe dans l'attribut userPassword. {SSHA}, {SHA}, {MD5}, {SMD5}, {CRYPT}, {CLEARTEXT}
olcReadOnly Place la base de donnée en lecture seule
olcRequires Spécifie un jeu de conditions requis. Peut être spécifié globalement et/ou par base de données (additive). authc nécessite une authentification avant toute opération, SASL nécessite une authentification SASL, strong nécessite une authentification forte. none ne spécifie aucune condition
olcRestrict Spécifie une liste d'opérations interdites. Peut être spécifié globalement et/ou par base de données (superseed). add, bind, compare, delete, extended[=‹OID›], modify, rename, search, read, write
olcSchemaDN Spécifie le DN de la sous-entrée du sous-schéma qui contrôle les entrées sur ce serveur.
olcSecurity Spécifie un jeu de SSF. Peut être spécifié globalement et/ou par base de données. ssf=‹n› Spécifie le SSF général. transport=‹cn› spécifie le transport SSF. tls=‹n› spécifie le TLS SSF. update_ssf=‹n› spécifie le SSF général pour les updates. update_transport=‹n› spécifie le transport SSF pour les updates. update_tls=‹n› spécifie les TSL SSF pour les updates. update_sasl=‹n› spécifie le SASL SSF pour les updates. simple_bind=‹n› requière une authentification simple
olcSizeLimit Spécifie le nombre maximum d'entrées à retourner lors d'une recherche.
olcSortVals Spécifie une liste d'attributs multi-valués qui seront toujours maintenus en ordre trié. Permet aux opération modify, compare et aux filtres d'évaluation d'être traités plus efficacement. frontend only.
olcTimeLimit Spécifie le temps maximum en secondes pour une réponse à une recherche

Options de base de données générales

olcAddContentAcl Contrôle si les opérations Add vont effectuer une vérification d'ACL sur le contenu de l'entrée ajoutée.
olcHidden Contrôle si la base sera utilisée pour répondre aux requêtes
olcLastMod Contrôle si slapd maintient automatiquement les attributs modifiersName, modifyTimestamp, creatorsName, et createTimestamp pour les entrées. Contrôle aussi entryCSN et entryUUID
olcLimits Spécifie les limites de temps et de taille basé sur l'initiateur de l'opération ou base DN.
olcMaxDerefDepth Nombre maximum d'aliase à déréférencer en essayant de résoudre une entrée.
olcMirrorMode à TRUE, place un réplica de base en mode mirroir. les updates sont accèptées par tout utilisateur. La base doit être en syncrepl
olcPlugin Configure le plugin SLAPI
olcRootDN Spécifie le DN qui n'est pas sujet à contrôle d'accès ou restrictions administratives
olcRootPW Mot de pas du RootDN
olcSubordinate Spécifie que le backend est subordonné à un autre backend. une base subordonnée peut avoir une seul suffix. Utile pour accoler plusieurs suffix dans un simple contexte de nommage. TRUE, FALSE, advertise (si spécifié, le contexte de nommage de cette base est indiquée dans le rootDSE)
olcSuffix Spécifie le suffix DN des requêtes passée au backend
olcSyncUseSubentry Stocke le contextCSN syncrepl dans une sous-entrée au lieu de l'entrée context de la base
olcSyncrepl Spécifie la base courante comme réplica d'un contenu master
olcUpdateDN applicable uniquement pour les base esclaves. Spécifie le DN autorisé à updater la base
olcUpdateRef Spécifie les référants à passer quand slapd reçoit le demande de modifier une base local répliquée.

Overlays

   Un overlay est une code qui intercepte les opérations de la base dans le but de les étendre ou les changer. Les overlays doivent être configurés comme entrées enfant d'une base spécifique le RDN de l'entrée doit avoir l'objectClass olcOverlayConfig

Exemple

L'exemple suivant, s'il est copié dans le fichier config.ldif, la commande suivante va initialiser la configuration:
slapadd -F /usr/local/etc/openldap/slapd.d -n 0 -l config.ldif


dn: cn=config
objectClass: olcGlobal
cn: config
olcPidFile: /usr/local/var/run/slapd.pid
olcAttributeOptions: x-hidden lang-
    
dn: cn=schema,cn=config
objectClass: olcSchemaConfig
cn: schema
    
include: file:///usr/local/etc/openldap/schema/core.ldif
    
dn: olcDatabase=frontend,cn=config
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
olcDatabase: frontend
# Subtypes of "name" (e.g. "cn" and "ou") with the
# option ";x-hidden" can be searched for/compared,
# but are not shown. See slapd.access(5).
olcAccess: to attrs=name;x-hidden by    *    =cs
# Protect passwords. See slapd.access(5).
olcAccess: to attrs=userPassword by    *    auth
# Read access to other attributes and entries.
olcAccess: to    *    by    *    read
    
# set a rootpw for the config database so we can bind.
# deny access to everyone else.
dn: olcDatabase=config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: config
olcRootPW: {SSHA}XKYnrjvGT3wZFQrDD5040US592LxsdLy
olcAccess: to    *    by    *    none
    
dn: olcDatabase=bdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcBdbConfig
olcDatabase: bdb
olcSuffix: "dc=our-domain,dc=com"
# The database directory MUST exist prior to
# running slapd AND should only be accessible
# by the slapd/tools. Mode 0700 recommended.
olcDbDirectory: /usr/local/var/openldap-data
# Indices to maintain
olcDbIndex: objectClass eq
olcDbIndex: cn,sn,mail pres,eq,approx,sub
    
# We serve small clients that do not handle referrals,
# so handle remote lookups on their behalf.
dn: olcDatabase=ldap,cn=config
objectClass: olcDatabaseConfig
objectClass: olcLdapConfig
olcDatabase: ldap
olcSuffix: ""
olcDbUri: ldap://ldap.some-server.com/

Limite de taille et de temps


olcLimits: ‹selector› ‹limit› [‹limit› [...]]
selector: anonymous|users|[‹dnspec›=]‹pattern›|group[/oc[/at]]=‹pattern›
‹dnspec› ::= dn[.‹type›][.‹style›]
‹type› ::= self | this
‹style› ::= exact | base | onelevel | subtree | children | regex | anonymous

unchecked définie une limite sur le nombre de candidats qu'une recherche est autorisé à examiner
size[.{soft|hard|unchecked}]=‹integer›
Contrôle pageResult total permis de retourner:
size.prtotal={‹integer›|unlimited|disabled}
contrôle pageResult:
size.pr={‹integer›|noEstimate|unlimited}

integer Taille de page maximum si aucune limite explicite n'est définies.
noEstimate ne retourne pas d'estimation du nombre d'entrée qui peuvent être retournées

olcSyncrepl

   olcSyncrepl: rid=‹replicaID› provider=ldap[s]://‹hostname›[:port] searchbase=‹baseDN› [type=refreshOnly|refreshAndPersist] [interval=dd:hh:mm:ss] [retry=[‹retry interval› ‹# of retries›]+] [filter=‹filterstr›] [scope=sub|one|base|subord] [attrs=‹attrlist›] [exattrs=‹attrlist›] [attrsonly] [sizelimit=‹limit›] [timelimit=‹limit›] [schemachecking=on|off] [network-timeout=‹seconds›] [timeout=‹seconds›] [bindmethod=simple|sasl] [binddn=‹dn›] [saslmech=‹mech›] [authcid=‹identity›] [authzid=‹identity›] [credentials=‹passwd›] [realm=‹realm›] [secprops=‹properties›] [keepalive=‹idle›:‹probes›:‹interval›] [starttls=yes|critical] [tls_cert=‹file›] [tls_key=‹file›] [tls_cacert=‹file›] [tls_cacertdir=‹path›] [tls_reqcert=never|allow|try|demand] [tls_ciphersuite=‹ciphers›] [tls_crlcheck=none|peer|all] [suffixmassage=‹real DN›] [logbase=‹base DN›] [logfilter=‹filterstr›] [syncdata=default|accesslog|changelog]

rid ID qui identifie la directive syncrepl dans le site de réplication.
provider Spécifie le fournisseur de réplication contenant le contenu master
searchbase, scope, filter, attrs, attrsonly, sizelimit, timelimit servent de spécification pour filtrer le contenu du réplica
refreshOnly la prochaine opération de recherche de synchronisation est re-planifiée à intervalle définis par interval.
refreshAndPersist la synchronisation est persistante
retry Si la connexion est perdue, retente avec des pair de valeur ‹retry inval› et ‹# of retries›. ex: retry"60 10 300 3". + vaut indéfinis
schemachecking Force la vérification du schéma.
network-timeout Définis le temps d'établissement d'une connexion réseau avec le fournisseur
timeout Détermine le temps que le client attend que la requête Bind initiale soit complétée
bindmethod simple, sasl
binddn DN pour un simple bind
saslmech requis pour SASL
authcid Identité et/ou crédentials pour l'authentification sasl
authzid identité d'authorisation
credentials Crédentials pour le bind
realm Royaume SASL
secprops Définis les propriétés de sécurité spécifiques
keepalive Définis les valeurs de idle (temps avant un TCP keepalive), probes (nombre max de keepalive avant de fermer la connexion) et intervalles (temps entre les keepalive)
starttls Spécifie l'utilisation de l'opération étendue StartTLS pour établir une session TLS.
tls_cert Certificat pour la connexion TLS
tls_key Clé privée
tls_cacert Fichier contenant les certificats CA
tls_cacertdir Répertoire contenant les certificats CA
tls_reqcert Spécifie si le certificat est requis
tls_ciphersuite Spécifie la suite de chiffrement et l'ordre à utiliser
tls_crlcheck Vérifie les certificat dans la CRL
suffixmassage Permet au client de pousser des entrée depuis un annuaire distant dont le suffixe DN diffère de l'annuaire local Les entrée qui matche le searchbase seront remplacé avec ce DN
logbase Fichier où écrire les logs
logfilter Filtre pour les logs
syncdata accesslog, les logs sont conforme à slapo-accesslog. changelog les logs sont conforme au format changelog (obsolète). default, les paramètres de logs sont ignorés