Authorization with Active Directory

Phil Mayers p.mayers at imperial.ac.uk
Thu Jan 26 17:42:28 CET 2012


On 01/26/2012 02:41 PM, suggestme wrote:

> ## I tried using Called-Station-Id to check the condition; which is ok for
> now for testing ; but which I guess is not feasible if there are thousands
> of NAS devices. I don't know what would be best test condition for this.

There are many options. You could match on Client-Shortname with the 
following client def:

client VPN-1 {
   ipaddr = 192.0.2.1
   secret = ...
}

...and then in authorize:

authorize {
   ...
   if (Client-Shortname =~ /^VPN/) {
    ..
   }
}

Or use Huntgroup-Name and huntgroups.

>
> But now I am facing the problem that I can't use more than one If conditions
> inside unlang to test the conditions inside Ldap module. (If I am correct on
> my understanding)

Sorry, I don't understand what you mean here.

>
> And, also using the filter defined as above inside Ldap module some user of
> active directory which doesn't have extensionAttribute10 might get rejected.
> These users should get default acceptance; but should be granted to access
> VPN, or wifi if value is assigned to them on extensionAttribute10. If don't
> have attribute defined still get accepted as default user.

Well, you need to write your LDAP filter correctly. I suggest you read 
the LDAP filter syntax.

Another option, which you've almost figured out, is to pull the data 
from LDAP then do the decisions in unlang.

> Is there any easy way to check condition for the particular attribute of
> active directory? And I don't know where to check this, If I am already
> using If conditional statement for returning the Filter-Id inside Ldap
> module.
>
> In my understanding; people use to check this type of condition for the
> users that are defined in "users" file as;
>
> bob         User-Password == "testing", Connection-Type := "VPN"
>
> But I am not sure how to check like this eventhough If I define in
> ldap.attrmap as:
>
> checkItem       Connection-Type                    extensionAttribute10

Ok, several steps:

  1. Define your attribute in /etc/raddb/dictionary e.g.

ATTRIBUTE	My-Extension10	3010	string

  2. Define the LDAP -> RADIUS mapping in ldap.attrmap

checkItem	My-Extension10	extensionAttribute10

  3. Run the LDAP module, then compare the attribute. Note - because 
you've mapped the item to check/control lists, you can't use a "users" 
file - you must use unlang, like so:

authorize {
   ...
   ldap
   if (My-Extension10 == VPN) {
     ..
   }
}

...or more likely:

authorize {
   ..
   ldap
   if (Client-Shortname =~ /^VPN/) {
     if (My-Extension10 == VPN) {
       # permit
     }
     else {
       reject
     }
   }
   ...
}

HTH



More information about the Freeradius-Users mailing list