[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: identity assertion



On Thu, 2006-01-19 at 16:44 -0600, Eric Irrgang wrote:
> If you want to be able to do a simple bind as one DN but perform actions
> as another DN, you need to use some sort of identity assertion.  Is there
> a way to do this without using back-ldap?

Yes.  Just use proxyAuthz control (that's what back-ldap does, by the
way).

> 
> Specifically, I'm trying to work around the lack of ACL access to the
> config backend by allowing specific DNs to assert the cn=config rootDN.
> I've got rootdn for cn=config set to cn=config,dc=test and an entry in a
> bdb backend for cn=config,dc=test with a authzFrom attribute set.
> 
> So I just need to bind as a user that is authorized with the authzFrom and
> assert the cn=config,dc=test identity, right?

Yes.

> 
> The only way I could think to do that was to try to set up another virtual
> naming context of something like cn=admin and use some sort of rewriting
> so that cn=config,cn=admin points at cn=config.
> 
> So I'm trying to set up an ldap backend that will proxy the bind through
> to the dc=test backend and then assert the identity of cn=config,dc=test
> so that the authorization is handled at dc=test via the authz-policy from.
> 
> Is this the right approach?  I guess one thing I'm a little unclear on is
> what exactly is the authcID?  That's what has to match the authzFrom
> attribute, right?  Is it basically just the bind DN in a simple bind
> situation?
> 
> So far, a simple slapd config looks like the following, but I think slapd
> is first authenticating the client by proxy and then rebinding anonymously
> to try to assert the cn=config,dc=test identity.
> 
> database	config
> rootdn		cn=config,dc=test
> 
> database	bdb
> suffix		dc=test
> ...
> 
> database	ldap
> suffix		cn=admin
> uri		"ldap://localhost";
> idassert-bind	mode=self
> 		bindmethod=simple
> 		authzID="dn:cn=config,dc=test"
> overlay		rwm
> rwm-suffixmassage	"cn=admin" ""
> 
> 
> I connect to localhost, do a simple bind as a real user, try to perform
> and operation on cn=config,cn=admin, hoping that the operation will be
> relayed to cn=config with an effective identity of cn=config,dc=test, but
> I get insufficient access errors and the logs indicate that before the
> identity assertion there is an anonymous bind.  Isn't the mode=self
> supposed to take care of that?  Does my ldap database section need to have
> 'idassert-authzFrom "dn:*"'?
> 
> Suggestions, please?
> 
> I get the impression that I'm supposed to be using the extra features of
> SASL binds but I was hoping not to open that can of worms for a while.  Do
> I just need to go the SASL route?  Is there a way to move to SASL with my
> current SSHA userPassword credentials intact?

Authz and SASL cross each other many times, but they're different and
totally separated things.  Perhaps you're distracted by the fact that
SASL has the notion of authorization built-in.  What you need is set up
slapd so that authorization is at all allowed; then, you need to allow
the authorization you're trying to use.  Note that since the cn=config
rootdn is not going to be a real entry, you won't be able to add any
"authzFrom" to it; you'll have to add "authzTo: dn.exact:cn=config" to
the entry of the identity you're binding as, and allow "to"
authorization by using "authz-policy to".  Note that, as indicated in
slapd.conf(5),

                                                             Use of
    authzTo rules can be easily abused  if  users  are  allowed  to
    write  arbitrary  values  to  this  attribute.   In general the
    authzTo attribute must be protected with ACLs  such  that  only
    privileged  users  can  modify  it.

p.




Ing. Pierangelo Masarati
Responsabile Open Solution
OpenLDAP Core Team

SysNet s.n.c.
Via Dossi, 8 - 27100 Pavia - ITALIA
http://www.sys-net.it
------------------------------------------
Office:   +39.02.23998309          
Mobile:   +39.333.4963172
Email:    pierangelo.masarati@sys-net.it
------------------------------------------