ARGOS
LDAP, comptes et légendes.
Ce que LDAP ne peut pas faire pour vous
David.Delavennat@cgm.cnrsgif.fr
18 / 02/ 2010
Clients LDAP :
Apache Directory Studio
Clients LDAP :
ldapvi
●
http://www.lichteblau.com/ldapvi/
–
ldapvi is an interactive LDAP client for
Unix terminals
–
Using it, you can update LDAP entries
with a text editor
Clients LDAP :
ruby, perl, php...
●
http://netldap.rubyforge.org/rdoc/
●
http://ldap.perl.org/
...
Serveurs LDAP
Comparaison générale
Serveurs LDAP
Comparaison technique
Exemples d'usage
●
Authentification eduroam
●
Authentification WebDAV
●
Carnet d'adresses Mozilla
●
Annuaire Web
●
....Système d'Information
Authentification eduroam
●
sambaNTPassword
–
Authentification PEAP
●
userPassword
–
Authentification TTLS
●
uid
–
<prenom>.<nom>
●
radiusTunnelMediumType
–
IEEE802
●
radiusTunnelType
–
VLAN
●
radiusTunnelPrivateGroupId
–
VISITEUR, DEPARTEMENT_ARN...
Authentification eduroam
●
Problème :
–
LDAP est un modèle objet dont on a oublié les
méthodes
●
Conséquence :
–
On accéde aux attributs sans contrôle de cohérence
('métier') interne (assez génant dans les cas
d'interdépendances des attributs)
●
Exemple :
–
Synchronisation des mots de passe TTLS / PEAP
–
Politique de choix des mots de passe
●
Solution :
–
Résolu sous OpenLDAP via les overlay
Authentification Webdav
●
Config Apache :
<IfDefine SSL>
<VirtualHost _default_:443>
DocumentRoot /var/www/htdocs
ServerName ical.labo.domain.tld.fr
SSLEngine on
SSLCertificateFile /etc/ssl/ical.labo.domain.tld.crt
SSLCertificateKeyFile /etc/ssl/ical.labo.domain.tld.key
SSLCACertificateFile /etc/ssl/CADOMAIN.crt
<Directory /var/www/htdocs/cal/[azAZ09_]*>
AllowOverride AuthConfig
DAV On
AuthType Basic
AuthName "iCal Restricted Access"
AuthLDAPEnabled on
AuthLDAPAuthoritative on
AuthLDAPStartTLS on
AuthLDAPGroupAttribute uniqueMember
AuthLDAPURL ldap://ical.labo.domain.tld/ou=users,ou=labo,o=domain,c=tld?uid?one?(objectClass=posixAccount)
</Directory>
</VirtualHost>
</IfDefine>
Authentification Webdav
●
Entrées LDAP
–
1 entrée par utilisateur
–
1 entrée de partage en RO
–
1 entrée de partage en RW
●
.htaccess
<Limit PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
require group cn=service.informatique,ou=write,ou=webdav,ou=services,ou=labo,o=domain,c=tld
</Limit>
<Limit GET>
require group cn=service.informatique,ou=read,ou=webdav,ou=services,ou=labo,o=domain,c=tld
</Limit>
Authentification Webdav
●
Entrées LDAP
cn=service.informatique,ou=read,ou=webdav,ou=Services,ou=labo,o=domain,c=tld
objectClass: groupOfUniqueNames
cn: service.informatique
description: read permissions on service.informatique Webdav Share
uniqueMember: uid=utilisateur.1@labo.domain.tld,ou=users,ou=labo,o=domain,c=tld
uniqueMember: uid=utilisateur.2@labo.domain.tld,ou=users,ou=labo,o=domain,c=tld
uniqueMember: uid=utilisateur.3@labo.domain.tld
,ou=users,ou=labo,o=domain,c=tld
cn=service.informatique,ou=write,ou=webdav,ou=Services,ou=labo,o=domain,c=tld
objectClass: groupOfUniqueNames
cn: service.informatique
description: write permissions on service.informatique Webdav Share
uniqueMember: uid=utilisateur.1@labo.domain.tld
,ou=users,ou=labo,o=domain,c=tld
Carnet d'adresses Mozilla
# The mozillaAddressBookEntry object class is used to define entries
# representing Cards in the Mozilla Address Book. The commonName attribute
# is used for naming entries of this object class, but may not be unique.
objectClass ( mozillaAbPersonAlpha NAME 'mozillaAbPersonAlpha'
DESC 'mozillaAddressBookEntry'
SUP top AUXILIARY
MUST ( cn )
MAY ( c $ description $ displayName $ facsimileTelephoneNumber $ givenName $ homePhone $\
l $ mail $ mobile $ mozillaCustom1 $mozillaCustom2 $ mozillaCustom3 $\
mozillaCustom4 $ mozillaHomeCountryName $ mozillaHomeLocalityName $\
mozillaHomePostalCode $ mozillaHomeState $ mozillaHomeStreet $ mozillaHomeStreet2 $\
mozillaHomeUrl $ mozillaNickname $ mozillaSecondEmail $ mozillaUseHtmlMail $\
mozillaWorkStreet2 $ mozillaWorkUrl $ nsAIMid $ o $ ou $ pager $ postalCode $\
postOfficeBox $ sn $ st $ street $ telephoneNumber $ title
)
)
Annuaire Web
●
Contexte :
–
Fourniture d'un service d'annuaire web
–
On ne souhaite pas retourner à l'utilisateur
l'ensemble des réponses possibles d'un
coup
–
Il faut paginer les réponses
●
RFC2696 (LDAP Control Extension for Simple
Paged Results Manipulation)
–
Control PagedResults
●
RFC2891 (LDAP Control Extension for Server Side
Sorting of Search Results)
–
Overlay sssvlv (récent, commit du Wed, 22
Jul 2009 13:02:58 0700, peu de doc)
Annuaire Web
●
cf
http://www.openldap.org/doc/admin24/limits.html
●
Il faut utiliser un DSA spécifique avec des limites 'unlimited'
–
limite de temps
–
limite de taille
●
Exemple :
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
Système d'Information
●
Vue métier =/= Vues applicatives
–
Exemple DHCP & DNS ISC
●
LDAP n'a pas de vues (au sens relationnel
du terme) ; cf overlay rwm
●
Un accès client au serveur peut exposer
tout ou partie de la tructuration interne du
serveur
Schéma OpenLDAP
●
objectClass :
–
STRUCTURAL
●
Mutuellement exclusif
–
AUXILIARY
●
Héritage multiple
–
MUST
●
Attribut(s) obligatoire(s)
–
MAY
●
Attribut(s) optionnel(s)
OpenLDAP : Schéma
●
Création d'un espace de nommage
objectIdentifier OpenLDAPExperimentalArc 1.3.6.1.4.1.4203.666
objectIdentifier siLdapRoot OpenLDAPExperimentalArc:20091229
objectIdentifier siLdap siLdapRoot:1
objectIdentifier siLdapAttributeType siLdap:1
objectIdentifier siLdapObjectClass siLdap:2
objectIdentifier siLdapApplication siLdap:3
OpenLDAP : Schéma
●
Création des classes d'objets
objectIdentifier siPerson siLdapObjectClass:1
objectIdentifier siProductionEntry siLdapObjectClass:2
objectIdentifier siTemplate siLdapObjectClass:3
objectIdentifier siTemplateObjectClass siLdapObjectClass:4
objectIdentifier siTemplateAttribute siLdapObjectClass:5
objectIdentifier siTemplateRewriteFromName siLdapObjectClass:6
objectIdentifier siTemplateRewriteRegexp siLdapObjectClass:7
objectIdentifier siTemplateRewriteToValue siLdapObjectClass:8
objectIdentifier siTemplateRewriteRpc siLdapObjectClass:9
OpenLDAP : Schéma
●
Création des attributs
objectIdentifier siTemplateRewriteAttributeType siLdapAttributeType:17
objectIdentifier siTemplateRewriteAttributeName siTemplateRewriteAttributeType:0
objectIdentifier siTemplateRewriteAttributeNameFromName siTemplateRewriteAttributeType:1
objectIdentifier siTemplateRewriteAttributeNameToName siTemplateRewriteAttributeType:2
objectIdentifier siTemplateRewriteAttributeValueFromValue siTemplateRewriteAttributeType:3
objectIdentifier siTemplateRewriteAttributeValueToValue siTemplateRewriteAttributeType:4
objectIdentifier siTemplateRewriteAttributeValueFromRegexp siTemplateRewriteAttributeType:5
objectIdentifier siTemplateRewriteAttributeValueToRegexp siTemplateRewriteAttributeType:6
OpenLDAP : Schéma
# siTemplate attribute : describe a regular expression rewrite
#
# AttributeNameFromName →
siTemplateRewriteAttributeFromName IF_EXIST
#
| siTemplateRewriteAttributeName FALLBACK
# AttributeNameToName →
siTemplateRewriteAttributeName
# AttributeValueFromValue →
siTemplateRewriteAttributeValueFromRegexp
# AttributeValueToValue →
siTemplateRewriteAttributeValueToRegexp
###########################################################################
objectClass ( siTemplateRewriteRegexp NAME 'siTemplateRewriteRegexp'
SUP top STRUCTURAL
MUST (
siTemplateRewriteAttributeNameFromName $\
siTemplateRewriteAttributeName $\
siTemplateRewriteAttributeValueFromRegexp $\
siTemplateRewriteAttributeValueToRegexp
)
)
OpenLDAP : LogLevel
loglevel <integer>
Specify the level at which debugging statements and operation statistics should be syslogged
(currently logged to the syslogd(8) LOG_LOCAL4 facility).
Log levels are additive, and available levels are:
1 trace function calls
2 debug packet handling
4 heavy trace debugging
8 connection management
16 print out packets sent and received
32 search filter processing
64 configuration file processing
128 access control list processing
256 stats log connections/operations/results
512 stats log entries sent
1024 print communication with shell backends
2048 entry parsing
OpenLDAP : ACL
●
cf
http://www.openldap.org/doc/admin24/accesscontrol.html
–
ACL statique
–
ACL dynamique (olcAccess)
–
restriction possible en fonction du
S
ecurity
S
trength
F
actor
–
complexe
●
ordre d'évaluation
●
portée
–
sujet à erreur
–
il faut tester avant de mettre en production !!!
OpenLDAP : overlay
●
cf
http://en.wikipedia.org/wiki/OpenLDAP
–
ppolicy:
LDAP Password Policy password quality,
expiration, etc. (http://linux.die.net/man/5/slapoppolicy)
–
constraint:
restrict the acceptable values for particular
attributes (http://linux.die.net/man/5/slapoconstraint)
–
unique:
for enforcing uniqueness of attribute values within
a tree (http://linux.die.net/man/5/slapounique)
–
valsort:
maintain various sort orders for values of an
attribute (http://linux.die.net/man/5/slapovalsort)
–
rwm:
rewrite module, for various alterations of LDAP data
(
http://linux.die.net/man/5/slaporwm
)
–
...
OpenLDAP : Réplica
●
rid :
Identifiant du serveur. Il semble qu'il doivent être unique entre réplica.
●
provider :
Le maître de réplication, peut être le master ldap ou un réplica mis en maître de réplication.
●
type :
Le type de réplication
refreshAndPersist
ou
refreshOnly
●
retry :
indique la reconnexion en cas de perte de connexion(ici 10 fois toutes les 60s, puis à l'infini toutes les
300s)
●
searchbase :
le dn de replication
●
filter :
Filtre pour la réplication
●
scope :
sub, one
●
schemachecking :
si on vérifie la cohérence des données avec le schéma
●
updatedn :
le dn qui va écrire la réplication(pas besoin qu'il soit dans le LDAP)
●
bindmethod :
simple
●
binddn :
le dn qui va se connecter au maître de replication
●
credentials :
le mot de passe de ce dn
●
updateref :
le master ldap
OpenLDAP : Réplica
syncrepl rid=001
provider=ldap://slave1ldap.domain.tld/
type=refreshOnly
interval="00:00:01:00"
retry="60 10 300 +"
searchbase="ou=labo,o=domain,c=tld"
filter="(objectClass=*)"
scope=sub
schemachecking=off
bindmethod=simple
starttls=yes
tls_cert=/etc/openldap/ssl/slave2ldap.labo.domain.tld.pem
tls_key=/etc/openldap/ssl/slave2ldap.labo.domain.tld.key
tls_cacert=/etc/openldap/ssl/CADOMAIM.tld.crt
tls_reqcert=demand
binddn="cn=admin,ou=dsa,ou=labo,o=domain,c=tld"
credentials=secret
updateref
ldap://masterldap.domain.tld
cf
http://perso.enslyon.fr/sebastien.mei/wiki/doku.php?id=documentations:syncreplesclave
OpenLDAP : Alias
cf
http://www.openldap.org/faq/data/cache/1111.html
dn: uid=alias,ou=People,dc=example,dc=net
objectclass: alias
objectclass: extensibleObject
uid: alias
aliasedobjectname: uid=target,ou=Retired People,dc=example,dc=com
Enter the password to open this PDF file:
File name:
-
File size:
-
Title:
-
Author:
-
Subject:
-
Keywords:
-
Creation Date:
-
Modification Date:
-
Creator:
-
PDF Producer:
-
PDF Version:
-
Page Count:
-
Preparing document for printing…
0%
Comments 0
Log in to post a comment