ARGOS LDAP, comptes et lé gendes. - Clients LDAP : Apache ...

auroratexicoSecurity

Jun 19, 2012 (5 years and 4 months ago)

900 views

 
 
ARGOS
LDAP, comptes et légendes.
Ce que LDAP ne peut pas faire pour vous
David.Delavennat@cgm.cnrs­gif.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://net­ldap.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

IEEE­802

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/CA­DOMAIN.crt
     
<Directory /var/www/htdocs/cal/[a­zA­Z0­9_]*>
         
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/access­control.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/slapo­ppolicy)

constraint:
 restrict the acceptable values for particular 
attributes (http://linux.die.net/man/5/slapo­constraint)

unique:
 for enforcing uniqueness of attribute values within 
a tree (http://linux.die.net/man/5/slapo­unique)

valsort:
 maintain various sort orders for values of an 
attribute (http://linux.die.net/man/5/slapo­valsort)

rwm:
 rewrite module, for various alterations of LDAP data 
(
http://linux.die.net/man/5/slapo­rwm
)

...
 
 
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://slave1­ldap.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/slave2­ldap.labo.domain.tld.pem
        
tls_key=/etc/openldap/ssl/slave2­ldap.labo.domain.tld.key
        
tls_cacert=/etc/openldap/ssl/CA­DOMAIM.tld.crt
        
tls_reqcert=demand
        
binddn="cn=admin,ou=dsa,ou=labo,o=domain,c=tld"
        
credentials=secret
updateref 
ldap://master­ldap.domain.tld
cf 
http://perso.ens­lyon.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