General question about authentication/authorization
Phil Mayers
p.mayers at imperial.ac.uk
Fri Mar 17 19:27:59 CET 2006
Florian Prester wrote:
> >> so, AFAIK authorization is retreiving user-information from a source?
Yes, however see Alan's reply - his "yes" and my "no" are not as
contradictory as they might seem (it's purely semantics). See below.
> ok, lets assume a user can authenticate because he/she supplys a valid
> username/password e.g. using PAP. Now the user is authenticated.
> But I want to allow access to something not only if the user is
> authenticated, but also if a given attribute is present in the users
> ldap enty.
> How can I do that?
Well, if the user is REJECTed, regardless of what is put in the reply
packet[1], as long as the NAS is sane then they won't get access to
anything, so it should not matter if you put the attributes in but then
reject them.
For example. Say you are using LDAP, and your NAS gives admin privs.
based on the Class attribute in the Radius reply (unlikely, but it's a
simple example):
dn: cn=username,dc=domain,dc=com
cn: username
radiusClass: Administrator
userPassword: APassWord
...and:
authorize {
preprocess
ldap
}
authenticate {
Auth-Type LDAP {
ldap
}
}
post-auth {
ippool
somelogging
Auth-Type REJECT {
somerejectlogging
}
}
The flow is:
1. request comes in, User-Name==username
2. authorize run
i. preprocess run
ii. ldap run
* LDAP search done - entry found
* Ldap-UserDn is set to entry DN
* Class==Administrator is set
* Auth-Type==LDAP is set
3. authenticate run, Auth-Type LDAP subsection ONLY,
* ldap module run - does LDAP simple bind to Ldap-UserDn with
User-Password
* if password OK - Accept
* if password NO - Reject
4. post-auth run
* if Accept - run main body
* ippool run
* somelogging run
* else if Reject - run Auth-Type REJECT subsection ONLY
* somerejectlogging run
So if the user gives the wrong password, the Class attribute may[1] be
added to the reply, but they'll still get a REJECT so does it matter? If
they give the right password, they'll be accepted AND given the admin privs.
The only time it matters whether auth succeeds or rejects is when the
attribute you're returning is a dynamic resource which you absolutely do
not want to allocate for failed requests e.g. an IP assignment. If
that's the case, then you'd need to do something in the post-auth
section where you can differentiate between auth success and failure.
The only modules that implement post-auth handlers useful for such
dynamic allocation purposes are exec, files, ippool, perl and policy.
But I'm guessing it's a static thing and you can go with simple LDAP
attributes, especially given that...
[1] In recent versions of FreeRadius (1.1.0 and up?) the server will
automatically strip everything from a REJECT except EAP-Message,
Message-Authenticator and Reply-Message (and Proxy-State). This is
specified by the RFCs anyway. So in recent versions of the server, the
Class attribute wouldn't even go to the NAS, so it truly doesn't matter
if you add it then fail it. That's a recent change though.
More information about the Freeradius-Users
mailing list