4 votes

autorisation proxiée openldap

J'ai des difficultés à effectuer des mises à jour avec une autorisation par procuration. J'utilise le LDAP SDK d'UnboundID pour me connecter à OpenLDAP, et j'envoie un message de type ProxiedAuthorizationV2RequestControl (contrôle des demandes d'autorisation) para dn: uid=me,dc=People,dc=example,dc=com avec la mise à jour. J'ai testé et vérifié que l'utilisateur cible a l'autorisation d'effectuer l'opération, mais je reçois le message suivant

droits d'accès insuffisants

quand j'essaie de le faire via l'authentification par proxy.

J'ai configuré olcAuthzPolicy=both sur cn=config y authzTo={0}ldap:///dc=people,dc=example,dc=com??subordinate?(objectClass=inetOrgPerson) sur l'utilisateur d'origine. L'authzTo semble fonctionner ; lorsque je le change, j'obtiens

non autorisé à assumer l'identité

lorsque j'essaie la mise à jour (également pour les recherches).


Je l'ai. ldapwhoami -U portal -Y DIGEST-MD5 -X u:mace -H ldap://yorktown -Z qui fonctionne maintenant sans saslauthd. J'avais juste besoin de stocker le mot de passe de l'utilisateur du proxy (portail) en texte clair. Mais je reçois toujours le message "droits d'accès insuffisants" lorsque j'essaie de mettre à jour quoi que ce soit.

Utilisateur proxy

dn: uid=portal,ou=Special Accounts,dc=example,dc=com
objectClass: inetOrgPerson
cn: portal
sn: portal
uid: portal
userPassword: test
authzTo: {0}ldap:///dc=People,dc=example,dc=com??sub?(objectClass=inetOrgPerson)

Utilisateur efficace :

dn: employeeNumber=1400,dc=People,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: sambaSamAccount
objectClass: shadowAccount
uid: mace
...

Voici le log de la tentative de mise à jour, en essayant d'ajouter employeeNumber=1385 como member de cn=Data Management . Il semble que la recherche dans les groupes imbriqués soit correcte, mais il semble qu'elle doive indiquer une correspondance dès qu'elle arrive à employeeNumber=1400 dans le fichier cn=administrators .

op tag 0x66, time 1299022001
conn=31595 op=2 do_modify
conn=31595 op=2 do_modify: dn (cn=Data Management,dc=Roles,dc=example,dc=com)
>>> dnPrettyNormal: <cn=Data Management,dc=Roles,dc=example,dc=com>
<<< dnPrettyNormal: <cn=Data Management,dc=Roles,dc=example,dc=com>, <cn=data management,dc=roles,dc=example,dc=com>
conn=31595 op=2 modifications:
  replace: member
          multiple values
conn=31595 op=2 MOD dn="cn=Data Management,dc=Roles,dc=example,dc=com"
conn=31595 op=2 MOD attr=member
>>> dnPretty: <employeeNumber=1020,dc=People,dc=example,dc=com>
<<< dnPretty: <employeeNumber=1020,dc=People,dc=example,dc=com>
>>> dnPretty: <employeeNumber=1385,dc=People,dc=example,dc=com>
<<< dnPretty: <employeeNumber=1385,dc=People,dc=example,dc=com>
>>> dnNormalize: <employeeNumber=1020,dc=People,dc=example,dc=com>
<<< dnNormalize: <employeeNumber=1020,dc=people,dc=example,dc=com>
>>> dnNormalize: <employeeNumber=1385,dc=People,dc=example,dc=com>
<<< dnNormalize: <employeeNumber=1385,dc=people,dc=example,dc=com>
dnMatch -1        "employeeNumber=1020,dc=people,dc=example,dc=com"     "employeeNumber=1385,dc=people,dc=example,dc=com"
bdb_dn2entry("cn=data management,dc=roles,dc=example,dc=com")
==> unique_modify <cn=Data Management,dc=Roles,dc=example,dc=com>
bdb_modify: cn=Data Management,dc=Roles,dc=example,dc=com
bdb_dn2entry("cn=data management,dc=roles,dc=example,dc=com")
bdb_modify_internal: 0x00000043: cn=Data Management,dc=Roles,dc=example,dc=com
>>> dnNormalize: <cn=Administrators,ou=LDAP,dc=Applications,dc=example,dc=com>
<<< dnNormalize: <cn=administrators,ou=ldap,dc=applications,dc=example,dc=com>
=> bdb_entry_get: ndn: "cn=administrators,ou=ldap,dc=applications,dc=example,dc=com"
=> bdb_entry_get: oc: "(null)", at: "member"
bdb_dn2entry("cn=administrators,ou=ldap,dc=applications,dc=example,dc=com")
bdb_entry_get: rc=0
>>> dnNormalize: <cn=system administrators,dc=roles,dc=example,dc=com>
<<< dnNormalize: <cn=system administrators,dc=roles,dc=example,dc=com>
=> bdb_entry_get: ndn: "cn=system administrators,dc=roles,dc=example,dc=com"
=> bdb_entry_get: oc: "(null)", at: "member"
bdb_dn2entry("cn=system administrators,dc=roles,dc=example,dc=com")
bdb_entry_get: rc=0
>>> dnNormalize: <employeeNumber=1306,dc=people,dc=example,dc=com>
<<< dnNormalize: <employeeNumber=1306,dc=people,dc=example,dc=com>
=> bdb_entry_get: ndn: "employeeNumber=1306,dc=people,dc=example,dc=com"
=> bdb_entry_get: oc: "(null)", at: "member"
bdb_dn2entry("employeeNumber=1306,dc=people,dc=example,dc=com")
bdb_entry_get: rc=16
>>> dnNormalize: <employeeNumber=1329,dc=people,dc=example,dc=com>
<<< dnNormalize: <employeeNumber=1329,dc=people,dc=example,dc=com>
=> bdb_entry_get: ndn: "employeeNumber=1329,dc=people,dc=example,dc=com"
=> bdb_entry_get: oc: "(null)", at: "member"
bdb_dn2entry("employeeNumber=1329,dc=people,dc=example,dc=com")
bdb_entry_get: rc=16
>>> dnNormalize: <employeeNumber=1401,dc=people,dc=example,dc=com>
<<< dnNormalize: <employeeNumber=1401,dc=people,dc=example,dc=com>
=> bdb_entry_get: ndn: "employeeNumber=1401,dc=people,dc=example,dc=com"
=> bdb_entry_get: oc: "(null)", at: "member"
bdb_dn2entry("employeeNumber=1401,dc=people,dc=example,dc=com")
bdb_entry_get: rc=16
>>> dnNormalize: <employeeNumber=1400,dc=people,dc=example,dc=com>
<<< dnNormalize: <employeeNumber=1400,dc=people,dc=example,dc=com>
=> bdb_entry_get: ndn: "employeeNumber=1400,dc=people,dc=example,dc=com"
=> bdb_entry_get: oc: "(null)", at: "member"
bdb_dn2entry("employeeNumber=1400,dc=people,dc=example,dc=com")
bdb_entry_get: rc=16
bdb_modify: modify failed (50)
send_ldap_result: conn=31595 op=2 p=3
send_ldap_result: err=50 matched="" text=""
send_ldap_response: msgid=3 tag=103 err=50
conn=31595 op=2 RESULT tag=103 err=50 text=

5voto

Julien Vehent Points 2907

Je suis passé par là il y a un an, l'autorisation de procuration me rendait fou. Je n'ai donc peut-être pas la réponse définitive, mais je peux peut-être vous aider.

Tout d'abord : augmentez votre niveau de log sur slapd ! C'est verbeux mais ça aide. Deuxièmement : utilisez ldapwhoami pour tester l'autorisation du proxy. Vous pouvez spécifier un utilisateur cible avec l'option -X, et votre utilisateur proxy dans -U.

# ldapwhoami -U proxyuser -Y DIGEST-MD5 -X u:targetuser -H ldap://localhost

Deux paramètres doivent être activés dans votre configuration. Le site olcAuthzPolicy (que vous avez) et le olcAuthzRegexp (utilisé pour construire la chaîne d'authentification SASL). Voici ce que j'ai dans ma configuration :

olcAuthzRegexp: "^uid=([^,]+).*,cn=[^,]*,cn=auth$"
                "ldap:///dc=example,dc=net??sub?(uid=$1)"
olcAuthzPolicy: to

Et, enfin, comme vous l'avez dit, votre mandataire devrait avoir une authzTo attribut. Voici la définition d'un de mes utilisateurs proxy :

dn: cn=proxyuser,dc=example,dc=net
uid: proxyuser
mail: proxyuser@example.net
sn: proxyuser
cn: proxyuser
objectClass: inetOrgPerson
objectClass: top
structuralObjectClass: inetOrgPerson
authzTo: {0}ldap:///dc=example,dc=net??sub?(objectClass=inetOrgPerson)
userPassword:: iodqwhdowihw0123hef92e=

Cela devrait suffire pour que l'autorisation du proxy fonctionne (une fois de plus, testez-le avec ldapwhoami). J'ai écrit un chapitre à ce sujet sur mon wiki (SASL et autorisation par proxy), puisque j'en avais besoin pour me connecter de cyrus-imapd et postfix à openldap. Pour plus d'informations, jetez-y un coup d'oeil : http://wiki.linuxwall.info/doku.php/en:ressources:dossiers:openldap:openldap_debian#sasl

3voto

Peter Points 11

Après avoir résolu plusieurs problèmes de configuration avec l'aide de Julien, j'ai découvert un bug dans le LDAP SDK v2.0.0 de UnboundID qui apparemment provoque l'envoi de demandes de modification sans leurs contrôles. J'ai obtenu un excellent support dans leur forum Ils ont mis en place une nouvelle version pour moi quelques heures après que j'ai posté les journaux identifiant le problème, et il semble qu'il sera corrigé dans la version 2.1.0. Maintenant mon code fonctionne comme prévu.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X